diff --git a/examples/http_redirect.py b/examples/http_redirect.py
index b13ee8bd..f3f176fc 100644
--- a/examples/http_redirect.py
+++ b/examples/http_redirect.py
@@ -35,9 +35,7 @@ def proxy(request, path):
@https.main_process_start
async def start(app, _):
- http_server = await http.create_server(
- port=HTTP_PORT, return_asyncio_server=True
- )
+ http_server = await http.create_server(port=HTTP_PORT, return_asyncio_server=True)
app.add_task(runner(http, http_server))
app.ctx.http_server = http_server
app.ctx.http = http
diff --git a/examples/logdna_example.py b/examples/logdna_example.py
index 9dc9ee40..f942a796 100644
--- a/examples/logdna_example.py
+++ b/examples/logdna_example.py
@@ -33,9 +33,7 @@ logdna_options = {
"mac": get_mac_address(),
}
-logdna_handler = LogDNAHandler(
- getenv("LOGDNA_API_KEY"), options=logdna_options
-)
+logdna_handler = LogDNAHandler(getenv("LOGDNA_API_KEY"), options=logdna_options)
logdna = logging.getLogger(__name__)
logdna.setLevel(logging.INFO)
diff --git a/examples/run_asgi.py b/examples/run_asgi.py
index 81a7cd8a..aedc1039 100644
--- a/examples/run_asgi.py
+++ b/examples/run_asgi.py
@@ -42,9 +42,7 @@ async def handler_file(request):
@app.route("/file_stream")
async def handler_file_stream(request):
- return await response.file_stream(
- Path("../") / "setup.py", chunk_size=1024
- )
+ return await response.file_stream(Path("../") / "setup.py", chunk_size=1024)
@app.post("/stream", stream=True)
diff --git a/examples/run_async_advanced.py b/examples/run_async_advanced.py
index fa8ffec6..e9cb8805 100644
--- a/examples/run_async_advanced.py
+++ b/examples/run_async_advanced.py
@@ -36,9 +36,7 @@ async def test(request):
if __name__ == "__main__":
asyncio.set_event_loop(uvloop.new_event_loop())
- serv_coro = app.create_server(
- host="0.0.0.0", port=8000, return_asyncio_server=True
- )
+ serv_coro = app.create_server(host="0.0.0.0", port=8000, return_asyncio_server=True)
loop = asyncio.get_event_loop()
serv_task = asyncio.ensure_future(serv_coro, loop=loop)
signal(SIGINT, lambda s, f: loop.stop())
diff --git a/examples/try_everything.py b/examples/try_everything.py
index 6020388d..211f0389 100644
--- a/examples/try_everything.py
+++ b/examples/try_everything.py
@@ -42,9 +42,7 @@ async def test_file(request):
@app.route("/file_stream")
async def test_file_stream(request):
- return await response.file_stream(
- os.path.abspath("setup.py"), chunk_size=1024
- )
+ return await response.file_stream(os.path.abspath("setup.py"), chunk_size=1024)
# ----------------------------------------------- #
diff --git a/examples/vhosts.py b/examples/vhosts.py
index 0c3482e4..bbac0f31 100644
--- a/examples/vhosts.py
+++ b/examples/vhosts.py
@@ -11,9 +11,7 @@ app = Sanic("Example")
bp = Blueprint("bp", host="bp.example.com")
-@app.route(
- "/", host=["example.com", "somethingelse.com", "therestofyourdomains.com"]
-)
+@app.route("/", host=["example.com", "somethingelse.com", "therestofyourdomains.com"])
async def hello_0(request):
return response.text("Some defaults")
diff --git a/guide/content/en/migrate.py b/guide/content/en/migrate.py
index e0510af4..5850597f 100644
--- a/guide/content/en/migrate.py
+++ b/guide/content/en/migrate.py
@@ -7,14 +7,10 @@ from emoji import EMOJI
COLUMN_PATTERN = re.compile(r"---:1\s*(.*?)\s*:--:1\s*(.*?)\s*:---", re.DOTALL)
PYTHON_HIGHLIGHT_PATTERN = re.compile(r"```python\{+.*?\}", re.DOTALL)
BASH_HIGHLIGHT_PATTERN = re.compile(r"```bash\{+.*?\}", re.DOTALL)
-NOTIFICATION_PATTERN = re.compile(
- r":::\s*(\w+)\s*(.*?)\n([\s\S]*?):::", re.MULTILINE
-)
+NOTIFICATION_PATTERN = re.compile(r":::\s*(\w+)\s*(.*?)\n([\s\S]*?):::", re.MULTILINE)
EMOJI_PATTERN = re.compile(r":(\w+):")
CURRENT_DIR = Path(__file__).parent
-SOURCE_DIR = (
- CURRENT_DIR.parent.parent.parent.parent / "sanic-guide" / "src" / "en"
-)
+SOURCE_DIR = CURRENT_DIR.parent.parent.parent.parent / "sanic-guide" / "src" / "en"
def convert_columns(content: str):
diff --git a/guide/webapp/display/layouts/elements/footer.py b/guide/webapp/display/layouts/elements/footer.py
index 4ef2051a..f5545580 100644
--- a/guide/webapp/display/layouts/elements/footer.py
+++ b/guide/webapp/display/layouts/elements/footer.py
@@ -13,9 +13,7 @@ def do_footer(builder: Builder, request: Request) -> None:
def _pagination(request: Request) -> Builder:
- return E.div(
- _pagination_left(request), _pagination_right(request), class_="level"
- )
+ return E.div(_pagination_left(request), _pagination_right(request), class_="level")
def _pagination_left(request: Request) -> Builder:
@@ -64,9 +62,7 @@ def _content() -> Builder:
href="https://github.com/sanic-org/sanic/blob/master/LICENSE",
target="_blank",
rel="nofollow noopener noreferrer",
- ).br()(
- E.small(f"Copyright © 2018-{year} Sanic Community Organization")
- ),
+ ).br()(E.small(f"Copyright © 2018-{year} Sanic Community Organization")),
)
return E.div(
inner,
diff --git a/guide/webapp/display/layouts/elements/navbar.py b/guide/webapp/display/layouts/elements/navbar.py
index 5581e4a6..3bb1810d 100644
--- a/guide/webapp/display/layouts/elements/navbar.py
+++ b/guide/webapp/display/layouts/elements/navbar.py
@@ -6,12 +6,9 @@ from webapp.display.layouts.models import MenuItem
def do_navbar(builder: Builder, request: Request) -> None:
navbar_items = [
- _render_navbar_item(item, request)
- for item in request.app.config.NAVBAR
+ _render_navbar_item(item, request) for item in request.app.config.NAVBAR
]
- container = E.div(
- _search_form(request), *navbar_items, class_="navbar-end"
- )
+ container = E.div(_search_form(request), *navbar_items, class_="navbar-end")
builder.nav(
E.div(container, class_="navbar-menu"),
@@ -46,10 +43,7 @@ def _render_navbar_item(item: MenuItem, request: Request) -> Builder:
return E.div(
E.a(item.label, class_="navbar-link"),
E.div(
- *(
- _render_navbar_item(subitem, request)
- for subitem in item.items
- ),
+ *(_render_navbar_item(subitem, request) for subitem in item.items),
class_="navbar-dropdown",
),
class_="navbar-item has-dropdown is-hoverable",
diff --git a/guide/webapp/display/layouts/elements/sidebar.py b/guide/webapp/display/layouts/elements/sidebar.py
index 72a04082..60a07e37 100644
--- a/guide/webapp/display/layouts/elements/sidebar.py
+++ b/guide/webapp/display/layouts/elements/sidebar.py
@@ -15,9 +15,7 @@ def _menu_items(request: Request) -> list[Builder]:
_sanic_logo(request),
*_sidebar_items(request),
E.hr(),
- E.p("Current with version ").strong(
- request.app.config.GENERAL.current_version
- ),
+ E.p("Current with version ").strong(request.app.config.GENERAL.current_version),
E.hr(),
E.p("Want more? ").a(
"sanicbook.com", href="https://sanicbook.com", target="_blank"
@@ -73,9 +71,7 @@ def _single_sidebar_item(item: MenuItem, request: Request) -> Builder:
kwargs = {}
classes: list[str] = []
li_classes = "menu-item"
- _, page, _ = request.app.ctx.get_page(
- request.ctx.language, item.path or ""
- )
+ _, page, _ = request.app.ctx.get_page(request.ctx.language, item.path or "")
if request.path == path:
classes.append("is-active")
if item.href:
diff --git a/guide/webapp/display/markdown.py b/guide/webapp/display/markdown.py
index eb76cb81..2236dda6 100644
--- a/guide/webapp/display/markdown.py
+++ b/guide/webapp/display/markdown.py
@@ -36,9 +36,9 @@ class DocsRenderer(HTMLRenderer):
class_="code-block__copy",
onclick="copyCode(this)",
):
- builder.div(
- class_="code-block__rectangle code-block__filled"
- ).div(class_="code-block__rectangle code-block__outlined")
+ builder.div(class_="code-block__rectangle code-block__filled").div(
+ class_="code-block__rectangle code-block__outlined"
+ )
else:
builder.pre(E.code(escape(code)))
return str(builder)
@@ -46,9 +46,7 @@ class DocsRenderer(HTMLRenderer):
def heading(self, text: str, level: int, **attrs) -> str:
ident = slugify(text)
if level > 1:
- text += self._make_tag(
- "a", {"href": f"#{ident}", "class": "anchor"}, "#"
- )
+ text += self._make_tag("a", {"href": f"#{ident}", "class": "anchor"}, "#")
return self._make_tag(
f"h{level}", {"id": ident, "class": f"is-size-{level}"}, text
)
@@ -92,9 +90,7 @@ class DocsRenderer(HTMLRenderer):
def _make_tag(
self, tag: str, attributes: dict[str, str], text: str | None = None
) -> str:
- attrs = " ".join(
- f'{key}="{value}"' for key, value in attributes.items()
- )
+ attrs = " ".join(f'{key}="{value}"' for key, value in attributes.items())
if text is None:
return f"<{tag} {attrs} />"
return f"<{tag} {attrs}>{text}{tag}>"
diff --git a/guide/webapp/display/page/docobject.py b/guide/webapp/display/page/docobject.py
index e35f90fd..c09cd1ca 100644
--- a/guide/webapp/display/page/docobject.py
+++ b/guide/webapp/display/page/docobject.py
@@ -119,9 +119,7 @@ def _extract_docobjects(package_name: str) -> dict[str, DocObject]:
docstrings = {}
package = importlib.import_module(package_name)
- for _, name, _ in pkgutil.walk_packages(
- package.__path__, package_name + "."
- ):
+ for _, name, _ in pkgutil.walk_packages(package.__path__, package_name + "."):
module = importlib.import_module(name)
for obj_name, obj in inspect.getmembers(module):
if (
@@ -155,9 +153,7 @@ def _docobject_to_html(
) -> None:
anchor_id = slugify(docobject.full_name.replace(".", "-"))
anchor = E.a("#", class_="anchor", href=f"#{anchor_id}")
- class_name, heading = _define_heading_and_class(
- docobject, anchor, as_method
- )
+ class_name, heading = _define_heading_and_class(docobject, anchor, as_method)
with builder.div(class_=class_name):
builder(heading)
@@ -211,9 +207,7 @@ def _docobject_to_html(
if docobject.docstring.params:
with builder.div(class_="box mt-5"):
- builder.h5(
- "Parameters", class_="is-size-5 has-text-weight-bold"
- )
+ builder.h5("Parameters", class_="is-size-5 has-text-weight-bold")
_render_params(builder, docobject.docstring.params)
if docobject.docstring.returns:
@@ -238,9 +232,7 @@ def _signature_to_html(
parts = []
parts.append("")
for decorator in decorators:
- parts.append(
- f"@{decorator}
"
- )
+ parts.append(f"@{decorator}
")
parts.append(
f"{object_type} "
f"{name}("
@@ -254,9 +246,7 @@ def _signature_to_html(
annotation = ""
if param.annotation != inspect.Parameter.empty:
annotation = escape(str(param.annotation))
- parts.append(
- f": {annotation}"
- )
+ parts.append(f": {annotation}")
if param.default != inspect.Parameter.empty:
default = escape(str(param.default))
if annotation == "str":
@@ -267,9 +257,7 @@ def _signature_to_html(
parts.append(")")
if signature.return_annotation != inspect.Signature.empty:
return_annotation = escape(str(signature.return_annotation))
- parts.append(
- f": -> {return_annotation}"
- )
+ parts.append(f": -> {return_annotation}")
parts.append("")
return "".join(parts)
@@ -317,10 +305,7 @@ def _render_params(builder: Builder, params: list[DocstringParam]) -> None:
builder.dd(
HTML(
render_markdown(
- param.description
- or param.arg_name
- or param.type_name
- or ""
+ param.description or param.arg_name or param.type_name or ""
)
)
)
@@ -333,11 +318,7 @@ def _render_raises(builder: Builder, raises: list[DocstringRaises]) -> None:
with builder.dl(class_="mt-2"):
builder.dt(raise_.type_name, class_="is-family-monospace")
builder.dd(
- HTML(
- render_markdown(
- raise_.description or raise_.type_name or ""
- )
- )
+ HTML(render_markdown(raise_.description or raise_.type_name or ""))
)
@@ -353,11 +334,7 @@ def _render_returns(builder: Builder, docobject: DocObject) -> None:
if not return_type or return_type == inspect.Signature.empty:
return_type = "N/A"
- term = (
- "Return"
- if not docobject.docstring.returns.is_generator
- else "Yields"
- )
+ term = "Return" if not docobject.docstring.returns.is_generator else "Yields"
builder.h5(term, class_="is-size-5 has-text-weight-bold")
with builder.dl(class_="mt-2"):
builder.dt(return_type, class_="is-family-monospace")
@@ -372,17 +349,11 @@ def _render_returns(builder: Builder, docobject: DocObject) -> None:
)
-def _render_examples(
- builder: Builder, examples: list[DocstringExample]
-) -> None:
+def _render_examples(builder: Builder, examples: list[DocstringExample]) -> None:
with builder.div(class_="box mt-5"):
builder.h5("Examples", class_="is-size-5 has-text-weight-bold")
for example in examples:
with builder.div(class_="mt-2"):
builder(
- HTML(
- render_markdown(
- example.description or example.snippet or ""
- )
- )
+ HTML(render_markdown(example.description or example.snippet or ""))
)
diff --git a/guide/webapp/display/page/page.py b/guide/webapp/display/page/page.py
index a2c9d4cb..3c168f9e 100644
--- a/guide/webapp/display/page/page.py
+++ b/guide/webapp/display/page/page.py
@@ -11,9 +11,7 @@ from ..layouts.main import MainLayout
from ..markdown import render_markdown
from .docobject import organize_docobjects
-_PAGE_CACHE: dict[
- str, dict[str, tuple[Page | None, Page | None, Page | None]]
-] = {}
+_PAGE_CACHE: dict[str, dict[str, tuple[Page | None, Page | None, Page | None]]] = {}
_LAYOUTS_CACHE: dict[str, type[BaseLayout]] = {
"home": HomeLayout,
"main": MainLayout,
diff --git a/guide/webapp/display/page/renderer.py b/guide/webapp/display/page/renderer.py
index 987aa3c7..370a4c8c 100644
--- a/guide/webapp/display/page/renderer.py
+++ b/guide/webapp/display/page/renderer.py
@@ -20,13 +20,9 @@ class PageRenderer(BaseRenderer):
self._body(request, builder, language, path)
return builder
- def _body(
- self, request: Request, builder: Builder, language: str, path: str
- ):
+ def _body(self, request: Request, builder: Builder, language: str, path: str):
prev_page, current_page, next_page = Page.get(language, path)
- request.ctx.language = (
- Page.DEFAULT_LANGUAGE if language == "api" else language
- )
+ request.ctx.language = Page.DEFAULT_LANGUAGE if language == "api" else language
request.ctx.current_page = current_page
request.ctx.previous_page = prev_page
request.ctx.next_page = next_page
@@ -38,9 +34,7 @@ class PageRenderer(BaseRenderer):
@contextmanager
def _base(self, request: Request, builder: Builder, page: Page | None):
- layout_type: type[BaseLayout] = (
- page.get_layout() if page else BaseLayout
- )
+ layout_type: type[BaseLayout] = page.get_layout() if page else BaseLayout
layout = layout_type(builder)
with layout(request, builder.full):
yield
diff --git a/guide/webapp/display/plugins/attrs.py b/guide/webapp/display/plugins/attrs.py
index f2f33363..d605ba41 100644
--- a/guide/webapp/display/plugins/attrs.py
+++ b/guide/webapp/display/plugins/attrs.py
@@ -15,9 +15,7 @@ class Attributes(DirectivePlugin):
if md.renderer.NAME == "html":
md.renderer.register("attrs", self._render)
- def parse(
- self, block: BlockParser, m: Match, state: BlockState
- ) -> dict[str, Any]:
+ def parse(self, block: BlockParser, m: Match, state: BlockState) -> dict[str, Any]:
info = m.groupdict()
options = dict(self.parse_options(m))
new_state = block.state_cls()
diff --git a/guide/webapp/display/plugins/columns.py b/guide/webapp/display/plugins/columns.py
index 4ab7feab..7e448e8e 100644
--- a/guide/webapp/display/plugins/columns.py
+++ b/guide/webapp/display/plugins/columns.py
@@ -10,9 +10,7 @@ from mistune.markdown import Markdown
class Column(DirectivePlugin):
- def parse(
- self, block: BlockParser, m: Match, state: BlockState
- ) -> dict[str, Any]:
+ def parse(self, block: BlockParser, m: Match, state: BlockState) -> dict[str, Any]:
info = m.groupdict()
new_state = block.state_cls()
@@ -36,9 +34,7 @@ class Column(DirectivePlugin):
def _render_column(self, renderer: HTMLRenderer, text: str, **attrs):
start = (
- '
\n'
- if attrs.get("first")
- else ""
+ '
\n' if attrs.get("first") else ""
)
end = "
\n" if attrs.get("last") else ""
col = f'
{text}
\n'
diff --git a/guide/webapp/display/plugins/hook.py b/guide/webapp/display/plugins/hook.py
index db1b647a..e0ff1295 100644
--- a/guide/webapp/display/plugins/hook.py
+++ b/guide/webapp/display/plugins/hook.py
@@ -16,16 +16,12 @@ class Hook(DirectivePlugin):
for type_ in ("column", "tab"):
if token["type"] == type_:
maybe_next = (
- state.tokens[idx + 1]
- if idx + 1 < len(state.tokens)
- else None
+ state.tokens[idx + 1] if idx + 1 < len(state.tokens) else None
)
token.setdefault("attrs", {})
if prev and prev["type"] != type_:
token["attrs"]["first"] = True
- if (
- maybe_next and maybe_next["type"] != type_
- ) or not maybe_next:
+ if (maybe_next and maybe_next["type"] != type_) or not maybe_next:
token["attrs"]["last"] = True
prev = token
diff --git a/guide/webapp/display/plugins/mermaid.py b/guide/webapp/display/plugins/mermaid.py
index 935aae44..b814b812 100644
--- a/guide/webapp/display/plugins/mermaid.py
+++ b/guide/webapp/display/plugins/mermaid.py
@@ -12,9 +12,7 @@ from mistune.markdown import Markdown
class Mermaid(DirectivePlugin):
- def parse(
- self, block: BlockParser, m: Match, state: BlockState
- ) -> dict[str, Any]:
+ def parse(self, block: BlockParser, m: Match, state: BlockState) -> dict[str, Any]:
info = m.groupdict()
new_state = block.state_cls()
diff --git a/guide/webapp/display/plugins/notification.py b/guide/webapp/display/plugins/notification.py
index 15b0689f..aaf8a338 100644
--- a/guide/webapp/display/plugins/notification.py
+++ b/guide/webapp/display/plugins/notification.py
@@ -19,12 +19,8 @@ class Notification(Admonition):
if md.renderer.NAME == "html":
md.renderer.register("admonition", self._render_admonition)
- md.renderer.register(
- "admonition_title", self._render_admonition_title
- )
- md.renderer.register(
- "admonition_content", self._render_admonition_content
- )
+ md.renderer.register("admonition_title", self._render_admonition_title)
+ md.renderer.register("admonition_content", self._render_admonition_content)
def _render_admonition(self, _, text, name, **attrs) -> str:
return str(
diff --git a/guide/webapp/display/plugins/tabs.py b/guide/webapp/display/plugins/tabs.py
index b99e70db..882254e9 100644
--- a/guide/webapp/display/plugins/tabs.py
+++ b/guide/webapp/display/plugins/tabs.py
@@ -10,9 +10,7 @@ from mistune.markdown import Markdown
class Tabs(DirectivePlugin):
- def parse(
- self, block: BlockParser, m: Match, state: BlockState
- ) -> dict[str, Any]:
+ def parse(self, block: BlockParser, m: Match, state: BlockState) -> dict[str, Any]:
info = m.groupdict()
new_state = block.state_cls()
@@ -41,9 +39,7 @@ class Tabs(DirectivePlugin):
def _render_tab(self, renderer: HTMLRenderer, text: str, **attrs):
start = '
\n' if attrs.get("first") else ""
end = (
- '
\n'
- if attrs.get("last")
- else ""
+ '
\n' if attrs.get("last") else ""
)
content = f'{text}
\n'
tab = f'{attrs["title"]}{content}\n'
diff --git a/guide/webapp/display/search/search.py b/guide/webapp/display/search/search.py
index a8a35cb4..d84ba79b 100644
--- a/guide/webapp/display/search/search.py
+++ b/guide/webapp/display/search/search.py
@@ -92,9 +92,7 @@ def _inverse_document_frequency(docs: list[Document]) -> dict[str, float]:
return {word: num_docs / count for word, count in word_count.items()}
-def _tf_idf_vector(
- document: Document, idf: dict[str, float]
-) -> dict[str, float]:
+def _tf_idf_vector(document: Document, idf: dict[str, float]) -> dict[str, float]:
"""Calculate the TF-IDF vector for a document."""
return {
word: tf * idf[word]
@@ -103,9 +101,7 @@ def _tf_idf_vector(
}
-def _cosine_similarity(
- vec1: dict[str, float], vec2: dict[str, float]
-) -> float:
+def _cosine_similarity(vec1: dict[str, float], vec2: dict[str, float]) -> float:
"""Calculate the cosine similarity between two vectors."""
if not vec1 or not vec2:
return 0.0
@@ -127,9 +123,7 @@ def _search(
tf_idf_query = _tf_idf_vector(
Document(page=dummy_page, language=language).process(stemmer), idf
)
- similarities = [
- _cosine_similarity(tf_idf_query, vector) for vector in vectors
- ]
+ similarities = [_cosine_similarity(tf_idf_query, vector) for vector in vectors]
return [
(similarity, document)
for similarity, document in sorted(
@@ -156,16 +150,13 @@ class Searcher:
}
self._vectors = {
language: [
- _tf_idf_vector(document, self._idf[language])
- for document in documents
+ _tf_idf_vector(document, self._idf[language]) for document in documents
]
for language, documents in self._documents.items()
}
self._stemmer = stemmer
- def search(
- self, query: str, language: str
- ) -> list[tuple[float, Document]]:
+ def search(self, query: str, language: str) -> list[tuple[float, Document]]:
return _search(
query,
language,
diff --git a/guide/webapp/worker/factory.py b/guide/webapp/worker/factory.py
index 3f5f454e..80c98437 100644
--- a/guide/webapp/worker/factory.py
+++ b/guide/webapp/worker/factory.py
@@ -28,13 +28,9 @@ def create_app(root: Path) -> Sanic:
app.config.STYLE_DIR = root / "style"
app.config.NODE_MODULES_DIR = root / "node_modules"
app.config.LANGUAGES = ["en"]
- app.config.SIDEBAR = load_menu(
- app.config.CONFIG_DIR / "en" / "sidebar.yaml"
- )
+ app.config.SIDEBAR = load_menu(app.config.CONFIG_DIR / "en" / "sidebar.yaml")
app.config.NAVBAR = load_menu(app.config.CONFIG_DIR / "en" / "navbar.yaml")
- app.config.GENERAL = load_config(
- app.config.CONFIG_DIR / "en" / "general.yaml"
- )
+ app.config.GENERAL = load_config(app.config.CONFIG_DIR / "en" / "general.yaml")
setup_livereload(app)
setup_style(app)
@@ -66,8 +62,6 @@ def create_app(root: Path) -> Sanic:
@app.on_request
async def set_language(request: Request):
- request.ctx.language = request.match_info.get(
- "language", Page.DEFAULT_LANGUAGE
- )
+ request.ctx.language = request.match_info.get("language", Page.DEFAULT_LANGUAGE)
return app
diff --git a/guide/webapp/worker/reload.py b/guide/webapp/worker/reload.py
index c3adc24a..8efa7e8a 100644
--- a/guide/webapp/worker/reload.py
+++ b/guide/webapp/worker/reload.py
@@ -53,16 +53,12 @@ class Livereload:
"serverName": SERVER_NAME,
}
- def __init__(
- self, reload_queue: Queue, debug: bool, state: dict[str, Any]
- ):
+ def __init__(self, reload_queue: Queue, debug: bool, state: dict[str, Any]):
self.reload_queue = reload_queue
self.app = Sanic(self.SERVER_NAME)
self.debug = debug
self.state = state
- self.app.static(
- "/livereload.js", Path(__file__).parent / "livereload.js"
- )
+ self.app.static("/livereload.js", Path(__file__).parent / "livereload.js")
self.app.add_websocket_route(
self.livereload_handler, "/livereload", name="livereload"
)
@@ -108,7 +104,5 @@ class Livereload:
break
-def _run_reload_server(
- reload_queue: Queue, debug: bool, state: dict[str, Any]
-):
+def _run_reload_server(reload_queue: Queue, debug: bool, state: dict[str, Any]):
Livereload(reload_queue, debug, state).run()
diff --git a/sanic/app.py b/sanic/app.py
index f7c22af4..42c2024b 100644
--- a/sanic/app.py
+++ b/sanic/app.py
@@ -309,9 +309,7 @@ class Sanic(
self.asgi = False
self.auto_reload = False
self.blueprints: dict[str, Blueprint] = {}
- self.certloader_class: type[CertLoader] = (
- certloader_class or CertLoader
- )
+ self.certloader_class: type[CertLoader] = certloader_class or CertLoader
self.configure_logging: bool = configure_logging
self.ctx: ctx_type = cast(ctx_type, ctx or SimpleNamespace())
self.error_handler: ErrorHandler = error_handler or ErrorHandler()
@@ -387,15 +385,11 @@ class Sanic(
try:
_event = ListenerEvent[event.upper()]
except (ValueError, AttributeError):
- valid = ", ".join(
- x.lower() for x in ListenerEvent.__members__.keys()
- )
+ valid = ", ".join(x.lower() for x in ListenerEvent.__members__.keys())
raise BadRequest(f"Invalid event: {event}. Use one of: {valid}")
if "." in _event:
- self.signal(_event.value)(
- partial(self._listener, listener=listener)
- )
+ self.signal(_event.value)(partial(self._listener, listener=listener))
else:
self.listeners[_event.value].append(listener)
@@ -522,9 +516,7 @@ class Sanic(
def _apply_listener(self, listener: FutureListener):
return self.register_listener(listener.listener, listener.event)
- def _apply_route(
- self, route: FutureRoute, overwrite: bool = False
- ) -> list[Route]:
+ def _apply_route(self, route: FutureRoute, overwrite: bool = False) -> list[Route]:
params = route._asdict()
params["overwrite"] = overwrite
websocket = params.pop("websocket", False)
@@ -653,9 +645,7 @@ class Sanic(
fail_not_found=fail_not_found,
)
- async def event(
- self, event: str, timeout: int | float | None = None
- ) -> None:
+ async def event(self, event: str, timeout: int | float | None = None) -> None:
"""Wait for a specific event to be triggered.
This method waits for a named event to be triggered and can be used
@@ -740,9 +730,7 @@ class Sanic(
async def report(exception: Exception) -> None:
await handler(self, exception)
- self.add_signal(
- handler=report, event=Event.SERVER_EXCEPTION_REPORT.value
- )
+ self.add_signal(handler=report, event=Event.SERVER_EXCEPTION_REPORT.value)
return report
@@ -831,14 +819,12 @@ class Sanic(
for _attr in ["version", "strict_slashes"]:
if getattr(item, _attr) is None:
- params[_attr] = getattr(
- blueprint, _attr
- ) or options.get(_attr)
+ params[_attr] = getattr(blueprint, _attr) or options.get(
+ _attr
+ )
if item.version_prefix == "/v":
if blueprint.version_prefix == "/v":
- params["version_prefix"] = options.get(
- "version_prefix"
- )
+ params["version_prefix"] = options.get("version_prefix")
else:
params["version_prefix"] = blueprint.version_prefix
name_prefix = getattr(blueprint, "name_prefix", None)
@@ -855,10 +841,7 @@ class Sanic(
self.blueprints[blueprint.name] = blueprint
self._blueprint_order.append(blueprint)
- if (
- self.strict_slashes is not None
- and blueprint.strict_slashes is None
- ):
+ if self.strict_slashes is not None and blueprint.strict_slashes is None:
blueprint.strict_slashes = self.strict_slashes
blueprint.register(self, options)
@@ -928,9 +911,7 @@ class Sanic(
route = self.router.find_route_by_view_name(view_name, **kw)
if not route:
- raise URLBuildError(
- f"Endpoint with name `{view_name}` was not found"
- )
+ raise URLBuildError(f"Endpoint with name `{view_name}` was not found")
uri = route.path
@@ -969,9 +950,7 @@ class Sanic(
scheme = kwargs.pop("_scheme", "")
if route.extra.hosts and external:
if not host and len(route.extra.hosts) > 1:
- raise ValueError(
- f"Host is ambiguous: {', '.join(route.extra.hosts)}"
- )
+ raise ValueError(f"Host is ambiguous: {', '.join(route.extra.hosts)}")
elif host and host not in route.extra.hosts:
raise ValueError(
f"Requested host ({host}) is not available for this "
@@ -1087,10 +1066,7 @@ class Sanic(
context={"request": request, "exception": exception},
)
- if (
- request.stream is not None
- and request.stream.stage is not Stage.HANDLER
- ):
+ if request.stream is not None and request.stream.stage is not Stage.HANDLER:
error_logger.exception(exception, exc_info=True)
logger.error(
"The error response will not be sent to the client for "
@@ -1137,10 +1113,7 @@ class Sanic(
response = self.error_handler.default(request, e)
elif self.debug:
response = HTTPResponse(
- (
- f"Error while handling error: {e}\n"
- f"Stack: {format_exc()}"
- ),
+ (f"Error while handling error: {e}\n" f"Stack: {format_exc()}"),
status=500,
)
else:
@@ -1185,9 +1158,7 @@ class Sanic(
)
await response.eof()
else:
- raise ServerError(
- f"Invalid response type {response!r} (need HTTPResponse)"
- )
+ raise ServerError(f"Invalid response type {response!r} (need HTTPResponse)")
async def handle_request(self, request: Request) -> None: # no cov
"""Handles a request by dispatching it to the appropriate handler.
@@ -1334,17 +1305,14 @@ class Sanic(
else:
if not hasattr(handler, "is_websocket"):
raise ServerError(
- f"Invalid response type {response!r} "
- "(need HTTPResponse)"
+ f"Invalid response type {response!r} " "(need HTTPResponse)"
)
except CancelledError: # type: ignore
raise
except Exception as e:
# Response Generation Failed
- await self.handle_exception(
- request, e, run_middleware=run_middleware
- )
+ await self.handle_exception(request, e, run_middleware=run_middleware)
async def _websocket_handler(
self, handler, request, *args, subprotocols=None, **kwargs
@@ -1423,9 +1391,7 @@ class Sanic(
# Execution
# -------------------------------------------------------------------- #
- async def _run_request_middleware(
- self, request, middleware_collection
- ): # no cov
+ async def _run_request_middleware(self, request, middleware_collection): # no cov
request._request_middleware_started = True
for middleware in middleware_collection:
@@ -1502,9 +1468,7 @@ class Sanic(
task.cancel()
@staticmethod
- async def _listener(
- app: Sanic, loop: AbstractEventLoop, listener: ListenerType
- ):
+ async def _listener(app: Sanic, loop: AbstractEventLoop, listener: ListenerType):
try:
maybe_coro = listener(app) # type: ignore
except TypeError:
@@ -1533,9 +1497,7 @@ class Sanic(
if isawaitable(task):
await task
except CancelledError:
- error_logger.warning(
- f"Task {task} was cancelled before it completed."
- )
+ error_logger.warning(f"Task {task} was cancelled before it completed.")
raise
except Exception as e:
await app.dispatch(
@@ -1644,18 +1606,14 @@ class Sanic(
""" # noqa: E501
try:
loop = self.loop # Will raise SanicError if loop is not started
- return self._loop_add_task(
- task, self, loop, name=name, register=register
- )
+ return self._loop_add_task(task, self, loop, name=name, register=register)
except SanicException:
task_name = f"sanic.delayed_task.{hash(task)}"
if not self._delayed_tasks:
self.after_server_start(partial(self.dispatch_delayed_tasks))
if name:
- raise RuntimeError(
- "Cannot name task outside of a running application"
- )
+ raise RuntimeError("Cannot name task outside of a running application")
self.signal(task_name)(partial(self.run_delayed_task, task=task))
self._delayed_tasks.append(task_name)
@@ -1666,18 +1624,14 @@ class Sanic(
...
@overload
- def get_task(
- self, name: str, *, raise_exception: Literal[False]
- ) -> Task | None:
+ def get_task(self, name: str, *, raise_exception: Literal[False]) -> Task | None:
...
@overload
def get_task(self, name: str, *, raise_exception: bool) -> Task | None:
...
- def get_task(
- self, name: str, *, raise_exception: bool = True
- ) -> Task | None:
+ def get_task(self, name: str, *, raise_exception: bool = True) -> Task | None:
"""Get a named task.
This method is used to get a task by its name. Optionally, you can
@@ -1695,9 +1649,7 @@ class Sanic(
return self._task_registry[name]
except KeyError:
if raise_exception:
- raise SanicException(
- f'Registered task named "{name}" not found.'
- )
+ raise SanicException(f'Registered task named "{name}" not found.')
return None
async def cancel_task(
@@ -1809,11 +1761,7 @@ class Sanic(
Iterable[Task[Any]]: The tasks that are currently registered with
the application.
"""
- return (
- task
- for task in iter(self._task_registry.values())
- if task is not None
- )
+ return (task for task in iter(self._task_registry.values()) if task is not None)
# -------------------------------------------------------------------- #
# ASGI
@@ -2055,9 +2003,7 @@ class Sanic(
del cls._app_registry[name]
@classmethod
- def get_app(
- cls, name: str | None = None, *, force_create: bool = False
- ) -> Sanic:
+ def get_app(cls, name: str | None = None, *, force_create: bool = False) -> Sanic:
"""Retrieve an instantiated Sanic instance by name.
This method is best used when needing to get access to an already
@@ -2264,9 +2210,7 @@ class Sanic(
self.finalize()
route_names = [route.extra.ident for route in self.router.routes]
- duplicates = {
- name for name in route_names if route_names.count(name) > 1
- }
+ duplicates = {name for name in route_names if route_names.count(name) > 1}
if duplicates:
names = ", ".join(duplicates)
message = (
@@ -2311,9 +2255,7 @@ class Sanic(
"shutdown",
):
raise SanicException(f"Invalid server event: {event}")
- logger.debug(
- f"Triggering server events: {event}", extra={"verbosity": 1}
- )
+ logger.debug(f"Triggering server events: {event}", extra={"verbosity": 1})
reverse = concern == "shutdown"
if loop is None:
loop = self.loop
@@ -2379,9 +2321,7 @@ class Sanic(
Inspector: An instance of Inspector.
"""
if environ.get("SANIC_WORKER_PROCESS") or not self._inspector:
- raise SanicException(
- "Can only access the inspector from the main process"
- )
+ raise SanicException("Can only access the inspector from the main process")
return self._inspector
@property
@@ -2414,7 +2354,5 @@ class Sanic(
"""
if environ.get("SANIC_WORKER_PROCESS") or not self._manager:
- raise SanicException(
- "Can only access the manager from the main process"
- )
+ raise SanicException("Can only access the manager from the main process")
return self._manager
diff --git a/sanic/application/logo.py b/sanic/application/logo.py
index c8be7c85..4941f90f 100644
--- a/sanic/application/logo.py
+++ b/sanic/application/logo.py
@@ -61,10 +61,7 @@ def get_logo(full: bool = False, coffee: bool = False) -> str:
else BASE_LOGO
)
- if (
- sys.platform == "darwin"
- and environ.get("TERM_PROGRAM") == "Apple_Terminal"
- ):
+ if sys.platform == "darwin" and environ.get("TERM_PROGRAM") == "Apple_Terminal":
logo = ansi_pattern.sub("", logo)
return logo
diff --git a/sanic/application/motd.py b/sanic/application/motd.py
index 0409bd06..c618cc45 100644
--- a/sanic/application/motd.py
+++ b/sanic/application/motd.py
@@ -79,9 +79,7 @@ class MOTDTTY(MOTD):
def set_variables(self): # no cov
"""Set the variables used for display."""
fallback = (108, 24)
- terminal_width = max(
- get_terminal_size(fallback=fallback).columns, fallback[0]
- )
+ terminal_width = max(get_terminal_size(fallback=fallback).columns, fallback[0])
self.max_value_width = terminal_width - fallback[0] + 36
self.key_width = 4
diff --git a/sanic/application/spinner.py b/sanic/application/spinner.py
index f5431072..e2b42af5 100644
--- a/sanic/application/spinner.py
+++ b/sanic/application/spinner.py
@@ -52,13 +52,9 @@ class Spinner: # noqa
if os.name == "nt":
ci = _CursorInfo()
handle = ctypes.windll.kernel32.GetStdHandle(-11)
- ctypes.windll.kernel32.GetConsoleCursorInfo(
- handle, ctypes.byref(ci)
- )
+ ctypes.windll.kernel32.GetConsoleCursorInfo(handle, ctypes.byref(ci))
ci.visible = False
- ctypes.windll.kernel32.SetConsoleCursorInfo(
- handle, ctypes.byref(ci)
- )
+ ctypes.windll.kernel32.SetConsoleCursorInfo(handle, ctypes.byref(ci))
elif os.name == "posix":
sys.stdout.write("\033[?25l")
sys.stdout.flush()
@@ -68,13 +64,9 @@ class Spinner: # noqa
if os.name == "nt":
ci = _CursorInfo()
handle = ctypes.windll.kernel32.GetStdHandle(-11)
- ctypes.windll.kernel32.GetConsoleCursorInfo(
- handle, ctypes.byref(ci)
- )
+ ctypes.windll.kernel32.GetConsoleCursorInfo(handle, ctypes.byref(ci))
ci.visible = True
- ctypes.windll.kernel32.SetConsoleCursorInfo(
- handle, ctypes.byref(ci)
- )
+ ctypes.windll.kernel32.SetConsoleCursorInfo(handle, ctypes.byref(ci))
elif os.name == "posix":
sys.stdout.write("\033[?25h")
sys.stdout.flush()
diff --git a/sanic/application/state.py b/sanic/application/state.py
index 435ba226..186ed92e 100644
--- a/sanic/application/state.py
+++ b/sanic/application/state.py
@@ -62,9 +62,7 @@ class ApplicationState:
def __setattr__(self, name: str, value: Any) -> None:
if self._init and name == "_init":
- raise RuntimeError(
- "Cannot change the value of _init after instantiation"
- )
+ raise RuntimeError("Cannot change the value of _init after instantiation")
super().__setattr__(name, value)
if self._init and hasattr(self, f"set_{name}"):
getattr(self, f"set_{name}")(value)
@@ -105,9 +103,7 @@ class ApplicationState:
if all(info.stage is ServerStage.SERVING for info in self.server_info):
return ServerStage.SERVING
- elif any(
- info.stage is ServerStage.SERVING for info in self.server_info
- ):
+ elif any(info.stage is ServerStage.SERVING for info in self.server_info):
return ServerStage.PARTIAL
return ServerStage.STOPPED
diff --git a/sanic/asgi.py b/sanic/asgi.py
index fc01f0f7..7419eb45 100644
--- a/sanic/asgi.py
+++ b/sanic/asgi.py
@@ -140,9 +140,7 @@ class ASGIApp:
]
)
except UnicodeDecodeError:
- raise BadRequest(
- "Header names can only contain US-ASCII characters"
- )
+ raise BadRequest("Header names can only contain US-ASCII characters")
if scope["type"] == "http":
version = scope["http_version"]
@@ -151,9 +149,7 @@ class ASGIApp:
version = "1.1"
method = "GET"
- instance.ws = instance.transport.create_websocket_connection(
- send, receive
- )
+ instance.ws = instance.transport.create_websocket_connection(send, receive)
else:
raise ServerError("Received unknown ASGI scope")
diff --git a/sanic/base/root.py b/sanic/base/root.py
index fc0646fb..4f5229c4 100644
--- a/sanic/base/root.py
+++ b/sanic/base/root.py
@@ -24,9 +24,7 @@ class BaseSanic(
):
__slots__ = ("name",)
- def __init__(
- self, name: Optional[str] = None, *args: Any, **kwargs: Any
- ) -> None:
+ def __init__(self, name: Optional[str] = None, *args: Any, **kwargs: Any) -> None:
class_name = self.__class__.__name__
if name is None:
diff --git a/sanic/blueprints.py b/sanic/blueprints.py
index 2b27ccd1..53c408c7 100644
--- a/sanic/blueprints.py
+++ b/sanic/blueprints.py
@@ -128,9 +128,7 @@ class Blueprint(BaseSanic):
self.host = host
self.strict_slashes = strict_slashes
self.url_prefix = (
- url_prefix[:-1]
- if url_prefix and url_prefix.endswith("/")
- else url_prefix
+ url_prefix[:-1] if url_prefix and url_prefix.endswith("/") else url_prefix
)
self.version = version
self.version_prefix = version_prefix
@@ -164,9 +162,7 @@ class Blueprint(BaseSanic):
an app.
"""
if not self._apps:
- raise SanicException(
- f"{self} has not yet been registered to an app"
- )
+ raise SanicException(f"{self} has not yet been registered to an app")
return self._apps
@property
@@ -345,9 +341,7 @@ class Blueprint(BaseSanic):
opt_strict_slashes = options.get("strict_slashes", None)
opt_version_prefix = options.get("version_prefix", self.version_prefix)
opt_name_prefix = options.get("name_prefix", None)
- error_format = options.get(
- "error_format", app.config.FALLBACK_ERROR_FORMAT
- )
+ error_format = options.get("error_format", app.config.FALLBACK_ERROR_FORMAT)
routes = []
middleware = []
@@ -373,9 +367,7 @@ class Blueprint(BaseSanic):
version_prefix = prefix
break
- version = self._extract_value(
- future.version, opt_version, self.version
- )
+ version = self._extract_value(future.version, opt_version, self.version)
strict_slashes = self._extract_value(
future.strict_slashes, opt_strict_slashes, self.strict_slashes
)
@@ -411,22 +403,16 @@ class Blueprint(BaseSanic):
continue
registered.add(apply_route)
- route = app._apply_route(
- apply_route, overwrite=self._allow_route_overwrite
- )
+ route = app._apply_route(apply_route, overwrite=self._allow_route_overwrite)
# If it is a copied BP, then make sure all of the names of routes
# matchup with the new BP name
if self.copied_from:
for r in route:
r.name = r.name.replace(self.copied_from, self.name)
- r.extra.ident = r.extra.ident.replace(
- self.copied_from, self.name
- )
+ r.extra.ident = r.extra.ident.replace(self.copied_from, self.name)
- operation = (
- routes.extend if isinstance(route, list) else routes.append
- )
+ operation = routes.extend if isinstance(route, list) else routes.append
operation(route)
# Static Files
@@ -504,9 +490,7 @@ class Blueprint(BaseSanic):
condition = kwargs.pop("condition", {})
condition.update({"__blueprint__": self.name})
kwargs["condition"] = condition
- await asyncio.gather(
- *[app.dispatch(*args, **kwargs) for app in self.apps]
- )
+ await asyncio.gather(*[app.dispatch(*args, **kwargs) for app in self.apps])
def event(self, event: str, timeout: int | float | None = None):
"""Wait for a signal event to be dispatched.
@@ -747,9 +731,7 @@ class BlueprintGroup(bpg_base):
def __getitem__(self, item: slice) -> MutableSequence[Blueprint]:
...
- def __getitem__(
- self, item: int | slice
- ) -> Blueprint | MutableSequence[Blueprint]:
+ def __getitem__(self, item: int | slice) -> Blueprint | MutableSequence[Blueprint]:
"""Get the Blueprint object at the specified index.
This method returns a blueprint inside the group specified by
diff --git a/sanic/cli/app.py b/sanic/cli/app.py
index 9c41cd78..306f76c3 100644
--- a/sanic/cli/app.py
+++ b/sanic/cli/app.py
@@ -56,9 +56,7 @@ Or, a path to a directory to run as a simple HTTP server:
)
self.parser._positionals.title = "Required\n========\n Positional"
self.parser._optionals.title = "Optional\n========\n General"
- self.main_process = (
- os.environ.get("SANIC_RELOADER_PROCESS", "") != "true"
- )
+ self.main_process = os.environ.get("SANIC_RELOADER_PROCESS", "") != "true"
self.args: Namespace = Namespace()
self.groups: List[Group] = []
self.inspecting = False
@@ -126,11 +124,7 @@ Or, a path to a directory to run as a simple HTTP server:
key = key.lstrip("-")
except ValueError:
value = False if arg.startswith("--no-") else True
- key = (
- arg.replace("--no-", "")
- .lstrip("-")
- .replace("-", "_")
- )
+ key = arg.replace("--no-", "").lstrip("-").replace("-", "_")
setattr(self.args, key, value)
kwargs = {**self.args.__dict__}
@@ -180,8 +174,7 @@ Or, a path to a directory to run as a simple HTTP server:
" Example Module: project.sanic_server.app"
)
error_logger.error(
- "\nThe error below might have caused the above one:\n"
- f"{e.msg}"
+ "\nThe error below might have caused the above one:\n" f"{e.msg}"
)
sys.exit(1)
else:
diff --git a/sanic/cli/arguments.py b/sanic/cli/arguments.py
index 114c9b76..61fbf23f 100644
--- a/sanic/cli/arguments.py
+++ b/sanic/cli/arguments.py
@@ -244,10 +244,7 @@ class DevelopmentGroup(Group):
"--auto-reload",
dest="auto_reload",
action="store_true",
- help=(
- "Watch source directory for file changes and reload on "
- "changes"
- ),
+ help=("Watch source directory for file changes and reload on " "changes"),
)
self.container.add_argument(
"-R",
diff --git a/sanic/cli/inspector_client.py b/sanic/cli/inspector_client.py
index 7b57cf7e..5249627e 100644
--- a/sanic/cli/inspector_client.py
+++ b/sanic/cli/inspector_client.py
@@ -45,11 +45,7 @@ class InspectorClient:
return
result = self.request(action, **kwargs).get("result")
if result:
- out = (
- dumps(result)
- if isinstance(result, (list, dict))
- else str(result)
- )
+ out = dumps(result) if isinstance(result, (list, dict)) else str(result)
sys.stdout.write(out + "\n")
def info(self) -> None:
diff --git a/sanic/compat.py b/sanic/compat.py
index 171b4b30..e0271747 100644
--- a/sanic/compat.py
+++ b/sanic/compat.py
@@ -12,9 +12,7 @@ from multidict import CIMultiDict # type: ignore
from sanic.helpers import Default
from sanic.log import error_logger
-StartMethod = Union[
- Default, Literal["fork"], Literal["forkserver"], Literal["spawn"]
-]
+StartMethod = Union[Default, Literal["fork"], Literal["forkserver"], Literal["spawn"]]
OS_IS_WINDOWS = os.name == "nt"
PYPY_IMPLEMENTATION = platform.python_implementation() == "PyPy"
diff --git a/sanic/config.py b/sanic/config.py
index 7a8c0db5..f7facff4 100644
--- a/sanic/config.py
+++ b/sanic/config.py
@@ -227,9 +227,7 @@ class Config(dict, metaclass=DescriptorMeta):
if attr == "LOCAL_CERT_CREATOR" and not isinstance(
self.LOCAL_CERT_CREATOR, LocalCertCreator
):
- self.LOCAL_CERT_CREATOR = LocalCertCreator[
- self.LOCAL_CERT_CREATOR.upper()
- ]
+ self.LOCAL_CERT_CREATOR = LocalCertCreator[self.LOCAL_CERT_CREATOR.upper()]
elif attr == "DEPRECATION_FILTER":
self._configure_warnings()
diff --git a/sanic/cookies/request.py b/sanic/cookies/request.py
index 3cbf430c..90dbd0bb 100644
--- a/sanic/cookies/request.py
+++ b/sanic/cookies/request.py
@@ -147,9 +147,7 @@ class CookieRequestParameters(RequestParameters):
except KeyError:
return super().get(name, default)
- def getlist(
- self, name: str, default: Optional[Any] = None
- ) -> Optional[Any]:
+ def getlist(self, name: str, default: Optional[Any] = None) -> Optional[Any]:
try:
return self._get_prefixed_cookie(name)
except KeyError:
diff --git a/sanic/cookies/response.py b/sanic/cookies/response.py
index 401986ff..95f65dfb 100644
--- a/sanic/cookies/response.py
+++ b/sanic/cookies/response.py
@@ -496,9 +496,7 @@ class Cookie(dict):
"Cannot set host_prefix on a cookie without secure=True"
)
if path != "/":
- raise ServerError(
- "Cannot set host_prefix on a cookie unless path='/'"
- )
+ raise ServerError("Cannot set host_prefix on a cookie unless path='/'")
if domain:
raise ServerError(
"Cannot set host_prefix on a cookie with a defined domain"
@@ -600,9 +598,7 @@ class Cookie(dict):
"""Format as a Set-Cookie header value."""
output = [f"{self.key}={_quote(self.value)}"]
key_index = list(self._keys)
- for key, value in sorted(
- self.items(), key=lambda x: key_index.index(x[0])
- ):
+ for key, value in sorted(self.items(), key=lambda x: key_index.index(x[0])):
if value is not None and value is not False:
if key == "max-age":
try:
diff --git a/sanic/errorpages.py b/sanic/errorpages.py
index 2a89a8fb..93d45f03 100644
--- a/sanic/errorpages.py
+++ b/sanic/errorpages.py
@@ -190,8 +190,7 @@ class TextRenderer(BaseRenderer):
lines += [
f"{self.exception.__class__.__name__}: {self.exception} while "
f"handling path {self.request.path}",
- f"Traceback of {self.request.app.name} "
- "(most recent call last):\n",
+ f"Traceback of {self.request.app.name} " "(most recent call last):\n",
]
while exc_value:
@@ -388,9 +387,7 @@ def guess_mime(req: Request, fallback: str) -> str:
if m:
format = CONFIG_BY_MIME[m.mime]
source = formats[format]
- logger.debug(
- f"The client accepts {m.header}, using '{format}' from {source}"
- )
+ logger.debug(f"The client accepts {m.header}, using '{format}' from {source}")
else:
logger.debug(f"No format found, the client accepts {req.accept!r}")
return m.mime
diff --git a/sanic/exceptions.py b/sanic/exceptions.py
index 2076d6ea..c6ec73a0 100644
--- a/sanic/exceptions.py
+++ b/sanic/exceptions.py
@@ -69,9 +69,7 @@ class SanicException(Exception):
) -> None:
self.context = context
self.extra = extra
- status_code = status_code or getattr(
- self.__class__, "status_code", None
- )
+ status_code = status_code or getattr(self.__class__, "status_code", None)
quiet = quiet or getattr(self.__class__, "quiet", None)
headers = headers or getattr(self.__class__, "headers", {})
if message is None:
diff --git a/sanic/handlers/content_range.py b/sanic/handlers/content_range.py
index 44b92713..f9dbbb6d 100644
--- a/sanic/handlers/content_range.py
+++ b/sanic/handlers/content_range.py
@@ -36,20 +36,14 @@ class ContentRangeHandler(Range):
try:
self.start = int(start_b) if start_b else None
except ValueError:
- raise RangeNotSatisfiable(
- f"'{start_b}' is invalid for Content Range", self
- )
+ raise RangeNotSatisfiable(f"'{start_b}' is invalid for Content Range", self)
try:
self.end = int(end_b) if end_b else None
except ValueError:
- raise RangeNotSatisfiable(
- f"'{end_b}' is invalid for Content Range", self
- )
+ raise RangeNotSatisfiable(f"'{end_b}' is invalid for Content Range", self)
if self.end is None:
if self.start is None:
- raise RangeNotSatisfiable(
- "Invalid for Content Range parameters", self
- )
+ raise RangeNotSatisfiable("Invalid for Content Range parameters", self)
else:
# this case represents `Content-Range: bytes 5-`
self.end = self.total - 1
@@ -59,13 +53,9 @@ class ContentRangeHandler(Range):
self.start = self.total - self.end
self.end = self.total - 1
if self.start >= self.end:
- raise RangeNotSatisfiable(
- "Invalid for Content Range parameters", self
- )
+ raise RangeNotSatisfiable("Invalid for Content Range parameters", self)
self.size = self.end - self.start + 1
- self.headers = {
- "Content-Range": f"bytes {self.start}-{self.end}/{self.total}"
- }
+ self.headers = {"Content-Range": f"bytes {self.start}-{self.end}/{self.total}"}
def __bool__(self):
return hasattr(self, "size") and self.size > 0
diff --git a/sanic/handlers/directory.py b/sanic/handlers/directory.py
index 26ee653a..8581328c 100644
--- a/sanic/handlers/directory.py
+++ b/sanic/handlers/directory.py
@@ -60,9 +60,7 @@ class DirectoryHandler:
return await file(index_file)
if self.directory_view:
- return self._index(
- self.directory / current, path, request.app.debug
- )
+ return self._index(self.directory / current, path, request.app.debug)
if self.index:
raise NotFound("File not found")
@@ -72,9 +70,7 @@ class DirectoryHandler:
def _index(self, location: Path, path: str, debug: bool):
# Remove empty path elements, append slash
if "//" in path or not path.endswith("/"):
- return redirect(
- "/" + "".join([f"{p}/" for p in path.split("/") if p])
- )
+ return redirect("/" + "".join([f"{p}/" for p in path.split("/") if p]))
# Render file browser
page = DirectoryPage(self._iter_files(location), path, debug)
@@ -83,9 +79,7 @@ class DirectoryHandler:
def _prepare_file(self, path: Path) -> dict[str, int | str]:
stat = path.stat()
modified = (
- datetime.fromtimestamp(stat.st_mtime)
- .isoformat()[:19]
- .replace("T", " ")
+ datetime.fromtimestamp(stat.st_mtime).isoformat()[:19].replace("T", " ")
)
is_dir = S_ISDIR(stat.st_mode)
icon = "📁" if is_dir else "📄"
diff --git a/sanic/handlers/error.py b/sanic/handlers/error.py
index 20240670..2aaa2900 100644
--- a/sanic/handlers/error.py
+++ b/sanic/handlers/error.py
@@ -96,9 +96,7 @@ class ErrorHandler:
exception_key = (ancestor, name)
if exception_key in self.cached_handlers:
handler = self.cached_handlers[exception_key]
- self.cached_handlers[
- (exception_class, route_name)
- ] = handler
+ self.cached_handlers[(exception_class, route_name)] = handler
return handler
if ancestor is BaseException:
@@ -196,6 +194,4 @@ class ErrorHandler:
except AttributeError: # no cov
url = "unknown"
- error_logger.exception(
- "Exception occurred while handling uri: %s", url
- )
+ error_logger.exception("Exception occurred while handling uri: %s", url)
diff --git a/sanic/headers.py b/sanic/headers.py
index a52a5907..73686214 100644
--- a/sanic/headers.py
+++ b/sanic/headers.py
@@ -19,9 +19,7 @@ _token, _quoted = r"([\w!#$%&'*+\-.^_`|~]+)", r'"([^"]*)"'
_param = re.compile(rf";\s*{_token}=(?:{_token}|{_quoted})", re.ASCII)
_ipv6 = "(?:[0-9A-Fa-f]{0,4}:){2,7}[0-9A-Fa-f]{0,4}"
_ipv6_re = re.compile(_ipv6)
-_host_re = re.compile(
- r"((?:\[" + _ipv6 + r"\])|[a-zA-Z0-9.\-]{1,253})(?::(\d{1,5}))?"
-)
+_host_re = re.compile(r"((?:\[" + _ipv6 + r"\])|[a-zA-Z0-9.\-]{1,253})(?::(\d{1,5}))?")
# RFC's quoted-pair escapes are mostly ignored by browsers. Chrome, Firefox and
# curl all have different escaping, that we try to handle as well as possible,
@@ -122,9 +120,7 @@ class MediaType:
or mt.subtype == "*"
)
# Type match
- and (
- self.type == mt.type or self.type == "*" or mt.type == "*"
- )
+ and (self.type == mt.type or self.type == "*" or mt.type == "*")
)
else None
)
@@ -312,9 +308,7 @@ def parse_accept(accept: str | None) -> AcceptList:
accept = "*/*" # No header means that all types are accepted
try:
a = [
- mt
- for mt in [MediaType._parse(mtype) for mtype in accept.split(",")]
- if mt
+ mt for mt in [MediaType._parse(mtype) for mtype in accept.split(",")] if mt
]
if not a:
raise ValueError
@@ -411,11 +405,7 @@ def parse_xforwarded(headers, config) -> Options | None:
# Combine, split and filter multiple headers' entries
forwarded_for = headers.getall(config.FORWARDED_FOR_HEADER)
proxies = [
- p
- for p in (
- p.strip() for h in forwarded_for for p in h.split(",")
- )
- if p
+ p for p in (p.strip() for h in forwarded_for for p in h.split(",")) if p
]
addr = proxies[-proxies_count]
except (KeyError, IndexError):
diff --git a/sanic/http/http1.py b/sanic/http/http1.py
index a994b0d6..0446e59e 100644
--- a/sanic/http/http1.py
+++ b/sanic/http/http1.py
@@ -361,26 +361,20 @@ class Http(Stream, metaclass=TouchUpMeta):
self.response_func = None
self.stage = Stage.IDLE
- async def http1_response_chunked(
- self, data: bytes, end_stream: bool
- ) -> None:
+ async def http1_response_chunked(self, data: bytes, end_stream: bool) -> None:
"""Format a part of response body in chunked encoding."""
# Chunked encoding
size = len(data)
if end_stream:
await self._send(
- b"%x\r\n%b\r\n0\r\n\r\n" % (size, data)
- if size
- else b"0\r\n\r\n"
+ b"%x\r\n%b\r\n0\r\n\r\n" % (size, data) if size else b"0\r\n\r\n"
)
self.response_func = None
self.stage = Stage.IDLE
elif size:
await self._send(b"%x\r\n%b\r\n" % (size, data))
- async def http1_response_normal(
- self, data: bytes, end_stream: bool
- ) -> None:
+ async def http1_response_normal(self, data: bytes, end_stream: bool) -> None:
"""Format / keep track of non-chunked response."""
bytes_left = self.response_bytes_left - len(data)
if bytes_left <= 0:
@@ -418,9 +412,7 @@ class Http(Stream, metaclass=TouchUpMeta):
exception, (ServiceUnavailable, RequestCancelled)
)
try:
- await app.handle_exception(
- self.request, exception, request_middleware
- )
+ await app.handle_exception(self.request, exception, request_middleware)
except Exception as e:
await app.handle_exception(self.request, e, False)
diff --git a/sanic/http/http3.py b/sanic/http/http3.py
index b5e60c21..c7e68df7 100644
--- a/sanic/http/http3.py
+++ b/sanic/http/http3.py
@@ -65,10 +65,7 @@ class HTTP3Transport(TransportProtocol):
return self._protocol
def get_extra_info(self, info: str, default: Any = None) -> Any:
- if (
- info in ("socket", "sockname", "peername")
- and self._protocol._transport
- ):
+ if info in ("socket", "sockname", "peername") and self._protocol._transport:
return self._protocol._transport.get_extra_info(info, default)
elif info == "network_paths":
return self._protocol._quic._network_paths
@@ -114,8 +111,7 @@ class HTTPReceiver(Receiver, Stream):
if exception:
logger.info( # no cov
- f"{Colors.BLUE}[exception]: "
- f"{Colors.RED}{exception}{Colors.END}",
+ f"{Colors.BLUE}[exception]: " f"{Colors.RED}{exception}{Colors.END}",
exc_info=True,
extra={"verbosity": 1},
)
@@ -140,17 +136,13 @@ class HTTPReceiver(Receiver, Stream):
await app.handle_exception(self.request, exception)
- def _prepare_headers(
- self, response: BaseHTTPResponse
- ) -> list[tuple[bytes, bytes]]:
+ def _prepare_headers(self, response: BaseHTTPResponse) -> list[tuple[bytes, bytes]]:
size = len(response.body) if response.body else 0
headers = response.headers
status = response.status
if not has_message_body(status) and (
- size
- or "content-length" in headers
- or "transfer-encoding" in headers
+ size or "content-length" in headers or "transfer-encoding" in headers
):
headers.pop("content-length", None)
headers.pop("transfer-encoding", None)
@@ -243,11 +235,7 @@ class HTTPReceiver(Receiver, Stream):
):
size = len(data)
if end_stream:
- data = (
- b"%x\r\n%b\r\n0\r\n\r\n" % (size, data)
- if size
- else b"0\r\n\r\n"
- )
+ data = b"%x\r\n%b\r\n0\r\n\r\n" % (size, data) if size else b"0\r\n\r\n"
elif size:
data = b"%x\r\n%b\r\n" % (size, data)
@@ -325,10 +313,7 @@ class Http3:
)
def get_or_make_receiver(self, event: H3Event) -> tuple[Receiver, bool]:
- if (
- isinstance(event, HeadersReceived)
- and event.stream_id not in self.receivers
- ):
+ if isinstance(event, HeadersReceived) and event.stream_id not in self.receivers:
request = self._make_request(event)
receiver = HTTPReceiver(self.transmit, self.protocol, request)
request.stream = receiver
@@ -351,9 +336,7 @@ class Http3:
)
)
except UnicodeDecodeError:
- raise BadRequest(
- "Header names may only contain US-ASCII characters."
- )
+ raise BadRequest("Header names may only contain US-ASCII characters.")
method = headers[":method"]
path = headers[":path"]
scheme = headers.pop(":scheme", "")
@@ -422,8 +405,6 @@ def get_config(app: Sanic, ssl: SanicSSLContext | CertSelector | SSLContext):
)
password = app.config.TLS_CERT_PASSWORD or None
- config.load_cert_chain(
- ssl.sanic["cert"], ssl.sanic["key"], password=password
- )
+ config.load_cert_chain(ssl.sanic["cert"], ssl.sanic["key"], password=password)
return config
diff --git a/sanic/http/stream.py b/sanic/http/stream.py
index 6fdbaa2e..64eb0fcd 100644
--- a/sanic/http/stream.py
+++ b/sanic/http/stream.py
@@ -20,7 +20,5 @@ class Stream:
__touchup__: tuple[str, ...] = ()
__slots__ = ("request_max_size",)
- def respond(
- self, response: BaseHTTPResponse
- ) -> BaseHTTPResponse: # no cov
+ def respond(self, response: BaseHTTPResponse) -> BaseHTTPResponse: # no cov
raise NotImplementedError("Not implemented")
diff --git a/sanic/http/tls/context.py b/sanic/http/tls/context.py
index 1dd12f59..dffb2201 100644
--- a/sanic/http/tls/context.py
+++ b/sanic/http/tls/context.py
@@ -69,13 +69,9 @@ def load_cert_dir(p: str) -> ssl.SSLContext:
keyfile = os.path.join(p, "privkey.pem")
certfile = os.path.join(p, "fullchain.pem")
if not os.access(keyfile, os.R_OK):
- raise ValueError(
- f"Certificate not found or permission denied {keyfile}"
- )
+ raise ValueError(f"Certificate not found or permission denied {keyfile}")
if not os.access(certfile, os.R_OK):
- raise ValueError(
- f"Certificate not found or permission denied {certfile}"
- )
+ raise ValueError(f"Certificate not found or permission denied {certfile}")
return CertSimple(certfile, keyfile)
@@ -87,9 +83,7 @@ def find_cert(self: CertSelector, server_name: str):
if not server_name:
if self.sanic_fallback:
return self.sanic_fallback
- raise ValueError(
- "The client provided no SNI to match for certificate."
- )
+ raise ValueError("The client provided no SNI to match for certificate.")
for ctx in self.sanic_select:
if match_hostname(ctx, server_name):
return ctx
@@ -162,9 +156,7 @@ class CertSimple(SanicSSLContext):
if "names" not in kw:
cert = ssl._ssl._test_decode_cert(certfile) # type: ignore
kw["names"] = [
- name
- for t, name in cert["subjectAltName"]
- if t in ["DNS", "IP Address"]
+ name for t, name in cert["subjectAltName"] if t in ["DNS", "IP Address"]
]
subject = {k: v for item in cert["subject"] for k, v in item}
self = create_context(certfile, keyfile, password)
@@ -201,7 +193,5 @@ class CertSelector(ssl.SSLContext):
if i == 0:
self.sanic_fallback = ctx
if not all_names:
- raise ValueError(
- "No certificates with SubjectAlternativeNames found."
- )
+ raise ValueError("No certificates with SubjectAlternativeNames found.")
logger.info(f"Certificate vhosts: {', '.join(all_names)}")
diff --git a/sanic/http/tls/creators.py b/sanic/http/tls/creators.py
index 9da4aab1..a33d0cb8 100644
--- a/sanic/http/tls/creators.py
+++ b/sanic/http/tls/creators.py
@@ -92,16 +92,8 @@ class CertCreator(ABC):
if isinstance(self.key, Default) or isinstance(self.cert, Default):
self.tmpdir = Path(mkdtemp())
- key = (
- DEFAULT_LOCAL_TLS_KEY
- if isinstance(self.key, Default)
- else self.key
- )
- cert = (
- DEFAULT_LOCAL_TLS_CERT
- if isinstance(self.cert, Default)
- else self.cert
- )
+ key = DEFAULT_LOCAL_TLS_KEY if isinstance(self.key, Default) else self.key
+ cert = DEFAULT_LOCAL_TLS_CERT if isinstance(self.cert, Default) else self.cert
self.key_path = _make_path(key, self.tmpdir)
self.cert_path = _make_path(cert, self.tmpdir)
@@ -124,9 +116,7 @@ class CertCreator(ABC):
) -> CertCreator:
creator: CertCreator | None = None
- cert_creator_options: tuple[
- tuple[type[CertCreator], LocalCertCreator], ...
- ] = (
+ cert_creator_options: tuple[tuple[type[CertCreator], LocalCertCreator], ...] = (
(MkcertCreator, LocalCertCreator.MKCERT),
(TrustmeCreator, LocalCertCreator.TRUSTME),
)
diff --git a/sanic/mixins/exceptions.py b/sanic/mixins/exceptions.py
index 0f290a98..d6e2b70a 100644
--- a/sanic/mixins/exceptions.py
+++ b/sanic/mixins/exceptions.py
@@ -79,9 +79,7 @@ class ExceptionMixin(metaclass=SanicMeta):
return decorator
- def all_exceptions(
- self, handler: Callable[..., Any]
- ) -> Callable[..., Any]:
+ def all_exceptions(self, handler: Callable[..., Any]) -> Callable[..., Any]:
"""Enables the process of creating a global exception handler as a convenience.
This following two examples are equivalent:
diff --git a/sanic/mixins/listeners.py b/sanic/mixins/listeners.py
index 6b547ca9..0894f9cb 100644
--- a/sanic/mixins/listeners.py
+++ b/sanic/mixins/listeners.py
@@ -120,16 +120,12 @@ class ListenerMixin(metaclass=SanicMeta):
if callable(listener_or_event):
if event_or_none is None:
- raise BadRequest(
- "Invalid event registration: Missing event name."
- )
+ raise BadRequest("Invalid event registration: Missing event name.")
return register_listener(listener_or_event, event_or_none)
else:
return partial(register_listener, event=listener_or_event)
- def main_process_start(
- self, listener: ListenerType[Sanic]
- ) -> ListenerType[Sanic]:
+ def main_process_start(self, listener: ListenerType[Sanic]) -> ListenerType[Sanic]:
"""Decorator for registering a listener for the main_process_start event.
This event is fired only on the main process and **NOT** on any
@@ -151,9 +147,7 @@ class ListenerMixin(metaclass=SanicMeta):
""" # noqa: E501
return self.listener(listener, "main_process_start")
- def main_process_ready(
- self, listener: ListenerType[Sanic]
- ) -> ListenerType[Sanic]:
+ def main_process_ready(self, listener: ListenerType[Sanic]) -> ListenerType[Sanic]:
"""Decorator for registering a listener for the main_process_ready event.
This event is fired only on the main process and **NOT** on any
@@ -176,9 +170,7 @@ class ListenerMixin(metaclass=SanicMeta):
""" # noqa: E501
return self.listener(listener, "main_process_ready")
- def main_process_stop(
- self, listener: ListenerType[Sanic]
- ) -> ListenerType[Sanic]:
+ def main_process_stop(self, listener: ListenerType[Sanic]) -> ListenerType[Sanic]:
"""Decorator for registering a listener for the main_process_stop event.
This event is fired only on the main process and **NOT** on any
@@ -222,9 +214,7 @@ class ListenerMixin(metaclass=SanicMeta):
""" # noqa: E501
return self.listener(listener, "reload_process_start")
- def reload_process_stop(
- self, listener: ListenerType[Sanic]
- ) -> ListenerType[Sanic]:
+ def reload_process_stop(self, listener: ListenerType[Sanic]) -> ListenerType[Sanic]:
"""Decorator for registering a listener for the reload_process_stop event.
This event is fired only on the reload process and **NOT** on any
@@ -293,9 +283,7 @@ class ListenerMixin(metaclass=SanicMeta):
""" # noqa: E501
return self.listener(listener, "after_reload_trigger")
- def before_server_start(
- self, listener: ListenerType[Sanic]
- ) -> ListenerType[Sanic]:
+ def before_server_start(self, listener: ListenerType[Sanic]) -> ListenerType[Sanic]:
"""Decorator for registering a listener for the before_server_start event.
This event is fired on all worker processes. You should typically
@@ -319,9 +307,7 @@ class ListenerMixin(metaclass=SanicMeta):
""" # noqa: E501
return self.listener(listener, "before_server_start")
- def after_server_start(
- self, listener: ListenerType[Sanic]
- ) -> ListenerType[Sanic]:
+ def after_server_start(self, listener: ListenerType[Sanic]) -> ListenerType[Sanic]:
"""Decorator for registering a listener for the after_server_start event.
This event is fired on all worker processes. You should typically
@@ -349,9 +335,7 @@ class ListenerMixin(metaclass=SanicMeta):
""" # noqa: E501
return self.listener(listener, "after_server_start")
- def before_server_stop(
- self, listener: ListenerType[Sanic]
- ) -> ListenerType[Sanic]:
+ def before_server_stop(self, listener: ListenerType[Sanic]) -> ListenerType[Sanic]:
"""Decorator for registering a listener for the before_server_stop event.
This event is fired on all worker processes. This event is fired
@@ -376,9 +360,7 @@ class ListenerMixin(metaclass=SanicMeta):
""" # noqa: E501
return self.listener(listener, "before_server_stop")
- def after_server_stop(
- self, listener: ListenerType[Sanic]
- ) -> ListenerType[Sanic]:
+ def after_server_stop(self, listener: ListenerType[Sanic]) -> ListenerType[Sanic]:
"""Decorator for registering a listener for the after_server_stop event.
This event is fired on all worker processes. This event is fired
diff --git a/sanic/mixins/middleware.py b/sanic/mixins/middleware.py
index 89179af8..8953548a 100644
--- a/sanic/mixins/middleware.py
+++ b/sanic/mixins/middleware.py
@@ -99,13 +99,9 @@ class MiddlewareMixin(metaclass=SanicMeta):
# Detect which way this was called, @middleware or @middleware('AT')
if callable(middleware_or_request):
- return register_middleware(
- middleware_or_request, attach_to=attach_to
- )
+ return register_middleware(middleware_or_request, attach_to=attach_to)
else:
- return partial(
- register_middleware, attach_to=middleware_or_request
- )
+ return partial(register_middleware, attach_to=middleware_or_request)
def on_request(self, middleware=None, *, priority=0) -> MiddlewareType:
"""Register a middleware to be called before a request is handled.
@@ -157,9 +153,7 @@ class MiddlewareMixin(metaclass=SanicMeta):
if callable(middleware):
return self.middleware(middleware, "response", priority=priority)
else:
- return partial(
- self.middleware, attach_to="response", priority=priority
- )
+ return partial(self.middleware, attach_to="response", priority=priority)
def finalize_middleware(self) -> None:
"""Finalize the middleware configuration for the Sanic application.
diff --git a/sanic/mixins/routes.py b/sanic/mixins/routes.py
index dfda51e2..f5e25f0d 100644
--- a/sanic/mixins/routes.py
+++ b/sanic/mixins/routes.py
@@ -25,9 +25,7 @@ from sanic.models.futures import FutureRoute, FutureStatic
from sanic.models.handler_types import RouteHandler
from sanic.types import HashableDict
-RouteWrapper = Callable[
- [RouteHandler], Union[RouteHandler, Tuple[Route, RouteHandler]]
-]
+RouteWrapper = Callable[[RouteHandler], Union[RouteHandler, Tuple[Route, RouteHandler]]]
class RouteMixin(BaseMixin, metaclass=SanicMeta):
@@ -814,7 +812,5 @@ class RouteMixin(BaseMixin, metaclass=SanicMeta):
}
if raw:
unexpected_arguments = ", ".join(raw.keys())
- raise TypeError(
- f"Unexpected keyword arguments: {unexpected_arguments}"
- )
+ raise TypeError(f"Unexpected keyword arguments: {unexpected_arguments}")
return HashableDict(ctx_kwargs)
diff --git a/sanic/mixins/signals.py b/sanic/mixins/signals.py
index 16ffd2fe..6f1247cf 100644
--- a/sanic/mixins/signals.py
+++ b/sanic/mixins/signals.py
@@ -92,9 +92,7 @@ class SignalMixin(metaclass=SanicMeta):
...
handler = noop
- self.signal(event=event, condition=condition, exclusive=exclusive)(
- handler
- )
+ self.signal(event=event, condition=condition, exclusive=exclusive)(handler)
return handler
def event(self, event: str):
diff --git a/sanic/mixins/startup.py b/sanic/mixins/startup.py
index 16ce3637..7fe8b51b 100644
--- a/sanic/mixins/startup.py
+++ b/sanic/mixins/startup.py
@@ -100,8 +100,7 @@ class StartupMixin(metaclass=SanicMeta):
"""
if not self.asgi:
if self.config.USE_UVLOOP is True or (
- isinstance(self.config.USE_UVLOOP, Default)
- and not OS_IS_WINDOWS
+ isinstance(self.config.USE_UVLOOP, Default) and not OS_IS_WINDOWS
):
try_use_uvloop()
elif OS_IS_WINDOWS:
@@ -373,8 +372,7 @@ class StartupMixin(metaclass=SanicMeta):
if single_process and (fast or (workers > 1) or auto_reload):
raise RuntimeError(
- "Single process cannot be run with multiple workers "
- "or auto-reload"
+ "Single process cannot be run with multiple workers " "or auto-reload"
)
if register_sys_signals is False and not single_process:
@@ -393,9 +391,7 @@ class StartupMixin(metaclass=SanicMeta):
for directory in reload_dir:
direc = Path(directory)
if not direc.is_dir():
- logger.warning(
- f"Directory {directory} could not be located"
- )
+ logger.warning(f"Directory {directory} could not be located")
self.state.reload_dirs.add(Path(directory))
if loop is not None:
@@ -410,9 +406,7 @@ class StartupMixin(metaclass=SanicMeta):
host, port = self.get_address(host, port, version, auto_tls)
if protocol is None:
- protocol = (
- WebSocketProtocol if self.websocket_enabled else HttpProtocol
- )
+ protocol = WebSocketProtocol if self.websocket_enabled else HttpProtocol
# Set explicitly passed configuration values
for attribute, value in {
@@ -448,9 +442,7 @@ class StartupMixin(metaclass=SanicMeta):
register_sys_signals=register_sys_signals,
auto_tls=auto_tls,
)
- self.state.server_info.append(
- ApplicationServerInfo(settings=server_settings)
- )
+ self.state.server_info.append(ApplicationServerInfo(settings=server_settings))
# if self.config.USE_UVLOOP is True or (
# self.config.USE_UVLOOP is _default and not OS_IS_WINDOWS
@@ -546,9 +538,7 @@ class StartupMixin(metaclass=SanicMeta):
host, port = host, port = self.get_address(host, port)
if protocol is None:
- protocol = (
- WebSocketProtocol if self.websocket_enabled else HttpProtocol
- )
+ protocol = WebSocketProtocol if self.websocket_enabled else HttpProtocol
# Set explicitly passed configuration values
for attribute, value in {
@@ -790,10 +780,7 @@ class StartupMixin(metaclass=SanicMeta):
reload_display += ", ".join(
[
"",
- *(
- str(path.absolute())
- for path in self.state.reload_dirs
- ),
+ *(str(path.absolute()) for path in self.state.reload_dirs),
]
)
display["auto-reload"] = reload_display
@@ -832,9 +819,7 @@ class StartupMixin(metaclass=SanicMeta):
return f"http://<{location}>"
@staticmethod
- def get_server_location(
- server_settings: dict[str, Any] | None = None
- ) -> str:
+ def get_server_location(server_settings: dict[str, Any] | None = None) -> str:
"""Using the server settings, retrieve the server location.
Args:
@@ -901,9 +886,7 @@ class StartupMixin(metaclass=SanicMeta):
@classmethod
def _get_startup_method(cls) -> str:
return (
- cls.start_method
- if not isinstance(cls.start_method, Default)
- else "spawn"
+ cls.start_method if not isinstance(cls.start_method, Default) else "spawn"
)
@classmethod
@@ -984,9 +967,7 @@ class StartupMixin(metaclass=SanicMeta):
try:
primary = apps[0]
except IndexError:
- raise RuntimeError(
- "Did not find any applications."
- ) from None
+ raise RuntimeError("Did not find any applications.") from None
# This exists primarily for unit testing
if not primary.state.server_info: # no cov
@@ -1089,9 +1070,7 @@ class StartupMixin(metaclass=SanicMeta):
inspector = None
if primary.config.INSPECTOR:
display, extra = primary.get_motd_data()
- packages = [
- pkg.strip() for pkg in display["packages"].split(",")
- ]
+ packages = [pkg.strip() for pkg in display["packages"].split(",")]
module = import_module("sanic")
sanic_version = f"sanic=={module.__version__}" # type: ignore
app_info = {
@@ -1122,9 +1101,7 @@ class StartupMixin(metaclass=SanicMeta):
exit_code = 1
except BaseException:
kwargs = primary_server_info.settings
- error_logger.exception(
- "Experienced exception while trying to serve"
- )
+ error_logger.exception("Experienced exception while trying to serve")
raise
finally:
logger.info("Server Stopped")
@@ -1230,9 +1207,7 @@ class StartupMixin(metaclass=SanicMeta):
try:
worker_serve(monitor_publisher=None, **kwargs)
except BaseException:
- error_logger.exception(
- "Experienced exception while trying to serve"
- )
+ error_logger.exception("Experienced exception while trying to serve")
raise
finally:
logger.info("Server Stopped")
diff --git a/sanic/mixins/static.py b/sanic/mixins/static.py
index 88f7ab26..291399bf 100644
--- a/sanic/mixins/static.py
+++ b/sanic/mixins/static.py
@@ -205,17 +205,12 @@ class StaticHandleMixin(metaclass=SanicMeta):
)
uri = uri.rstrip("/")
uri += "/<__file_uri__:path>"
- elif static.resource_type == "file" and not path.isfile(
- file_or_directory
- ):
+ elif static.resource_type == "file" and not path.isfile(file_or_directory):
raise TypeError(
- "Resource type improperly identified as file. "
- f"'{file_or_directory}'"
+ "Resource type improperly identified as file. " f"'{file_or_directory}'"
)
elif static.resource_type != "file":
- raise ValueError(
- "The resource_type should be set to 'file' or 'dir'"
- )
+ raise ValueError("The resource_type should be set to 'file' or 'dir'")
# special prefix for static files
# if not static.name.startswith("_static_"):
@@ -278,9 +273,7 @@ class StaticHandleMixin(metaclass=SanicMeta):
response = await validate_file(request.headers, modified_since)
if response:
return response
- headers["Last-Modified"] = formatdate(
- modified_since, usegmt=True
- )
+ headers["Last-Modified"] = formatdate(modified_since, usegmt=True)
_range = None
if use_content_range:
_range = None
diff --git a/sanic/models/asgi.py b/sanic/models/asgi.py
index de2cfd3f..48133b61 100644
--- a/sanic/models/asgi.py
+++ b/sanic/models/asgi.py
@@ -47,9 +47,7 @@ class MockProtocol: # no cov
class MockTransport(TransportProtocol): # no cov
_protocol: Optional[MockProtocol]
- def __init__(
- self, scope: ASGIScope, receive: ASGIReceive, send: ASGISend
- ) -> None:
+ def __init__(self, scope: ASGIScope, receive: ASGIReceive, send: ASGISend) -> None:
self.scope = scope
self._receive = receive
self._send = send
@@ -61,9 +59,7 @@ class MockTransport(TransportProtocol): # no cov
self._protocol = MockProtocol(self, self.loop)
return self._protocol
- def get_extra_info(
- self, info: str, default=None
- ) -> Optional[Union[str, bool]]:
+ def get_extra_info(self, info: str, default=None) -> Optional[Union[str, bool]]:
if info == "peername":
return self.scope.get("client")
elif info == "sslcontext":
diff --git a/sanic/models/handler_types.py b/sanic/models/handler_types.py
index d2bb205e..b9b5bfc1 100644
--- a/sanic/models/handler_types.py
+++ b/sanic/models/handler_types.py
@@ -12,9 +12,7 @@ MiddlewareResponse = Union[
Optional[HTTPResponse], Coroutine[Any, Any, Optional[HTTPResponse]]
]
RequestMiddlewareType = Callable[[Request], MiddlewareResponse]
-ResponseMiddlewareType = Callable[
- [Request, BaseHTTPResponse], MiddlewareResponse
-]
+ResponseMiddlewareType = Callable[[Request, BaseHTTPResponse], MiddlewareResponse]
ErrorMiddlewareType = Callable[
[Request, BaseException], Optional[Coroutine[Any, Any, None]]
]
diff --git a/sanic/pages/css.py b/sanic/pages/css.py
index 9dfa5338..b74e3733 100644
--- a/sanic/pages/css.py
+++ b/sanic/pages/css.py
@@ -27,8 +27,6 @@ class CSS(ABCMeta):
Page.STYLE += attrs.get("STYLE_APPEND", "")
# Combine with all ancestor styles
Page.CSS = "".join(
- Class.STYLE
- for Class in reversed(Page.__mro__)
- if type(Class) is CSS
+ Class.STYLE for Class in reversed(Page.__mro__) if type(Class) is CSS
)
return Page
diff --git a/sanic/pages/directory_page.py b/sanic/pages/directory_page.py
index f8431926..376b5595 100644
--- a/sanic/pages/directory_page.py
+++ b/sanic/pages/directory_page.py
@@ -19,9 +19,7 @@ class DirectoryPage(BasePage): # no cov
TITLE = "Directory Viewer"
- def __init__(
- self, files: Iterable[FileInfo], url: str, debug: bool
- ) -> None:
+ def __init__(self, files: Iterable[FileInfo], url: str, debug: bool) -> None:
super().__init__(debug)
self.files = files
self.url = url
diff --git a/sanic/pages/error.py b/sanic/pages/error.py
index 33f52a9d..75b6cc89 100644
--- a/sanic/pages/error.py
+++ b/sanic/pages/error.py
@@ -37,9 +37,7 @@ class ErrorPage(BasePage):
if name.islower():
name = name.title()
self.TITLE = f"Application {name} cannot handle your request"
- self.HEADING = E("Application ").strong(name)(
- " cannot handle your request"
- )
+ self.HEADING = E("Application ").strong(name)(" cannot handle your request")
self.title = title
self.text = text
self.request = request
@@ -58,9 +56,7 @@ class ErrorPage(BasePage):
# Show context details if available on the exception
context = getattr(self.exc, "context", None)
if context:
- self._key_value_table(
- "Issue context", "exception-context", context
- )
+ self._key_value_table("Issue context", "exception-context", context)
if not debug:
with self.doc.div(id="enduser"):
@@ -72,19 +68,13 @@ class ErrorPage(BasePage):
# Show extra details if available on the exception
extra = getattr(self.exc, "extra", None)
if extra:
- self._key_value_table(
- "Issue extra data", "exception-extra", extra
- )
+ self._key_value_table("Issue extra data", "exception-extra", extra)
- self.doc.summary(
- "Details for developers (Sanic debug mode only)"
- )
+ self.doc.summary("Details for developers (Sanic debug mode only)")
if self.exc:
with self.doc.div(class_="exception-wrapper"):
self.doc.h2(f"Exception in {route_name}:")
- self.doc(
- html_traceback(self.exc, include_js_css=False)
- )
+ self.doc(html_traceback(self.exc, include_js_css=False))
self._key_value_table(
f"{self.request.method} {self.request.path}",
@@ -104,6 +94,4 @@ class ErrorPage(BasePage):
value = str(value)
except Exception:
value = E.em("Unable to display value")
- self.doc.dt.span(key, class_="nobr key").span(": ").dd(
- value
- )
+ self.doc.dt.span(key, class_="nobr key").span(": ").dd(value)
diff --git a/sanic/request/form.py b/sanic/request/form.py
index 18c97205..805f3ad9 100644
--- a/sanic/request/form.py
+++ b/sanic/request/form.py
@@ -60,9 +60,7 @@ def parse_multipart_form(body, boundary):
colon_index = form_line.index(":")
idx = colon_index + 2
form_header_field = form_line[0:colon_index].lower()
- form_header_value, form_parameters = parse_content_header(
- form_line[idx:]
- )
+ form_header_value, form_parameters = parse_content_header(form_line[idx:])
if form_header_field == "content-disposition":
field_name = form_parameters.get("name")
@@ -97,9 +95,7 @@ def parse_multipart_form(body, boundary):
else:
fields[field_name] = [value]
else:
- form_file = File(
- type=content_type, name=file_name, body=post_data
- )
+ form_file = File(type=content_type, name=file_name, body=post_data)
if field_name in files:
files[field_name].append(form_file)
else:
diff --git a/sanic/request/types.py b/sanic/request/types.py
index 67eb47b7..294a46dc 100644
--- a/sanic/request/types.py
+++ b/sanic/request/types.py
@@ -279,9 +279,7 @@ class Request(Generic[sanic_type, ctx_type]):
int: The HTTP/3 stream ID.
"""
if self.protocol.version is not HTTP.VERSION_3:
- raise ServerError(
- "Stream ID is only a property of a HTTP/3 request"
- )
+ raise ServerError("Stream ID is only a property of a HTTP/3 request")
return self._stream_id
def reset_response(self) -> None:
@@ -296,10 +294,7 @@ class Request(Generic[sanic_type, ctx_type]):
sent.
"""
try:
- if (
- self.stream is not None
- and self.stream.stage is not Stage.HANDLER
- ):
+ if self.stream is not None and self.stream.stage is not Stage.HANDLER:
raise ServerError(
"Cannot reset response because previous response was sent."
)
@@ -622,9 +617,7 @@ class Request(Generic[sanic_type, ctx_type]):
pass
return self.parsed_credentials
- def get_form(
- self, keep_blank_values: bool = False
- ) -> RequestParameters | None:
+ def get_form(self, keep_blank_values: bool = False) -> RequestParameters | None:
"""Method to extract and parse the form data from a request.
Args:
@@ -635,9 +628,7 @@ class Request(Generic[sanic_type, ctx_type]):
""" # noqa: E501
self.parsed_form = RequestParameters()
self.parsed_files = RequestParameters()
- content_type = self.headers.getone(
- "content-type", DEFAULT_HTTP_CONTENT_TYPE
- )
+ content_type = self.headers.getone("content-type", DEFAULT_HTTP_CONTENT_TYPE)
content_type, parameters = parse_content_header(content_type)
try:
if content_type == "application/x-www-form-urlencoded":
@@ -735,9 +726,7 @@ class Request(Generic[sanic_type, ctx_type]):
)
)
- return self.parsed_args[
- (keep_blank_values, strict_parsing, encoding, errors)
- ]
+ return self.parsed_args[(keep_blank_values, strict_parsing, encoding, errors)]
args = property(get_args)
"""Convenience property to access `Request.get_args` with default values.
@@ -990,9 +979,7 @@ class Request(Generic[sanic_type, ctx_type]):
server_name = self.app.config.get("SERVER_NAME")
if server_name:
return server_name.split("//", 1)[-1].split("/", 1)[0]
- return str(
- self.forwarded.get("host") or self.headers.getone("host", "")
- )
+ return str(self.forwarded.get("host") or self.headers.getone("host", ""))
@property
def server_name(self) -> str:
diff --git a/sanic/response/convenience.py b/sanic/response/convenience.py
index ccad7435..cbb68305 100644
--- a/sanic/response/convenience.py
+++ b/sanic/response/convenience.py
@@ -18,9 +18,7 @@ from sanic.models.protocol_types import HTMLProtocol, Range
from .types import HTTPResponse, JSONResponse, ResponseStream
-def empty(
- status: int = 204, headers: dict[str, str] | None = None
-) -> HTTPResponse:
+def empty(status: int = 204, headers: dict[str, str] | None = None) -> HTTPResponse:
"""Returns an empty response to the client.
Args:
@@ -85,13 +83,9 @@ def text(
TypeError: If the body is not a string.
""" # noqa: E501
if not isinstance(body, str):
- raise TypeError(
- f"Bad body type. Expected str, got {type(body).__name__})"
- )
+ raise TypeError(f"Bad body type. Expected str, got {type(body).__name__})")
- return HTTPResponse(
- body, status=status, headers=headers, content_type=content_type
- )
+ return HTTPResponse(body, status=status, headers=headers, content_type=content_type)
def raw(
@@ -178,18 +172,14 @@ async def validate_file(
float(last_modified), tz=timezone.utc
).replace(microsecond=0)
- if (
- last_modified.utcoffset() is None
- and if_modified_since.utcoffset() is not None
- ):
+ if last_modified.utcoffset() is None and if_modified_since.utcoffset() is not None:
logger.warning(
"Cannot compare tz-aware and tz-naive datetimes. To avoid "
"this conflict Sanic is converting last_modified to UTC."
)
last_modified.replace(tzinfo=timezone.utc)
elif (
- last_modified.utcoffset() is not None
- and if_modified_since.utcoffset() is None
+ last_modified.utcoffset() is not None and if_modified_since.utcoffset() is None
):
logger.warning(
"Cannot compare tz-aware and tz-naive datetimes. To avoid "
@@ -240,25 +230,17 @@ async def file(
stat = await stat_async(location)
last_modified = stat.st_mtime
- if (
- validate_when_requested
- and request_headers is not None
- and last_modified
- ):
+ if validate_when_requested and request_headers is not None and last_modified:
response = await validate_file(request_headers, last_modified)
if response:
return response
headers = headers or {}
if last_modified:
- headers.setdefault(
- "Last-Modified", formatdate(last_modified, usegmt=True)
- )
+ headers.setdefault("Last-Modified", formatdate(last_modified, usegmt=True))
if filename:
- headers.setdefault(
- "Content-Disposition", f'attachment; filename="{filename}"'
- )
+ headers.setdefault("Content-Disposition", f'attachment; filename="{filename}"')
if no_store:
cache_control = "no-store"
@@ -323,9 +305,7 @@ def redirect(
# According to RFC 7231, a relative URI is now permitted.
headers["Location"] = safe_to
- return HTTPResponse(
- status=status, headers=headers, content_type=content_type
- )
+ return HTTPResponse(status=status, headers=headers, content_type=content_type)
async def file_stream(
@@ -357,9 +337,7 @@ async def file_stream(
""" # noqa: E501
headers = headers or {}
if filename:
- headers.setdefault(
- "Content-Disposition", f'attachment; filename="{filename}"'
- )
+ headers.setdefault("Content-Disposition", f'attachment; filename="{filename}"')
filename = filename or path.split(location)[-1]
mime_type = mime_type or guess_type(filename)[0] or "text/plain"
if _range:
diff --git a/sanic/response/types.py b/sanic/response/types.py
index c96ba173..558fda6e 100644
--- a/sanic/response/types.py
+++ b/sanic/response/types.py
@@ -350,9 +350,7 @@ class JSONResponse(HTTPResponse):
@raw_body.setter
def raw_body(self, value: Any):
self._body_manually_set = False
- self._body = self._encode_body(
- self._use_dumps(value, **self._use_dumps_kwargs)
- )
+ self._body = self._encode_body(self._use_dumps(value, **self._use_dumps_kwargs))
self._raw_body = value
@property # type: ignore
@@ -484,9 +482,7 @@ class JSONResponse(HTTPResponse):
self._check_body_not_manually_set()
if not isinstance(self._raw_body, (list, dict)):
- raise SanicException(
- "Cannot pop from a non-list and non-dict object."
- )
+ raise SanicException("Cannot pop from a non-list and non-dict object.")
if isinstance(default, Default):
value = self._raw_body.pop(key)
diff --git a/sanic/router.py b/sanic/router.py
index 0f016c64..5dc330bb 100644
--- a/sanic/router.py
+++ b/sanic/router.py
@@ -40,9 +40,7 @@ class Router(BaseRouter):
raise MethodNotAllowed(
f"Method {method} not allowed for URL {path}",
method=method,
- allowed_methods=tuple(e.allowed_methods)
- if e.allowed_methods
- else None,
+ allowed_methods=tuple(e.allowed_methods) if e.allowed_methods else None,
) from None
@lru_cache(maxsize=ROUTER_CACHE_SIZE)
@@ -137,11 +135,7 @@ class Router(BaseRouter):
ident = name
if len(hosts) > 1:
- ident = (
- f"{name}_{host.replace('.', '_')}"
- if name
- else "__unnamed__"
- )
+ ident = f"{name}_{host.replace('.', '_')}" if name else "__unnamed__"
route = super().add(**params) # type: ignore
route.extra.ident = ident
diff --git a/sanic/server/protocols/http_protocol.py b/sanic/server/protocols/http_protocol.py
index f63d61dd..bef3a2fc 100644
--- a/sanic/server/protocols/http_protocol.py
+++ b/sanic/server/protocols/http_protocol.py
@@ -303,9 +303,7 @@ class Http3Protocol(HttpProtocolMixin, ConnectionProtocol): # type: ignore
if isinstance(event, ProtocolNegotiated):
self._setup_connection(transmit=self.transmit)
if event.alpn_protocol in H3_ALPN:
- self._connection = H3Connection(
- self._quic, enable_webtransport=True
- )
+ self._connection = H3Connection(self._quic, enable_webtransport=True)
elif isinstance(event, DatagramFrameReceived):
if event.data == b"quack":
self._quic.send_datagram_frame(b"quack-ack")
diff --git a/sanic/server/protocols/websocket_protocol.py b/sanic/server/protocols/websocket_protocol.py
index f137e0fa..7d23d3a0 100644
--- a/sanic/server/protocols/websocket_protocol.py
+++ b/sanic/server/protocols/websocket_protocol.py
@@ -140,8 +140,7 @@ class WebSocketProtocol(HttpProtocol):
)
loop = (
request.transport.loop
- if hasattr(request, "transport")
- and hasattr(request.transport, "loop")
+ if hasattr(request, "transport") and hasattr(request.transport, "loop")
else None
)
await self.websocket.connection_made(self, loop=loop)
diff --git a/sanic/server/runners.py b/sanic/server/runners.py
index fc361d8f..3346b350 100644
--- a/sanic/server/runners.py
+++ b/sanic/server/runners.py
@@ -167,9 +167,7 @@ def _setup_system_signals(
ctrlc_workaround_for_windows(app)
else:
for _signal in [SIGTERM] if run_multiple else [SIGINT, SIGTERM]:
- loop.add_signal_handler(
- _signal, partial(app.stop, terminate=False)
- )
+ loop.add_signal_handler(_signal, partial(app.stop, terminate=False))
def _run_server_forever(loop, before_stop, after_stop, cleanup, unix):
@@ -223,9 +221,7 @@ def _serve_http_1(
unix=unix,
**protocol_kwargs,
)
- asyncio_server_kwargs = (
- asyncio_server_kwargs if asyncio_server_kwargs else {}
- )
+ asyncio_server_kwargs = asyncio_server_kwargs if asyncio_server_kwargs else {}
if OS_IS_WINDOWS and sock:
pid = os.getpid()
sock = sock.share(pid)
@@ -314,9 +310,7 @@ def _serve_http_3(
run_multiple: bool = False,
):
if not HTTP3_AVAILABLE:
- raise ServerError(
- "Cannot run HTTP/3 server without aioquic installed. "
- )
+ raise ServerError("Cannot run HTTP/3 server without aioquic installed. ")
protocol = partial(Http3Protocol, app=app)
ticket_store = SessionTicketStore()
ssl_context = get_ssl_context(app, ssl)
@@ -339,9 +333,7 @@ def _serve_http_3(
# TODO: Create connection cleanup and graceful shutdown
cleanup = None
- _run_server_forever(
- loop, server.before_stop, server.after_stop, cleanup, None
- )
+ _run_server_forever(loop, server.before_stop, server.after_stop, cleanup, None)
def _build_protocol_kwargs(
diff --git a/sanic/server/socket.py b/sanic/server/socket.py
index 2a77a1c6..6b006ad0 100644
--- a/sanic/server/socket.py
+++ b/sanic/server/socket.py
@@ -23,9 +23,7 @@ def bind_socket(host: str, port: int, *, backlog=100) -> socket.socket:
try: # IP address: family must be specified for IPv6 at least
ip = ip_address(host)
host = str(ip)
- sock = socket.socket(
- socket.AF_INET6 if ip.version == 6 else socket.AF_INET
- )
+ sock = socket.socket(socket.AF_INET6 if ip.version == 6 else socket.AF_INET)
except ValueError: # Hostname, may become AF_INET or AF_INET6
sock = socket.socket()
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
@@ -92,9 +90,7 @@ def remove_unix_socket(path: str | None) -> None:
pass
-def configure_socket(
- server_settings: dict[str, Any]
-) -> socket.SocketType | None:
+def configure_socket(server_settings: dict[str, Any]) -> socket.SocketType | None:
# Create a listening socket or use the one in settings
if server_settings.get("version") is HTTP.VERSION_3:
return None
diff --git a/sanic/server/websockets/frame.py b/sanic/server/websockets/frame.py
index 0b8aa0fa..40dfbe4b 100644
--- a/sanic/server/websockets/frame.py
+++ b/sanic/server/websockets/frame.py
@@ -152,8 +152,7 @@ class WebsocketFrameAssembler:
# and get_in_progress check, this exception is here
# as a failsafe
raise ServerError(
- "Websocket get() found a message when "
- "state was already fetched."
+ "Websocket get() found a message when " "state was already fetched."
)
self.message_fetched.set()
self.chunks = []
diff --git a/sanic/server/websockets/impl.py b/sanic/server/websockets/impl.py
index c0eeb80f..d36c2972 100644
--- a/sanic/server/websockets/impl.py
+++ b/sanic/server/websockets/impl.py
@@ -152,12 +152,8 @@ class WebsocketImplProtocol:
self.data_finished_fut = asyncio.shield(self.loop.create_future())
if self.ping_interval:
- self.keepalive_ping_task = asyncio.create_task(
- self.keepalive_ping()
- )
- self.auto_closer_task = asyncio.create_task(
- self.auto_close_connection()
- )
+ self.keepalive_ping_task = asyncio.create_task(self.keepalive_ping())
+ self.auto_closer_task = asyncio.create_task(self.auto_close_connection())
async def wait_for_connection_lost(self, timeout=None) -> bool:
"""
@@ -246,9 +242,7 @@ class WebsocketImplProtocol:
try:
await asyncio.wait_for(ping_waiter, self.ping_timeout)
except asyncio.TimeoutError:
- error_logger.warning(
- "Websocket timed out waiting for pong"
- )
+ error_logger.warning("Websocket timed out waiting for pong")
self.fail_connection(1011)
break
except asyncio.CancelledError:
@@ -278,9 +272,7 @@ class WebsocketImplProtocol:
self.keepalive_ping_task = None
if self.loop and self.io_proto and self.io_proto.transport:
self.io_proto.transport.close()
- self.loop.call_later(
- self.close_timeout, self.io_proto.transport.abort
- )
+ self.loop.call_later(self.close_timeout, self.io_proto.transport.abort)
# We were never open, or already closed
return True
@@ -318,9 +310,7 @@ class WebsocketImplProtocol:
try:
data_to_send = self.ws_proto.data_to_send()
while (
- len(data_to_send)
- and self.io_proto
- and self.io_proto.transport
+ len(data_to_send) and self.io_proto and self.io_proto.transport
):
frame_data = data_to_send.pop(0)
self.io_proto.transport.write(frame_data)
@@ -356,11 +346,7 @@ class WebsocketImplProtocol:
self.ws_proto.send_close(code, reason)
data_to_send.extend(self.ws_proto.data_to_send())
try:
- while (
- len(data_to_send)
- and self.io_proto
- and self.io_proto.transport
- ):
+ while len(data_to_send) and self.io_proto and self.io_proto.transport:
frame_data = data_to_send.pop(0)
self.io_proto.transport.write(frame_data)
except Exception:
@@ -392,15 +378,11 @@ class WebsocketImplProtocol:
if self.data_finished_fut:
try:
await self.data_finished_fut
- logger.debug(
- "Websocket task finished. Closing the connection."
- )
+ logger.debug("Websocket task finished. Closing the connection.")
except asyncio.CancelledError:
# Cancelled error is called when data phase is cancelled
# if an error occurred or the client closed the connection
- logger.debug(
- "Websocket handler cancelled. Closing the connection."
- )
+ logger.debug("Websocket handler cancelled. Closing the connection.")
# Cancel the keepalive ping task.
if self.keepalive_ping_task:
@@ -426,10 +408,7 @@ class WebsocketImplProtocol:
if (not self.io_proto) or (not self.io_proto.transport):
# we were never open, or done. Can't do any finalization.
return
- elif (
- self.connection_lost_waiter
- and self.connection_lost_waiter.done()
- ):
+ elif self.connection_lost_waiter and self.connection_lost_waiter.done():
# connection confirmed closed already, proceed to abort waiter
...
elif self.io_proto.transport.is_closing():
@@ -447,9 +426,7 @@ class WebsocketImplProtocol:
if self.io_proto and self.io_proto.transport:
self.io_proto.transport.abort()
else:
- if await self.wait_for_connection_lost(
- timeout=self.close_timeout
- ):
+ if await self.wait_for_connection_lost(timeout=self.close_timeout):
# Connection aborted before the timeout expired.
return
error_logger.warning(
@@ -731,8 +708,7 @@ class WebsocketImplProtocol:
async with self.conn_mutex:
if self.ws_proto.state in (CLOSED, CLOSING):
raise WebsocketClosed(
- "Cannot send a ping when the websocket interface "
- "is closed."
+ "Cannot send a ping when the websocket interface " "is closed."
)
if (not self.io_proto) or (not self.io_proto.loop):
raise ServerError(
@@ -747,9 +723,7 @@ class WebsocketImplProtocol:
# Protect against duplicates if a payload is explicitly set.
if data in self.pings:
- raise ValueError(
- "already waiting for a pong with the same data"
- )
+ raise ValueError("already waiting for a pong with the same data")
# Generate a unique random payload otherwise.
while data is None or data in self.pings:
@@ -842,9 +816,7 @@ class WebsocketImplProtocol:
self.ws_proto.receive_eof()
data_to_send = self.ws_proto.data_to_send()
events_to_process = self.ws_proto.events_received()
- asyncio.create_task(
- self.async_eof_received(data_to_send, events_to_process)
- )
+ asyncio.create_task(self.async_eof_received(data_to_send, events_to_process))
return False
def connection_lost(self, exc):
diff --git a/sanic/signals.py b/sanic/signals.py
index 9fea88cf..999954dc 100644
--- a/sanic/signals.py
+++ b/sanic/signals.py
@@ -303,11 +303,7 @@ class SignalRouter(BaseRouter):
def _build_event_parts(self, event: str) -> tuple[str, str, str]:
parts = path_to_parts(event, self.delimiter)
- if (
- len(parts) != 3
- or parts[0].startswith("<")
- or parts[1].startswith("<")
- ):
+ if len(parts) != 3 or parts[0].startswith("<") or parts[1].startswith("<"):
raise InvalidSignal("Invalid signal event: %s" % event)
if (
@@ -315,9 +311,7 @@ class SignalRouter(BaseRouter):
and event not in RESERVED_NAMESPACES[parts[0]]
and not (parts[2].startswith("<") and parts[2].endswith(">"))
):
- raise InvalidSignal(
- "Cannot declare reserved signal event: %s" % event
- )
+ raise InvalidSignal("Cannot declare reserved signal event: %s" % event)
return parts
def _clean_trigger(self, trigger: str) -> str:
diff --git a/sanic/simple.py b/sanic/simple.py
index 523f11a1..364104c5 100644
--- a/sanic/simple.py
+++ b/sanic/simple.py
@@ -11,8 +11,6 @@ def create_simple_server(directory: Path):
)
app = Sanic("SimpleServer")
- app.static(
- "/", directory, name="main", directory_view=True, index="index.html"
- )
+ app.static("/", directory, name="main", directory_view=True, index="index.html")
return app
diff --git a/sanic/touchup/schemes/altsvc.py b/sanic/touchup/schemes/altsvc.py
index 8fce4c35..5ea2c400 100644
--- a/sanic/touchup/schemes/altsvc.py
+++ b/sanic/touchup/schemes/altsvc.py
@@ -22,9 +22,7 @@ class RemoveAltSvc(NodeTransformer):
def __init__(self, app: Sanic, verbosity: int = 0) -> None:
self._app = app
self._verbosity = verbosity
- self._versions = {
- info.settings["version"] for info in app.state.server_info
- }
+ self._versions = {info.settings["version"] for info in app.state.server_info}
def visit_Assign(self, node: Assign) -> Any:
if any(self._matches(target) for target in node.targets):
diff --git a/sanic/touchup/schemes/ode.py b/sanic/touchup/schemes/ode.py
index ae51df72..15ef82e4 100644
--- a/sanic/touchup/schemes/ode.py
+++ b/sanic/touchup/schemes/ode.py
@@ -14,9 +14,7 @@ class OptionalDispatchEvent(BaseScheme):
super().__init__(app)
self._sync_events()
- self._registered_events = [
- signal.name for signal in app.signal_router.routes
- ]
+ self._registered_events = [signal.name for signal in app.signal_router.routes]
def visitors(self) -> List[NodeTransformer]:
return [RemoveDispatch(self._registered_events)]
@@ -26,9 +24,7 @@ class OptionalDispatchEvent(BaseScheme):
app_events = {}
for app in self.app.__class__._app_registry.values():
if app.state.server_info:
- app_events[app] = {
- signal.name for signal in app.signal_router.routes
- }
+ app_events[app] = {signal.name for signal in app.signal_router.routes}
all_events.update(app_events[app])
for app, events in app_events.items():
diff --git a/sanic/types/shared_ctx.py b/sanic/types/shared_ctx.py
index bf95ee65..77cd02a4 100644
--- a/sanic/types/shared_ctx.py
+++ b/sanic/types/shared_ctx.py
@@ -14,9 +14,7 @@ class SharedContext(SimpleNamespace):
def __setattr__(self, name: str, value: Any) -> None:
if self.is_locked:
- raise RuntimeError(
- f"Cannot set {name} on locked SharedContext object"
- )
+ raise RuntimeError(f"Cannot set {name} on locked SharedContext object")
if not os.environ.get("SANIC_WORKER_NAME"):
to_check: Iterable[Any]
if not isinstance(value, (tuple, frozenset)):
@@ -35,8 +33,7 @@ class SharedContext(SimpleNamespace):
except AttributeError:
module = ""
if not any(
- module.startswith(prefix)
- for prefix in ("multiprocessing", "ctypes")
+ module.startswith(prefix) for prefix in ("multiprocessing", "ctypes")
):
error_logger.warning(
f"{Colors.YELLOW}Unsafe object {Colors.PURPLE}{name} "
diff --git a/sanic/utils.py b/sanic/utils.py
index 0ec9e5d2..4917fc92 100644
--- a/sanic/utils.py
+++ b/sanic/utils.py
@@ -80,9 +80,7 @@ def load_module_from_file_location(
env_vars_in_location = set(re_findall(r"\${(.+?)}", location))
# B) Check these variables exists in environment.
- not_defined_env_vars = env_vars_in_location.difference(
- os_environ.keys()
- )
+ not_defined_env_vars = env_vars_in_location.difference(os_environ.keys())
if not_defined_env_vars:
raise LoadFileException(
"The following environment variables are not set: "
@@ -91,18 +89,14 @@ def load_module_from_file_location(
# C) Substitute them in location.
for env_var in env_vars_in_location:
- location = location.replace(
- "${" + env_var + "}", os_environ[env_var]
- )
+ location = location.replace("${" + env_var + "}", os_environ[env_var])
location = str(location)
if ".py" in location:
name = location.split("/")[-1].split(".")[
0
] # get just the file name without path and .py extension
- _mod_spec = spec_from_file_location(
- name, location, *args, **kwargs
- )
+ _mod_spec = spec_from_file_location(name, location, *args, **kwargs)
assert _mod_spec is not None # type assertion for mypy
module = module_from_spec(_mod_spec)
_mod_spec.loader.exec_module(module) # type: ignore
diff --git a/sanic/worker/manager.py b/sanic/worker/manager.py
index ff85fd81..47142f30 100644
--- a/sanic/worker/manager.py
+++ b/sanic/worker/manager.py
@@ -99,9 +99,7 @@ class WorkerManager:
Worker: The Worker instance
""" # noqa: E501
container = self.transient if transient else self.durable
- worker = Worker(
- ident, func, kwargs, self.context, self.worker_state, workers
- )
+ worker = Worker(ident, func, kwargs, self.context, self.worker_state, workers)
container[worker.ident] = worker
return worker
@@ -204,9 +202,7 @@ class WorkerManager:
change = num_worker - self.num_server
if change == 0:
- logger.info(
- f"No change needed. There are already {num_worker} workers."
- )
+ logger.info(f"No change needed. There are already {num_worker} workers.")
return
logger.info(f"Scaling from {self.num_server} to {num_worker} workers")
@@ -237,9 +233,7 @@ class WorkerManager:
try:
if self.monitor_subscriber.poll(0.1):
message = self.monitor_subscriber.recv()
- logger.debug(
- f"Monitor message: {message}", extra={"verbosity": 2}
- )
+ logger.debug(f"Monitor message: {message}", extra={"verbosity": 2})
if not message:
break
elif message == "__TERMINATE__":
@@ -258,9 +252,7 @@ class WorkerManager:
reloaded_files = (
split_message[1] if len(split_message) > 1 else None
)
- process_names = [
- name.strip() for name in processes.split(",")
- ]
+ process_names = [name.strip() for name in processes.split(",")]
if "__ALL_PROCESSES__" in process_names:
process_names = None
order = (
diff --git a/sanic/worker/multiplexer.py b/sanic/worker/multiplexer.py
index b877ccc1..c52a8d3d 100644
--- a/sanic/worker/multiplexer.py
+++ b/sanic/worker/multiplexer.py
@@ -54,8 +54,7 @@ class WorkerMultiplexer:
"""
if name and all_workers:
raise ValueError(
- "Ambiguous restart with both a named process and"
- " all_workers=True"
+ "Ambiguous restart with both a named process and" " all_workers=True"
)
if not name:
name = "__ALL_PROCESSES__:" if all_workers else self.name
diff --git a/sanic/worker/process.py b/sanic/worker/process.py
index 9bf0df42..2de9da96 100644
--- a/sanic/worker/process.py
+++ b/sanic/worker/process.py
@@ -29,9 +29,7 @@ class WorkerProcess:
self.kwargs = kwargs
self.worker_state = worker_state
if self.name not in self.worker_state:
- self.worker_state[self.name] = {
- "server": self.SERVER_LABEL in self.name
- }
+ self.worker_state[self.name] = {"server": self.SERVER_LABEL in self.name}
self.spawn()
def set_state(self, state: ProcessState, force=False):
@@ -94,9 +92,7 @@ class WorkerProcess:
self._terminate_now()
else:
self._old_process = self._current_process
- self.kwargs.update(
- {"config": {k.upper(): v for k, v in kwargs.items()}}
- )
+ self.kwargs.update({"config": {k.upper(): v for k, v in kwargs.items()}})
try:
self.spawn()
self.start()
diff --git a/sanic/worker/serve.py b/sanic/worker/serve.py
index d808c95b..0844f36b 100644
--- a/sanic/worker/serve.py
+++ b/sanic/worker/serve.py
@@ -27,9 +27,7 @@ def worker_serve(
app_loader: AppLoader,
worker_state: Optional[Dict[str, Any]] = None,
server_info: Optional[Dict[str, List[ApplicationServerInfo]]] = None,
- ssl: Optional[
- Union[SSLContext, Dict[str, Union[str, os.PathLike]]]
- ] = None,
+ ssl: Optional[Union[SSLContext, Dict[str, Union[str, os.PathLike]]]] = None,
sock: Optional[socket.socket] = None,
unix: Optional[str] = None,
reuse_port: bool = False,
@@ -86,9 +84,7 @@ def worker_serve(
# Hydrate apps with any passed server info
if monitor_publisher is None:
- raise RuntimeError(
- "No restart publisher found in worker process"
- )
+ raise RuntimeError("No restart publisher found in worker process")
if worker_state is None:
raise RuntimeError("No worker state found in worker process")
@@ -96,9 +92,7 @@ def worker_serve(
apps = list(Sanic._app_registry.values())
app.before_server_start(partial(app._start_servers, apps=apps))
for a in apps:
- a.multiplexer = WorkerMultiplexer(
- monitor_publisher, worker_state
- )
+ a.multiplexer = WorkerMultiplexer(monitor_publisher, worker_state)
if app.debug:
loop.set_debug(app.debug)
diff --git a/sanic/worker/state.py b/sanic/worker/state.py
index 07103a5d..ae14ead8 100644
--- a/sanic/worker/state.py
+++ b/sanic/worker/state.py
@@ -62,9 +62,7 @@ class WorkerState(Mapping):
def update(self, mapping: MappingType[str, Any]) -> None:
if any(k in self.RESTRICTED for k in mapping.keys()):
- self._write_error(
- [k for k in mapping.keys() if k in self.RESTRICTED]
- )
+ self._write_error([k for k in mapping.keys() if k in self.RESTRICTED])
self._state[self._name] = {
**self._state[self._name],
**mapping,
diff --git a/scripts/changelog.py b/scripts/changelog.py
index 97df43ba..88059d60 100755
--- a/scripts/changelog.py
+++ b/scripts/changelog.py
@@ -22,9 +22,7 @@ if __name__ == "__main__":
help="Render the news fragments, don't write to files, "
"don't check versions.",
)
- @click.option(
- "--dir", "directory", default=path.dirname(path.abspath(__file__))
- )
+ @click.option("--dir", "directory", default=path.dirname(path.abspath(__file__)))
@click.option("--name", "project_name", default=None)
@click.option(
"--version",
diff --git a/scripts/release.py b/scripts/release.py
index 0d920bdb..9664c73a 100755
--- a/scripts/release.py
+++ b/scripts/release.py
@@ -25,8 +25,7 @@ GIT_COMMANDS = {
],
"push_tag": ["git push origin {new_version}"],
"get_change_log": [
- 'git log --no-merges --pretty=format:"%h::: %cn::: %s" '
- "{current_version}.."
+ 'git log --no-merges --pretty=format:"%h::: %cn::: %s" ' "{current_version}.."
],
}
@@ -72,9 +71,7 @@ class Directory:
def _run_shell_command(command: list):
try:
- process = Popen(
- command, stderr=PIPE, stdout=PIPE, stdin=PIPE, shell=True
- )
+ process = Popen(command, stderr=PIPE, stdout=PIPE, stdin=PIPE, shell=True)
output, error = process.communicate()
return_code = process.returncode
return output.decode("utf-8"), error, return_code
@@ -143,9 +140,9 @@ def _update_release_version_for_sanic(
current_version_line = config_parser.get(
"version", "current_version_pattern"
).format(current_version=current_version)
- new_version_line = config_parser.get(
- "version", "new_version_pattern"
- ).format(new_version=new_version)
+ new_version_line = config_parser.get("version", "new_version_pattern").format(
+ new_version=new_version
+ )
for version_file in version_files.split(","):
with open(version_file) as init_file:
diff --git a/setup.py b/setup.py
index 7b91d284..5a8608c5 100644
--- a/setup.py
+++ b/setup.py
@@ -59,9 +59,7 @@ def str_to_bool(val: str) -> bool:
with open_local(["sanic", "__version__.py"], encoding="latin1") as fp:
try:
- version = re.findall(
- r"^__version__ = \"([^']+)\"\r?$", fp.read(), re.M
- )[0]
+ version = re.findall(r"^__version__ = \"([^']+)\"\r?$", fp.read(), re.M)[0]
except IndexError:
raise RuntimeError("Unable to determine version.")
@@ -96,9 +94,7 @@ setup_kwargs = {
"entry_points": {"console_scripts": ["sanic = sanic.__main__:main"]},
}
-env_dependency = (
- '; sys_platform != "win32" and implementation_name == "cpython"'
-)
+env_dependency = '; sys_platform != "win32" and implementation_name == "cpython"'
ujson = "ujson>=1.35" + env_dependency
uvloop = "uvloop>=0.15.0" + env_dependency
types_ujson = "types-ujson" + env_dependency
diff --git a/tests/benchmark/test_route_resolution_benchmark.py b/tests/benchmark/test_route_resolution_benchmark.py
index 8405f4a0..f4bbd67b 100644
--- a/tests/benchmark/test_route_resolution_benchmark.py
+++ b/tests/benchmark/test_route_resolution_benchmark.py
@@ -16,9 +16,7 @@ class TestSanicRouteResolution:
async def test_resolve_route_no_arg_string_path(
self, sanic_router, route_generator, benchmark
):
- simple_routes = route_generator.generate_random_direct_route(
- max_route_depth=4
- )
+ simple_routes = route_generator.generate_random_direct_route(max_route_depth=4)
router, simple_routes = sanic_router(route_details=simple_routes)
route_to_call = choice(simple_routes)
request = Request(
@@ -52,9 +50,7 @@ class TestSanicRouteResolution:
)
router, typed_routes = sanic_router(route_details=typed_routes)
route_to_call = choice(typed_routes)
- url = route_generator.generate_url_for_template(
- template=route_to_call[-1]
- )
+ url = route_generator.generate_url_for_template(template=route_to_call[-1])
print(f"{route_to_call[-1]} -> {url}")
request = Request(
diff --git a/tests/certs/createcerts.py b/tests/certs/createcerts.py
index 34415961..f1c6a97e 100644
--- a/tests/certs/createcerts.py
+++ b/tests/certs/createcerts.py
@@ -51,9 +51,7 @@ def selfsigned(key, common_name, san):
.not_valid_before(datetime.utcnow())
.not_valid_after(datetime.utcnow() + timedelta(days=365.25 * 8))
.add_extension(
- KeyUsage(
- True, False, False, False, False, False, False, False, False
- ),
+ KeyUsage(True, False, False, False, False, False, False, False, False),
critical=True,
)
.add_extension(
diff --git a/tests/client.py b/tests/client.py
index 6a9f3e6e..e73da412 100644
--- a/tests/client.py
+++ b/tests/client.py
@@ -13,9 +13,7 @@ class RawClient:
self.port = port
async def connect(self):
- self.reader, self.writer = await asyncio.open_connection(
- self.host, self.port
- )
+ self.reader, self.writer = await asyncio.open_connection(self.host, self.port)
async def close(self):
self.writer.close()
@@ -39,8 +37,4 @@ class RawClient:
return await self.reader.read(nbytes)
def _clean(self, message: str) -> str:
- return (
- dedent(message)
- .lstrip("\n")
- .replace("\n", self.CRLF.decode("utf-8"))
- )
+ return dedent(message).lstrip("\n").replace("\n", self.CRLF.decode("utf-8"))
diff --git a/tests/conftest.py b/tests/conftest.py
index c6523797..1a6127a4 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -42,14 +42,10 @@ async def _handler(request):
TYPE_TO_GENERATOR_MAP = {
- "str": lambda: "".join(
- [random.choice(string.ascii_lowercase) for _ in range(4)]
- ),
+ "str": lambda: "".join([random.choice(string.ascii_lowercase) for _ in range(4)]),
"int": lambda: random.choice(range(1000000)),
"float": lambda: random.random(),
- "alpha": lambda: "".join(
- [random.choice(string.ascii_lowercase) for _ in range(4)]
- ),
+ "alpha": lambda: "".join([random.choice(string.ascii_lowercase) for _ in range(4)]),
"uuid": lambda: str(uuid.uuid1()),
}
diff --git a/tests/http3/test_http_receiver.py b/tests/http3/test_http_receiver.py
index 0bed7241..51b1e959 100644
--- a/tests/http3/test_http_receiver.py
+++ b/tests/http3/test_http_receiver.py
@@ -84,9 +84,7 @@ async def test_http_receiver_run_request(app: Sanic, http_request: Request):
app.__class__ = mock_handle
receiver = generate_http_receiver(app, http_request)
- receiver.protocol.quic_event_received(
- ProtocolNegotiated(alpn_protocol="h3")
- )
+ receiver.protocol.quic_event_received(ProtocolNegotiated(alpn_protocol="h3"))
await receiver.run()
handler.assert_awaited_once_with(receiver.request)
@@ -99,9 +97,7 @@ async def test_http_receiver_run_exception(app: Sanic, http_request: Request):
app.__class__ = mock_handle
receiver = generate_http_receiver(app, http_request)
- receiver.protocol.quic_event_received(
- ProtocolNegotiated(alpn_protocol="h3")
- )
+ receiver.protocol.quic_event_received(ProtocolNegotiated(alpn_protocol="h3"))
exception = Exception("Oof")
await receiver.run(exception)
handler.assert_awaited_once_with(receiver.request, exception)
@@ -139,9 +135,7 @@ def test_http_receiver_receive_body(app: Sanic, http_request: Request):
receiver.receive_body(b"..")
assert receiver.request.body == b"...."
- with pytest.raises(
- PayloadTooLarge, match="Request body exceeds the size limit"
- ):
+ with pytest.raises(PayloadTooLarge, match="Request body exceeds the size limit"):
receiver.receive_body(b"..")
@@ -176,17 +170,13 @@ async def test_send_headers(app: Sanic, http_request: Request):
send_headers_mock = Mock()
existing_send_headers = H3Connection.send_headers
receiver = generate_http_receiver(app, http_request)
- receiver.protocol.quic_event_received(
- ProtocolNegotiated(alpn_protocol="h3")
- )
+ receiver.protocol.quic_event_received(ProtocolNegotiated(alpn_protocol="h3"))
http_request._protocol = receiver.protocol
def send_headers(*args, **kwargs):
send_headers_mock(*args, **kwargs)
- return existing_send_headers(
- receiver.protocol.connection, *args, **kwargs
- )
+ return existing_send_headers(receiver.protocol.connection, *args, **kwargs)
receiver.protocol.connection.send_headers = send_headers
receiver.head_only = False
@@ -310,10 +300,7 @@ def test_request_header_encoding(app):
)
)
assert exc_info.value.status_code == 400
- assert (
- str(exc_info.value)
- == "Header names may only contain US-ASCII characters."
- )
+ assert str(exc_info.value) == "Header names may only contain US-ASCII characters."
def test_request_url_encoding(app):
diff --git a/tests/performance/sanic/http_response.py b/tests/performance/sanic/http_response.py
index 6e845e79..57046454 100644
--- a/tests/performance/sanic/http_response.py
+++ b/tests/performance/sanic/http_response.py
@@ -5,9 +5,7 @@ import timeit
from sanic.response import json
-currentdir = os.path.dirname(
- os.path.abspath(inspect.getfile(inspect.currentframe()))
-)
+currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
sys.path.insert(0, currentdir + "/../../../")
diff --git a/tests/performance/sanic/simple_server.py b/tests/performance/sanic/simple_server.py
index 976c47c1..ffb6566e 100644
--- a/tests/performance/sanic/simple_server.py
+++ b/tests/performance/sanic/simple_server.py
@@ -5,9 +5,7 @@ import sys
from sanic import Sanic
from sanic.response import json
-currentdir = os.path.dirname(
- os.path.abspath(inspect.getfile(inspect.currentframe()))
-)
+currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
sys.path.insert(0, currentdir + "/../../../")
diff --git a/tests/performance/sanic/varied_server.py b/tests/performance/sanic/varied_server.py
index fa6a8084..b5be1c39 100644
--- a/tests/performance/sanic/varied_server.py
+++ b/tests/performance/sanic/varied_server.py
@@ -6,9 +6,7 @@ from sanic import Sanic
from sanic.exceptions import ServerError
from sanic.response import json, text
-currentdir = os.path.dirname(
- os.path.abspath(inspect.getfile(inspect.currentframe()))
-)
+currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
sys.path.insert(0, currentdir + "/../../../")
diff --git a/tests/test_app.py b/tests/test_app.py
index 575428cc..5f5fa3c2 100644
--- a/tests/test_app.py
+++ b/tests/test_app.py
@@ -97,9 +97,7 @@ def test_create_server_no_startup(app: Sanic):
asyncio_server_kwargs={"start_serving": False},
)
srv = loop.run_until_complete(asyncio_srv_coro)
- message = (
- "Cannot run Sanic server without first running await server.startup()"
- )
+ message = "Cannot run Sanic server without first running await server.startup()"
with pytest.raises(SanicException, match=message):
loop.run_until_complete(srv.start_serving())
@@ -212,14 +210,8 @@ def test_app_websocket_parameters(websocket_protocol_mock, app: Sanic):
websocket_protocol_call_args = websocket_protocol_mock.call_args
ws_kwargs = websocket_protocol_call_args[1]
assert ws_kwargs["websocket_max_size"] == app.config.WEBSOCKET_MAX_SIZE
- assert (
- ws_kwargs["websocket_ping_timeout"]
- == app.config.WEBSOCKET_PING_TIMEOUT
- )
- assert (
- ws_kwargs["websocket_ping_interval"]
- == app.config.WEBSOCKET_PING_INTERVAL
- )
+ assert ws_kwargs["websocket_ping_timeout"] == app.config.WEBSOCKET_PING_TIMEOUT
+ assert ws_kwargs["websocket_ping_interval"] == app.config.WEBSOCKET_PING_INTERVAL
def test_handle_request_with_nested_exception(app: Sanic, monkeypatch):
@@ -228,9 +220,7 @@ def test_handle_request_with_nested_exception(app: Sanic, monkeypatch):
def mock_error_handler_response(*args, **kwargs):
raise Exception(err_msg)
- monkeypatch.setattr(
- app.error_handler, "response", mock_error_handler_response
- )
+ monkeypatch.setattr(app.error_handler, "response", mock_error_handler_response)
@app.get("/")
def handler(request):
@@ -247,9 +237,7 @@ def test_handle_request_with_nested_exception_debug(app: Sanic, monkeypatch):
def mock_error_handler_response(*args, **kwargs):
raise Exception(err_msg)
- monkeypatch.setattr(
- app.error_handler, "response", mock_error_handler_response
- )
+ monkeypatch.setattr(app.error_handler, "response", mock_error_handler_response)
@app.get("/")
def handler(request):
@@ -263,15 +251,11 @@ def test_handle_request_with_nested_exception_debug(app: Sanic, monkeypatch):
)
-def test_handle_request_with_nested_sanic_exception(
- app: Sanic, monkeypatch, caplog
-):
+def test_handle_request_with_nested_sanic_exception(app: Sanic, monkeypatch, caplog):
def mock_error_handler_response(*args, **kwargs):
raise SanicException("Mock SanicException")
- monkeypatch.setattr(
- app.error_handler, "response", mock_error_handler_response
- )
+ monkeypatch.setattr(app.error_handler, "response", mock_error_handler_response)
@app.get("/")
def handler(request):
@@ -326,9 +310,7 @@ def test_app_registry_wrong_type():
def test_app_registry_name_reuse():
Sanic("test")
Sanic.test_mode = False
- with pytest.raises(
- SanicException, match='Sanic app name "test" already in use.'
- ):
+ with pytest.raises(SanicException, match='Sanic app name "test" already in use.'):
Sanic("test")
Sanic.test_mode = True
Sanic("test")
@@ -361,9 +343,7 @@ def test_get_app_does_not_exist():
def test_get_app_does_not_exist_force_create():
- assert isinstance(
- Sanic.get_app("does-not-exist", force_create=True), Sanic
- )
+ assert isinstance(Sanic.get_app("does-not-exist", force_create=True), Sanic)
def test_get_app_default():
@@ -372,9 +352,7 @@ def test_get_app_default():
def test_get_app_no_default():
- with pytest.raises(
- SanicException, match="No Sanic apps have been registered."
- ):
+ with pytest.raises(SanicException, match="No Sanic apps have been registered."):
Sanic.get_app()
@@ -383,9 +361,7 @@ def test_get_app_default_ambiguous():
Sanic("test2")
with pytest.raises(
SanicException,
- match=re.escape(
- 'Multiple Sanic apps found, use Sanic.get_app("app_name")'
- ),
+ match=re.escape('Multiple Sanic apps found, use Sanic.get_app("app_name")'),
):
Sanic.get_app()
@@ -417,8 +393,7 @@ def test_bad_custom_config():
with pytest.raises(
SanicException,
match=(
- "When instantiating Sanic with config, you cannot also pass "
- "env_prefix"
+ "When instantiating Sanic with config, you cannot also pass " "env_prefix"
),
):
Sanic("test", config=1, env_prefix=1)
@@ -500,9 +475,7 @@ def test_uvloop_cannot_never_called_with_create_server(caplog, monkeypatch):
)
counter = Counter([(r[1], r[2]) for r in caplog.record_tuples])
- modified = sum(
- 1 for app in apps if not isinstance(app.config.USE_UVLOOP, Default)
- )
+ modified = sum(1 for app in apps if not isinstance(app.config.USE_UVLOOP, Default))
assert counter[(logging.WARNING, message)] == modified
@@ -559,12 +532,8 @@ def test_no_workers(app: Sanic):
{"auto_reload": True},
),
)
-def test_cannot_run_single_process_and_workers_or_auto_reload(
- app: Sanic, extra
-):
- message = (
- "Single process cannot be run with multiple workers or auto-reload"
- )
+def test_cannot_run_single_process_and_workers_or_auto_reload(app: Sanic, extra):
+ message = "Single process cannot be run with multiple workers or auto-reload"
with pytest.raises(RuntimeError, match=message):
app.run(single_process=True, **extra)
diff --git a/tests/test_asgi.py b/tests/test_asgi.py
index 111d7e12..c8134b84 100644
--- a/tests/test_asgi.py
+++ b/tests/test_asgi.py
@@ -352,9 +352,7 @@ async def test_websocket_bytes_receive(send, receive, message_stack):
@pytest.mark.asyncio
-async def test_websocket_accept_with_no_subprotocols(
- send, receive, message_stack
-):
+async def test_websocket_accept_with_no_subprotocols(send, receive, message_stack):
ws = WebSocketConnection(send, receive)
await ws.accept()
diff --git a/tests/test_blueprint_group.py b/tests/test_blueprint_group.py
index 06472af4..1c51d4c5 100644
--- a/tests/test_blueprint_group.py
+++ b/tests/test_blueprint_group.py
@@ -28,9 +28,7 @@ def test_bp_group_with_additional_route_params(app: Sanic):
blueprint_1 = Blueprint("blueprint_1", url_prefix="/bp1")
blueprint_2 = Blueprint("blueprint_2", url_prefix="/bp2")
- @blueprint_1.route(
- "/request_path", methods=frozenset({"PUT", "POST"}), version=2
- )
+ @blueprint_1.route("/request_path", methods=frozenset({"PUT", "POST"}), version=2)
def blueprint_1_v2_method_with_put_and_post(request: Request):
if request.method == "PUT":
return text("PUT_OK")
@@ -46,9 +44,7 @@ def test_bp_group_with_additional_route_params(app: Sanic):
elif request.method == "PATCH":
return text(f"PATCH_{param}")
- blueprint_group = Blueprint.group(
- blueprint_1, blueprint_2, url_prefix="/api"
- )
+ blueprint_group = Blueprint.group(blueprint_1, blueprint_2, url_prefix="/api")
@blueprint_group.middleware("request")
def authenticate_request(request: Request):
@@ -68,15 +64,11 @@ def test_bp_group_with_additional_route_params(app: Sanic):
app.blueprint(blueprint_group)
header = {"authorization": " ".join(["Basic", AUTH])}
- _, response = app.test_client.put(
- "/v2/api/bp1/request_path", headers=header
- )
+ _, response = app.test_client.put("/v2/api/bp1/request_path", headers=header)
assert response.text == "PUT_OK"
assert response.headers.get("x-test-middleware") == "value"
- _, response = app.test_client.post(
- "/v2/api/bp1/request_path", headers=header
- )
+ _, response = app.test_client.post("/v2/api/bp1/request_path", headers=header)
assert response.text == "POST_OK"
_, response = app.test_client.delete("/api/bp2/route/bp2", headers=header)
@@ -109,9 +101,7 @@ def test_bp_group(app: Sanic):
def blueprint_2_error(request: Request):
raise ServerError("Error")
- blueprint_group_1 = Blueprint.group(
- blueprint_1, blueprint_2, url_prefix="/bp"
- )
+ blueprint_group_1 = Blueprint.group(blueprint_1, blueprint_2, url_prefix="/bp")
blueprint_3 = Blueprint("blueprint_3", url_prefix="/bp3")
@@ -213,9 +203,7 @@ def test_bp_group_list_operations(app: Sanic):
def blueprint_2_default_route(request):
return text("BP2_OK")
- blueprint_group_1 = Blueprint.group(
- blueprint_1, blueprint_2, url_prefix="/bp"
- )
+ blueprint_group_1 = Blueprint.group(blueprint_1, blueprint_2, url_prefix="/bp")
blueprint_3 = Blueprint("blueprint_2", url_prefix="/bp3")
@@ -247,9 +235,7 @@ def test_bp_group_as_list():
def test_bp_group_as_nested_group():
blueprint_1 = Blueprint("blueprint_1", url_prefix="/bp1")
blueprint_2 = Blueprint("blueprint_2", url_prefix="/bp2")
- blueprint_group_1 = Blueprint.group(
- Blueprint.group(blueprint_1, blueprint_2)
- )
+ blueprint_group_1 = Blueprint.group(Blueprint.group(blueprint_1, blueprint_2))
assert len(blueprint_group_1) == 1
@@ -259,9 +245,7 @@ def test_blueprint_group_insert():
)
blueprint_2 = Blueprint("blueprint_2", url_prefix="/bp2")
blueprint_3 = Blueprint("blueprint_3", url_prefix=None)
- group = BlueprintGroup(
- url_prefix="/test", version=1.3, strict_slashes=False
- )
+ group = BlueprintGroup(url_prefix="/test", version=1.3, strict_slashes=False)
group.insert(0, blueprint_1)
group.insert(0, blueprint_2)
group.insert(0, blueprint_3)
@@ -350,12 +334,8 @@ async def test_multiple_nested_bp_group():
bp1.add_route(lambda _: ..., "/", name="route1")
bp2.add_route(lambda _: ..., "/", name="route2")
- group_a = Blueprint.group(
- bp1, bp2, url_prefix="/group-a", name_prefix="group-a"
- )
- group_b = Blueprint.group(
- bp1, bp2, url_prefix="/group-b", name_prefix="group-b"
- )
+ group_a = Blueprint.group(bp1, bp2, url_prefix="/group-a", name_prefix="group-a")
+ group_b = Blueprint.group(bp1, bp2, url_prefix="/group-b", name_prefix="group-b")
app = Sanic("PropTest")
app.blueprint(group_a)
diff --git a/tests/test_blueprints.py b/tests/test_blueprints.py
index 3bfc4386..7f5bcdab 100644
--- a/tests/test_blueprints.py
+++ b/tests/test_blueprints.py
@@ -751,9 +751,7 @@ def test_bp_group_with_default_url_prefix(app: Sanic):
def api_v1_info(request):
return text("api_version: v1")
- bp_api_v1_group = Blueprint.group(
- bp_api_v1, bp_resources_group, url_prefix="/v1"
- )
+ bp_api_v1_group = Blueprint.group(bp_api_v1, bp_resources_group, url_prefix="/v1")
bp_api_group = Blueprint.group(bp_api_v1_group, url_prefix="/api")
app.blueprint(bp_api_group)
@@ -794,9 +792,7 @@ def test_blueprint_middleware_with_args(app: Sanic):
)
assert response.text == "value"
- _, response = app.test_client.get(
- "/wa", headers={"content-type": "plain/text"}
- )
+ _, response = app.test_client.get("/wa", headers={"content-type": "plain/text"})
assert response.json.get("test") == "value"
@@ -985,13 +981,9 @@ def test_blueprint_group_strict_slashes():
app = Sanic(name="blueprint-group-test")
bp1 = Blueprint(name="bp1", url_prefix=None, strict_slashes=False)
- bp2 = Blueprint(
- name="bp2", version=3, url_prefix="/bp2", strict_slashes=None
- )
+ bp2 = Blueprint(name="bp2", version=3, url_prefix="/bp2", strict_slashes=None)
- bp3 = Blueprint(
- name="bp3", version=None, url_prefix="/bp3/", strict_slashes=None
- )
+ bp3 = Blueprint(name="bp3", version=None, url_prefix="/bp3/", strict_slashes=None)
@bp1.get("/r1")
async def bp1_r1(request):
diff --git a/tests/test_config.py b/tests/test_config.py
index 17bd488e..bb8780d0 100644
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -133,9 +133,7 @@ def test_add_converter_multiple_times(caplog):
def converter():
...
- message = (
- "Configuration value converter 'converter' has already been registered"
- )
+ message = "Configuration value converter 'converter' has already been registered"
config = Config()
config.register_type(converter)
with caplog.at_level(logging.WARNING):
@@ -306,14 +304,10 @@ async def test_config_access_log_passing_in_create_server(app: Sanic):
async def _request(sanic, loop):
app.stop()
- await app.create_server(
- port=1341, access_log=False, return_asyncio_server=True
- )
+ await app.create_server(port=1341, access_log=False, return_asyncio_server=True)
assert app.config.ACCESS_LOG is False
- await app.create_server(
- port=1342, access_log=True, return_asyncio_server=True
- )
+ await app.create_server(port=1342, access_log=True, return_asyncio_server=True)
assert app.config.ACCESS_LOG is True
@@ -334,9 +328,7 @@ def test_config_rewrite_keep_alive():
_test_setting_as_dict = {"TEST_SETTING_VALUE": 1}
_test_setting_as_class = type("C", (), {"TEST_SETTING_VALUE": 1})
-_test_setting_as_module = str(
- Path(__file__).parent / "static/app_test_config.py"
-)
+_test_setting_as_module = str(Path(__file__).parent / "static/app_test_config.py")
@pytest.mark.parametrize(
diff --git a/tests/test_cookies.py b/tests/test_cookies.py
index 544300ac..4caa13af 100644
--- a/tests/test_cookies.py
+++ b/tests/test_cookies.py
@@ -42,9 +42,7 @@ async def test_cookies_asgi(app):
response.cookies["right_back"] = "at you"
return response
- request, response = await app.asgi_client.get(
- "/", cookies={"test": "working!"}
- )
+ request, response = await app.asgi_client.get("/", cookies={"test": "working!"})
response_cookies = SimpleCookie()
response_cookies.load(response.headers.get("set-cookie", {}))
@@ -101,9 +99,7 @@ def test_cookie_options(app):
response = text("OK")
response.cookies["test"] = "at you"
response.cookies["test"]["httponly"] = True
- response.cookies["test"]["expires"] = datetime.now() + timedelta(
- seconds=10
- )
+ response.cookies["test"]["expires"] = datetime.now() + timedelta(seconds=10)
return response
request, response = app.test_client.get("/")
@@ -179,17 +175,11 @@ def test_cookie_max_age(app, max_age):
response.cookies["test"]["max-age"] = max_age
return response
- request, response = app.test_client.get(
- "/", cookies=cookies, raw_cookies=True
- )
+ request, response = app.test_client.get("/", cookies=cookies, raw_cookies=True)
assert response.status == 200
cookie = response.cookies.get("test")
- if (
- str(max_age).isdigit()
- and int(max_age) == float(max_age)
- and int(max_age) != 0
- ):
+ if str(max_age).isdigit() and int(max_age) == float(max_age) and int(max_age) != 0:
cookie_expires = datetime.utcfromtimestamp(
response.raw_cookies["test"].expires
).replace(microsecond=0)
@@ -202,9 +192,8 @@ def test_cookie_max_age(app, max_age):
)
assert cookie == "pass"
- assert (
- cookie_expires == expires
- or cookie_expires == expires + timedelta(seconds=-1)
+ assert cookie_expires == expires or cookie_expires == expires + timedelta(
+ seconds=-1
)
else:
assert cookie is None
@@ -221,9 +210,7 @@ def test_cookie_bad_max_age(app, max_age):
response.cookies["test"]["max-age"] = max_age
return response
- request, response = app.test_client.get(
- "/", cookies=cookies, raw_cookies=True
- )
+ request, response = app.test_client.get("/", cookies=cookies, raw_cookies=True)
assert response.status == 500
@@ -239,9 +226,7 @@ def test_cookie_expires(app: Sanic, expires: timedelta):
response.cookies["test"]["expires"] = expires_time
return response
- request, response = app.test_client.get(
- "/", cookies=cookies, raw_cookies=True
- )
+ request, response = app.test_client.get("/", cookies=cookies, raw_cookies=True)
cookie_expires = datetime.utcfromtimestamp(
response.raw_cookies["test"].expires
@@ -399,17 +384,13 @@ def test_bad_cookie_prarms():
ServerError,
match="Cannot set host_prefix on a cookie unless path='/'",
):
- jar.add_cookie(
- "foo", "bar", host_prefix=True, secure=True, path="/foo"
- )
+ jar.add_cookie("foo", "bar", host_prefix=True, secure=True, path="/foo")
with pytest.raises(
ServerError,
match="Cannot set host_prefix on a cookie with a defined domain",
):
- jar.add_cookie(
- "foo", "bar", host_prefix=True, secure=True, domain="foo.bar"
- )
+ jar.add_cookie("foo", "bar", host_prefix=True, secure=True, domain="foo.bar")
with pytest.raises(
ServerError,
diff --git a/tests/test_errorpages.py b/tests/test_errorpages.py
index 440677c9..1953162d 100644
--- a/tests/test_errorpages.py
+++ b/tests/test_errorpages.py
@@ -544,9 +544,7 @@ def test_guess_mime_logging(
with caplog.at_level(logging.DEBUG, logger="sanic.root"):
guess_mime(fake_request, fallback)
- (logmsg,) = (
- r.message for r in caplog.records if r.funcName == "guess_mime"
- )
+ (logmsg,) = (r.message for r in caplog.records if r.funcName == "guess_mime")
assert logmsg == expected
@@ -564,9 +562,7 @@ def test_exception_header_on_renderers(app: Sanic, format, expected):
@app.get("/test")
def test(request):
- raise SanicException(
- "test", status_code=400, headers={"exception": "test"}
- )
+ raise SanicException("test", status_code=400, headers={"exception": "test"})
_, response = app.test_client.get("/test")
assert response.status == 400
diff --git a/tests/test_exceptions.py b/tests/test_exceptions.py
index 0fec0079..eb27d143 100644
--- a/tests/test_exceptions.py
+++ b/tests/test_exceptions.py
@@ -198,9 +198,7 @@ def test_handled_unhandled_exception(exception_app):
def test_exception_in_exception_handler(exception_app):
"""Test that an exception thrown in an error handler is handled"""
- request, response = exception_app.test_client.get(
- "/error_in_error_handler_handler"
- )
+ request, response = exception_app.test_client.get("/error_in_error_handler_handler")
assert response.status == 500
assert response.body == b"An error occurred while handling an error"
@@ -284,15 +282,9 @@ def test_contextual_exception_context(debug):
def fail():
raise TeapotError(context={"foo": "bar"})
- app.post("/coffee/json", error_format="json", name="json")(
- lambda _: fail()
- )
- app.post("/coffee/html", error_format="html", name="html")(
- lambda _: fail()
- )
- app.post("/coffee/text", error_format="text", name="text")(
- lambda _: fail()
- )
+ app.post("/coffee/json", error_format="json", name="json")(lambda _: fail())
+ app.post("/coffee/html", error_format="html", name="html")(lambda _: fail())
+ app.post("/coffee/text", error_format="text", name="text")(lambda _: fail())
_, response = app.test_client.post("/coffee/json", debug=debug)
assert response.status == 418
@@ -328,15 +320,9 @@ def test_contextual_exception_extra(debug):
def fail():
raise TeapotError(extra={"foo": "bar"})
- app.post("/coffee/json", error_format="json", name="json")(
- lambda _: fail()
- )
- app.post("/coffee/html", error_format="html", name="html")(
- lambda _: fail()
- )
- app.post("/coffee/text", error_format="text", name="text")(
- lambda _: fail()
- )
+ app.post("/coffee/json", error_format="json", name="json")(lambda _: fail())
+ app.post("/coffee/html", error_format="html", name="html")(lambda _: fail())
+ app.post("/coffee/text", error_format="text", name="text")(lambda _: fail())
_, response = app.test_client.post("/coffee/json", debug=debug)
assert response.status == 418
diff --git a/tests/test_exceptions_handler.py b/tests/test_exceptions_handler.py
index ed2621eb..1adff20f 100644
--- a/tests/test_exceptions_handler.py
+++ b/tests/test_exceptions_handler.py
@@ -133,9 +133,7 @@ def test_inherited_exception_handler(exception_handler_app: Sanic):
def test_chained_exception_handler(exception_handler_app: Sanic):
- request, response = exception_handler_app.test_client.get(
- "/6/0", debug=True
- )
+ request, response = exception_handler_app.test_client.get("/6/0", debug=True)
assert response.status == 500
soup = BeautifulSoup(response.body, "html.parser")
@@ -182,20 +180,14 @@ def test_exception_handler_lookup(exception_handler_app: Sanic):
assert handler.lookup(ModuleNotFoundError(), None) == import_error_handler
assert handler.lookup(CustomError(), None) == custom_error_handler
assert handler.lookup(ServerError("Error"), None) == server_error_handler
- assert (
- handler.lookup(CustomServerError("Error"), None)
- == server_error_handler
- )
+ assert handler.lookup(CustomServerError("Error"), None) == server_error_handler
# once again to ensure there is no caching bug
assert handler.lookup(ImportError(), None) == import_error_handler
assert handler.lookup(ModuleNotFoundError(), None) == import_error_handler
assert handler.lookup(CustomError(), None) == custom_error_handler
assert handler.lookup(ServerError("Error"), None) == server_error_handler
- assert (
- handler.lookup(CustomServerError("Error"), None)
- == server_error_handler
- )
+ assert handler.lookup(CustomServerError("Error"), None) == server_error_handler
def test_exception_handler_processed_request_middleware(
diff --git a/tests/test_ext_integration.py b/tests/test_ext_integration.py
index a837ee12..e2340e25 100644
--- a/tests/test_ext_integration.py
+++ b/tests/test_ext_integration.py
@@ -62,9 +62,7 @@ def test_extend_cannot_be_called_multiple_times(app: Sanic, sanic_ext):
)
def test_fail_if_not_loaded(app: Sanic):
del sys.modules["sanic_ext"]
- with pytest.raises(
- RuntimeError, match="Sanic Extensions is not installed.*"
- ):
+ with pytest.raises(RuntimeError, match="Sanic Extensions is not installed.*"):
app.extend(built_in_extensions=False)
diff --git a/tests/test_graceful_shutdown.py b/tests/test_graceful_shutdown.py
index 9befbba4..fcc9958f 100644
--- a/tests/test_graceful_shutdown.py
+++ b/tests/test_graceful_shutdown.py
@@ -8,9 +8,7 @@ from sanic.response import empty
PORT = 42101
-def test_no_exceptions_when_cancel_pending_request(
- app, caplog: LogCaptureFixture
-):
+def test_no_exceptions_when_cancel_pending_request(app, caplog: LogCaptureFixture):
app.config.GRACEFUL_SHUTDOWN_TIMEOUT = 1
@app.get("/")
diff --git a/tests/test_headers.py b/tests/test_headers.py
index 6dbe234f..1f74cfb0 100644
--- a/tests/test_headers.py
+++ b/tests/test_headers.py
@@ -243,9 +243,7 @@ def test_accept_parsed_against_str():
def test_media_type_matching():
- assert headers.MediaType("foo", "bar").match(
- headers.MediaType("foo", "bar")
- )
+ assert headers.MediaType("foo", "bar").match(headers.MediaType("foo", "bar"))
assert headers.MediaType("foo", "bar").match("foo/bar")
@@ -365,31 +363,23 @@ def test_accept_ordering(raw):
def test_not_accept_wildcard():
accept = headers.parse_accept("*/*, foo/*, */bar, foo/bar;q=0.1")
- assert not accept.match(
- "text/html", "foo/foo", "bar/bar", accept_wildcards=False
- )
+ assert not accept.match("text/html", "foo/foo", "bar/bar", accept_wildcards=False)
# Should ignore wildcards in accept but still matches them from mimes
m = accept.match("text/plain", "*/*", accept_wildcards=False)
assert m.mime == "*/*"
assert m.match("*/*")
assert m.header == "foo/bar"
- assert not accept.match(
- "text/html", "foo/foo", "bar/bar", accept_wildcards=False
- )
+ assert not accept.match("text/html", "foo/foo", "bar/bar", accept_wildcards=False)
def test_accept_misc():
- header = (
- "foo/bar;q=0.0, */plain;param=123, text/plain, text/*, foo/bar;q=0.5"
- )
+ header = "foo/bar;q=0.0, */plain;param=123, text/plain, text/*, foo/bar;q=0.5"
a = headers.parse_accept(header)
assert repr(a) == (
- "[*/plain;param=123, text/plain, text/*, "
- "foo/bar;q=0.5, foo/bar;q=0.0]"
+ "[*/plain;param=123, text/plain, text/*, " "foo/bar;q=0.5, foo/bar;q=0.0]"
) # noqa: E501
assert str(a) == (
- "*/plain;param=123, text/plain, text/*, "
- "foo/bar;q=0.5, foo/bar;q=0.0"
+ "*/plain;param=123, text/plain, text/*, " "foo/bar;q=0.5, foo/bar;q=0.0"
) # noqa: E501
# q=1 types don't match foo/bar but match the two others,
# text/* comes first and matches */plain because it
diff --git a/tests/test_json_encoding.py b/tests/test_json_encoding.py
index 1dedbf72..1d652205 100644
--- a/tests/test_json_encoding.py
+++ b/tests/test_json_encoding.py
@@ -11,9 +11,7 @@ try:
import ujson
from ujson import dumps as udumps
- ujson_version = tuple(
- map(int, ujson.__version__.strip(ascii_lowercase).split("."))
- )
+ ujson_version = tuple(map(int, ujson.__version__.strip(ascii_lowercase).split(".")))
NO_UJSON = False
DEFAULT_DUMPS = udumps
@@ -69,15 +67,11 @@ def test_json_response_ujson(payload: Dict[str, Foo]):
response = json(payload)
assert response.body == b'{"foo":{"bar":"bar"}}'
- with pytest.raises(
- TypeError, match="Object of type Foo is not JSON serializable"
- ):
+ with pytest.raises(TypeError, match="Object of type Foo is not JSON serializable"):
json(payload, dumps=sdumps)
Sanic("Test", dumps=sdumps)
- with pytest.raises(
- TypeError, match="Object of type Foo is not JSON serializable"
- ):
+ with pytest.raises(TypeError, match="Object of type Foo is not JSON serializable"):
json(payload)
diff --git a/tests/test_keep_alive_timeout.py b/tests/test_keep_alive_timeout.py
index cfa9f009..7505294e 100644
--- a/tests/test_keep_alive_timeout.py
+++ b/tests/test_keep_alive_timeout.py
@@ -72,9 +72,7 @@ def test_keep_alive_timeout_reuse():
port = get_port()
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
- client = ReusableClient(
- keep_alive_timeout_app_reuse, loop=loop, port=port
- )
+ client = ReusableClient(keep_alive_timeout_app_reuse, loop=loop, port=port)
try:
with client:
headers = {"Connection": "keep-alive"}
@@ -113,14 +111,10 @@ def test_keep_alive_client_timeout():
port = get_port()
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
- client = ReusableClient(
- keep_alive_app_client_timeout, loop=loop, port=port
- )
+ client = ReusableClient(keep_alive_app_client_timeout, loop=loop, port=port)
with client:
headers = {"Connection": "keep-alive"}
- request, response = client.get(
- "/1", headers=headers, timeout=1
- )
+ request, response = client.get("/1", headers=headers, timeout=1)
assert response.status == 200
assert response.text == "OK"
@@ -153,14 +147,10 @@ def test_keep_alive_server_timeout():
port = get_port()
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
- client = ReusableClient(
- keep_alive_app_server_timeout, loop=loop, port=port
- )
+ client = ReusableClient(keep_alive_app_server_timeout, loop=loop, port=port)
with client:
headers = {"Connection": "keep-alive"}
- request, response = client.get(
- "/1", headers=headers, timeout=60
- )
+ request, response = client.get("/1", headers=headers, timeout=60)
assert response.status == 200
assert response.text == "OK"
@@ -190,9 +180,7 @@ def test_keep_alive_connection_context():
port = get_port()
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
- client = ReusableClient(
- keep_alive_app_context, loop=loop, port=port
- )
+ client = ReusableClient(keep_alive_app_context, loop=loop, port=port)
with client:
headers = {"Connection": "keep-alive"}
request1, _ = client.post("/ctx", headers=headers)
@@ -203,9 +191,7 @@ def test_keep_alive_connection_context():
assert response.text == "hello"
assert id(request1.conn_info.ctx) == id(request2.conn_info.ctx)
assert (
- request1.conn_info.ctx.foo
- == request2.conn_info.ctx.foo
- == "hello"
+ request1.conn_info.ctx.foo == request2.conn_info.ctx.foo == "hello"
)
assert request2.protocol.state["requests_count"] == 2
except OSError:
diff --git a/tests/test_logging.py b/tests/test_logging.py
index e099c998..84502cad 100644
--- a/tests/test_logging.py
+++ b/tests/test_logging.py
@@ -25,9 +25,7 @@ def test_log(app):
log_stream = StringIO()
for handler in logging.root.handlers[:]:
logging.root.removeHandler(handler)
- logging.basicConfig(
- format=logging_format, level=logging.DEBUG, stream=log_stream
- )
+ logging.basicConfig(format=logging_format, level=logging.DEBUG, stream=log_stream)
logging.getLogger("asyncio").setLevel(logging.WARNING)
log = logging.getLogger()
rand_string = str(uuid.uuid4())
@@ -47,26 +45,13 @@ def test_logging_defaults():
Sanic("test_logging")
for fmt in [h.formatter for h in logging.getLogger("sanic.root").handlers]:
- assert (
- fmt._fmt
- == LOGGING_CONFIG_DEFAULTS["formatters"]["generic"]["format"]
- )
+ assert fmt._fmt == LOGGING_CONFIG_DEFAULTS["formatters"]["generic"]["format"]
- for fmt in [
- h.formatter for h in logging.getLogger("sanic.error").handlers
- ]:
- assert (
- fmt._fmt
- == LOGGING_CONFIG_DEFAULTS["formatters"]["generic"]["format"]
- )
+ for fmt in [h.formatter for h in logging.getLogger("sanic.error").handlers]:
+ assert fmt._fmt == LOGGING_CONFIG_DEFAULTS["formatters"]["generic"]["format"]
- for fmt in [
- h.formatter for h in logging.getLogger("sanic.access").handlers
- ]:
- assert (
- fmt._fmt
- == LOGGING_CONFIG_DEFAULTS["formatters"]["access"]["format"]
- )
+ for fmt in [h.formatter for h in logging.getLogger("sanic.access").handlers]:
+ assert fmt._fmt == LOGGING_CONFIG_DEFAULTS["formatters"]["access"]["format"]
def test_logging_pass_customer_logconfig():
@@ -85,14 +70,10 @@ def test_logging_pass_customer_logconfig():
for fmt in [h.formatter for h in logging.getLogger("sanic.root").handlers]:
assert fmt._fmt == modified_config["formatters"]["generic"]["format"]
- for fmt in [
- h.formatter for h in logging.getLogger("sanic.error").handlers
- ]:
+ for fmt in [h.formatter for h in logging.getLogger("sanic.error").handlers]:
assert fmt._fmt == modified_config["formatters"]["generic"]["format"]
- for fmt in [
- h.formatter for h in logging.getLogger("sanic.access").handlers
- ]:
+ for fmt in [h.formatter for h in logging.getLogger("sanic.access").handlers]:
assert fmt._fmt == modified_config["formatters"]["access"]["format"]
@@ -108,9 +89,7 @@ def test_log_connection_lost(app, debug, monkeypatch):
stream = StringIO()
error = logging.getLogger("sanic.error")
error.addHandler(logging.StreamHandler(stream))
- monkeypatch.setattr(
- sanic.server.protocols.http_protocol, "error_logger", error
- )
+ monkeypatch.setattr(sanic.server.protocols.http_protocol, "error_logger", error)
@app.route("/conn_lost")
async def conn_lost(request):
@@ -234,9 +213,7 @@ def test_verbosity(app, caplog, app_verbosity, log_verbosity, exists):
return text("hello")
with caplog.at_level(logging.INFO):
- _ = app.test_client.get(
- "/", server_kwargs={"verbosity": app_verbosity}
- )
+ _ = app.test_client.get("/", server_kwargs={"verbosity": app_verbosity})
record = ("sanic.root", logging.INFO, rand_string)
diff --git a/tests/test_motd.py b/tests/test_motd.py
index 9b5c1af1..f9d76326 100644
--- a/tests/test_motd.py
+++ b/tests/test_motd.py
@@ -74,9 +74,7 @@ def test_reload_dirs(app):
app.config.AUTO_RELOAD = True
with patch.object(MOTD, "output") as mock:
- app.prepare(
- reload_dir="./", auto_reload=True, motd_display={"foo": "bar"}
- )
+ app.prepare(reload_dir="./", auto_reload=True, motd_display={"foo": "bar"})
mock.assert_called()
assert mock.call_args.args[2]["auto-reload"] == f"enabled, {os.getcwd()}"
assert mock.call_args.args[3] == {"foo": "bar"}
diff --git a/tests/test_multiprocessing.py b/tests/test_multiprocessing.py
index 64cfea0b..d7e3bd0b 100644
--- a/tests/test_multiprocessing.py
+++ b/tests/test_multiprocessing.py
@@ -162,11 +162,5 @@ def test_main_process_event(app, caplog):
with caplog.at_level(logging.INFO):
app.run(HOST, PORT, workers=num_workers)
- assert (
- caplog.record_tuples.count(("sanic.root", 20, "main_process_start"))
- == 2
- )
- assert (
- caplog.record_tuples.count(("sanic.root", 20, "main_process_stop"))
- == 2
- )
+ assert caplog.record_tuples.count(("sanic.root", 20, "main_process_start")) == 2
+ assert caplog.record_tuples.count(("sanic.root", 20, "main_process_stop")) == 2
diff --git a/tests/test_named_routes.py b/tests/test_named_routes.py
index 30302521..ac48cc8f 100644
--- a/tests/test_named_routes.py
+++ b/tests/test_named_routes.py
@@ -283,9 +283,7 @@ def test_dynamic_named_route_path():
def test_dynamic_named_route_unhashable():
app = Sanic("app")
- @app.route(
- "/folder//end/", name="route_unhashable"
- )
+ @app.route("/folder//end/", name="route_unhashable")
async def handler(request, unhashable):
return text("OK")
@@ -366,10 +364,7 @@ def test_dynamic_add_named_route():
return text("OK")
app.add_route(handler, "/folder/", name="route_dynamic")
- assert (
- app.router.routes_all[("folder", "")].name
- == "app.route_dynamic"
- )
+ assert app.router.routes_all[("folder", "")].name == "app.route_dynamic"
assert app.url_for("route_dynamic", name="test") == "/folder/test"
with pytest.raises(URLBuildError):
app.url_for("handler")
diff --git a/tests/test_pipelining.py b/tests/test_pipelining.py
index 49d113c9..d3a4f7a5 100644
--- a/tests/test_pipelining.py
+++ b/tests/test_pipelining.py
@@ -95,6 +95,4 @@ def test_bad_headers(app):
assert response1.status == 200
assert response2.status == 413
- assert (
- response1.headers["x-request-id"] != response2.headers["x-request-id"]
- )
+ assert response1.headers["x-request-id"] != response2.headers["x-request-id"]
diff --git a/tests/test_reloader.py b/tests/test_reloader.py
index 3e880316..1e5726a4 100644
--- a/tests/test_reloader.py
+++ b/tests/test_reloader.py
@@ -220,9 +220,7 @@ def test_reload_listeners():
filename, port=42305, auto_reload=True
)
- proc = Popen(
- argv["script"], cwd=tmpdir, stdout=PIPE, creationflags=flags
- )
+ proc = Popen(argv["script"], cwd=tmpdir, stdout=PIPE, creationflags=flags)
try:
timeout = Timer(TIMER_DELAY, terminate, [proc])
timeout.start()
diff --git a/tests/test_request.py b/tests/test_request.py
index 6f59317d..5158ed23 100644
--- a/tests/test_request.py
+++ b/tests/test_request.py
@@ -75,9 +75,7 @@ def test_request_id(request_id, expected_type):
async def get(request):
return response.empty()
- request, _ = app.test_client.get(
- "/", headers={"X-REQUEST-ID": f"{request_id}"}
- )
+ request, _ = app.test_client.get("/", headers={"X-REQUEST-ID": f"{request_id}"})
assert request.id == request_id
assert type(request.id) == expected_type
@@ -168,9 +166,7 @@ def test_request_accept():
assert match.header.mime == "text/plain"
assert match.header.params == {"format": "flowed"}
- header_value = (
- "text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c"
- )
+ header_value = "text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c"
request, _ = app.test_client.get(
"/",
headers={"Accept": header_value},
diff --git a/tests/test_request_stream.py b/tests/test_request_stream.py
index 5d5b8226..0d7bd1d8 100644
--- a/tests/test_request_stream.py
+++ b/tests/test_request_stream.py
@@ -369,9 +369,7 @@ def test_request_stream_blueprint(app):
result += body.decode("utf-8")
return text(result)
- bp.add_route(
- post_add_route, "/post/add_route", methods=["POST"], stream=True
- )
+ bp.add_route(post_add_route, "/post/add_route", methods=["POST"], stream=True)
app.blueprint(bp)
request, response = app.test_client.get("/get")
diff --git a/tests/test_requests.py b/tests/test_requests.py
index 5f4567f9..ea6c998a 100644
--- a/tests/test_requests.py
+++ b/tests/test_requests.py
@@ -68,9 +68,7 @@ async def test_url_asgi(app):
request, response = await app.asgi_client.get("/")
- if response.body.decode().endswith("/") and not ASGI_BASE_URL.endswith(
- "/"
- ):
+ if response.body.decode().endswith("/") and not ASGI_BASE_URL.endswith("/"):
response.body[:-1] == ASGI_BASE_URL.encode()
else:
assert response.body == ASGI_BASE_URL.encode()
@@ -387,9 +385,7 @@ def test_token(app, auth_type, token):
if token:
headers = {
"content-type": "application/json",
- "Authorization": f"{auth_type} {token}"
- if auth_type
- else f"{token}",
+ "Authorization": f"{auth_type} {token}" if auth_type else f"{token}",
}
else:
headers = {"content-type": "application/json"}
@@ -426,9 +422,7 @@ def test_credentials(app, capfd, auth_type, token, username, password):
if token:
headers = {
"content-type": "application/json",
- "Authorization": f"{auth_type} {token}"
- if auth_type
- else f"{token}",
+ "Authorization": f"{auth_type} {token}" if auth_type else f"{token}",
}
else:
headers = {"content-type": "application/json"}
@@ -649,9 +643,7 @@ async def test_standard_forwarded_asgi(app):
assert response.json == {"for": "127.0.0.2", "proto": "ws"}
# Header present but not matching anything
- request, response = await app.asgi_client.get(
- "/", headers={"Forwarded": "."}
- )
+ request, response = await app.asgi_client.get("/", headers={"Forwarded": "."})
assert response.json == {}
# Forwarded header present but no matching secret -> use X-headers
@@ -753,9 +745,7 @@ def test_remote_addr_with_two_proxies(app):
assert request.remote_addr == "127.0.0.1"
assert response.body == b"127.0.0.1"
- headers = {
- "X-Forwarded-For": ", 127.0.2.2, , ,127.0.0.1, , ,,127.0.1.2"
- }
+ headers = {"X-Forwarded-For": ", 127.0.2.2, , ,127.0.0.1, , ,,127.0.1.2"}
request, response = app.test_client.get("/", headers=headers)
assert request.remote_addr == "127.0.0.1"
assert response.body == b"127.0.0.1"
@@ -794,9 +784,7 @@ async def test_remote_addr_with_two_proxies_asgi(app):
assert request.remote_addr == "127.0.0.1"
assert response.body == b"127.0.0.1"
- headers = {
- "X-Forwarded-For": ", 127.0.2.2, , ,127.0.0.1, , ,,127.0.1.2"
- }
+ headers = {"X-Forwarded-For": ", 127.0.2.2, , ,127.0.0.1, , ,,127.0.1.2"}
request, response = await app.asgi_client.get("/", headers=headers)
assert request.remote_addr == "127.0.0.1"
assert response.body == b"127.0.0.1"
@@ -992,9 +980,7 @@ def test_post_form_urlencoded(app):
payload = "test=OK"
headers = {"content-type": "application/x-www-form-urlencoded"}
- request, response = app.test_client.post(
- "/", data=payload, headers=headers
- )
+ request, response = app.test_client.post("/", data=payload, headers=headers)
assert request.form.get("test") == "OK"
assert request.form.get("test") == "OK" # For request.parsed_form
@@ -1009,9 +995,7 @@ async def test_post_form_urlencoded_asgi(app):
payload = "test=OK"
headers = {"content-type": "application/x-www-form-urlencoded"}
- request, response = await app.asgi_client.post(
- "/", data=payload, headers=headers
- )
+ request, response = await app.asgi_client.post("/", data=payload, headers=headers)
assert request.form.get("test") == "OK"
assert request.form.get("test") == "OK" # For request.parsed_form
@@ -1026,9 +1010,7 @@ def test_post_form_urlencoded_keep_blanks(app):
payload = "test="
headers = {"content-type": "application/x-www-form-urlencoded"}
- request, response = app.test_client.post(
- "/", data=payload, headers=headers
- )
+ request, response = app.test_client.post("/", data=payload, headers=headers)
assert request.form.get("test") == ""
assert request.form.get("test") == "" # For request.parsed_form
@@ -1044,9 +1026,7 @@ async def test_post_form_urlencoded_keep_blanks_asgi(app):
payload = "test="
headers = {"content-type": "application/x-www-form-urlencoded"}
- request, response = await app.asgi_client.post(
- "/", data=payload, headers=headers
- )
+ request, response = await app.asgi_client.post("/", data=payload, headers=headers)
assert request.form.get("test") == ""
assert request.form.get("test") == "" # For request.parsed_form
@@ -1060,9 +1040,7 @@ def test_post_form_urlencoded_drop_blanks(app):
payload = "test="
headers = {"content-type": "application/x-www-form-urlencoded"}
- request, response = app.test_client.post(
- "/", data=payload, headers=headers
- )
+ request, response = app.test_client.post("/", data=payload, headers=headers)
assert "test" not in request.form.keys()
@@ -1076,9 +1054,7 @@ async def test_post_form_urlencoded_drop_blanks_asgi(app):
payload = "test="
headers = {"content-type": "application/x-www-form-urlencoded"}
- request, response = await app.asgi_client.post(
- "/", data=payload, headers=headers
- )
+ request, response = await app.asgi_client.post("/", data=payload, headers=headers)
assert "test" not in request.form.keys()
@@ -1133,9 +1109,7 @@ async def test_post_form_multipart_form_data_asgi(app, payload):
headers = {"content-type": "multipart/form-data; boundary=----sanic"}
- request, response = await app.asgi_client.post(
- "/", data=payload, headers=headers
- )
+ request, response = await app.asgi_client.post("/", data=payload, headers=headers)
assert request.form.get("test") == "OK"
@@ -1200,9 +1174,7 @@ def test_form_with_multiple_values(app):
headers = {"content-type": "application/x-www-form-urlencoded"}
- request, response = app.test_client.post(
- "/", data=payload, headers=headers
- )
+ request, response = app.test_client.post("/", data=payload, headers=headers)
assert request.form.getlist("selectedItems") == ["v1", "v2", "v3"]
@@ -1217,9 +1189,7 @@ async def test_form_with_multiple_values_asgi(app):
headers = {"content-type": "application/x-www-form-urlencoded"}
- request, response = await app.asgi_client.post(
- "/", data=payload, headers=headers
- )
+ request, response = await app.asgi_client.post("/", data=payload, headers=headers)
assert request.form.getlist("selectedItems") == ["v1", "v2", "v3"]
@@ -1445,9 +1415,7 @@ def test_request_multipart_file_without_field_name(app, caplog):
headers = {"content-type": "multipart/form-data; boundary=------sanic"}
- request, _ = app.test_client.post(
- data=payload, headers=headers, debug=True
- )
+ request, _ = app.test_client.post(data=payload, headers=headers, debug=True)
with caplog.at_level(logging.DEBUG):
request.form
@@ -1484,9 +1452,7 @@ def test_request_multipart_file_duplicate_filed_name(app):
"Content-Type": "multipart/form-data; boundary=e73ffaa8b1b2472b8ec848de833cb05b"
}
- request, _ = app.test_client.post(
- data=payload, headers=headers, debug=True
- )
+ request, _ = app.test_client.post(data=payload, headers=headers, debug=True)
assert request.form.getlist("file") == [
'{"test":"json"}',
'{"test":"json2"}',
@@ -1607,9 +1573,7 @@ def test_request_parsing_form_failed(app, caplog):
payload = "test=OK"
headers = {"content-type": "multipart/form-data"}
- request, response = app.test_client.post(
- "/", data=payload, headers=headers
- )
+ request, response = app.test_client.post("/", data=payload, headers=headers)
with caplog.at_level(logging.ERROR):
request.form
@@ -1630,9 +1594,7 @@ async def test_request_parsing_form_failed_asgi(app, caplog):
payload = "test=OK"
headers = {"content-type": "multipart/form-data"}
- request, response = await app.asgi_client.post(
- "/", data=payload, headers=headers
- )
+ request, response = await app.asgi_client.post("/", data=payload, headers=headers)
with caplog.at_level(logging.ERROR):
request.form
@@ -1743,9 +1705,7 @@ def test_request_query_args_custom_parsing(app):
def handler(request):
return text("pass")
- request, response = app.test_client.get(
- "/?test1=value1&test2=&test3=value3"
- )
+ request, response = app.test_client.get("/?test1=value1&test2=&test3=value3")
assert request.get_query_args(keep_blank_values=True) == [
("test1", "value1"),
@@ -1762,9 +1722,7 @@ def test_request_query_args_custom_parsing(app):
{"test1": ["value1"], "test2": [""], "test3": ["value3"]}
)
- assert request.args == RequestParameters(
- {"test1": ["value1"], "test3": ["value3"]}
- )
+ assert request.args == RequestParameters({"test1": ["value1"], "test3": ["value3"]})
assert request.get_args(keep_blank_values=False) == RequestParameters(
{"test1": ["value1"], "test3": ["value3"]}
@@ -1777,9 +1735,7 @@ async def test_request_query_args_custom_parsing_asgi(app):
def handler(request):
return text("pass")
- request, response = await app.asgi_client.get(
- "/?test1=value1&test2=&test3=value3"
- )
+ request, response = await app.asgi_client.get("/?test1=value1&test2=&test3=value3")
assert request.get_query_args(keep_blank_values=True) == [
("test1", "value1"),
@@ -1796,9 +1752,7 @@ async def test_request_query_args_custom_parsing_asgi(app):
{"test1": ["value1"], "test2": [""], "test3": ["value3"]}
)
- assert request.args == RequestParameters(
- {"test1": ["value1"], "test3": ["value3"]}
- )
+ assert request.args == RequestParameters({"test1": ["value1"], "test3": ["value3"]})
assert request.get_args(keep_blank_values=False) == RequestParameters(
{"test1": ["value1"], "test3": ["value3"]}
@@ -1907,9 +1861,7 @@ def test_request_server_name_in_host_header(app):
def handler(request):
return text("OK")
- request, response = app.test_client.get(
- "/", headers={"Host": "my-server:5555"}
- )
+ request, response = app.test_client.get("/", headers={"Host": "my-server:5555"})
assert request.server_name == "my-server"
request, response = app.test_client.get(
@@ -1917,9 +1869,7 @@ def test_request_server_name_in_host_header(app):
)
assert request.server_name == "[2a00:1450:400f:80c::200e]"
- request, response = app.test_client.get(
- "/", headers={"Host": "mal_formed"}
- )
+ request, response = app.test_client.get("/", headers={"Host": "mal_formed"})
assert request.server_name == ""
@@ -1955,9 +1905,7 @@ def test_request_server_port_in_host_header(app):
def handler(request):
return text("OK")
- request, response = app.test_client.get(
- "/", headers={"Host": "my-server:5555"}
- )
+ request, response = app.test_client.get("/", headers={"Host": "my-server:5555"})
assert request.server_port == 5555
request, response = app.test_client.get(
@@ -1965,9 +1913,7 @@ def test_request_server_port_in_host_header(app):
)
assert request.server_port == 5555
- request, response = app.test_client.get(
- "/", headers={"Host": "mal_formed:5555"}
- )
+ request, response = app.test_client.get("/", headers={"Host": "mal_formed:5555"})
if PORT is None:
assert request.server_port != 5555
else:
@@ -2038,13 +1984,8 @@ def test_url_for_with_forwarded_request(app):
},
)
assert app.url_for("view_name") == "/another_view"
- assert (
- app.url_for("view_name", _external=True)
- == "http://my-server/another_view"
- )
- assert (
- request.url_for("view_name") == "https://my-server:6789/another_view"
- )
+ assert app.url_for("view_name", _external=True) == "http://my-server/another_view"
+ assert request.url_for("view_name") == "https://my-server:6789/another_view"
request, response = app.test_client.get(
"/",
@@ -2159,10 +2100,7 @@ def test_url_for_without_server_name(app):
return text("url-for")
request, response = app.test_client.get("/sample")
- assert (
- response.json["url"]
- == f"http://127.0.0.1:{request.server_port}/url-for"
- )
+ assert response.json["url"] == f"http://127.0.0.1:{request.server_port}/url-for"
def test_safe_method_with_body_ignored(app):
@@ -2219,15 +2157,11 @@ def test_conflicting_body_methods_overload(app: Sanic):
@app.put("/p/", name="two")
@app.put("/p/", name="three")
async def put(request, foo=None):
- return json(
- {"name": request.route.name, "body": str(request.body), "foo": foo}
- )
+ return json({"name": request.route.name, "body": str(request.body), "foo": foo})
@app.delete("/p/")
async def delete(request, foo):
- return json(
- {"name": request.route.name, "body": str(request.body), "foo": foo}
- )
+ return json({"name": request.route.name, "body": str(request.body), "foo": foo})
payload = {"test": "OK"}
data = str(json_dumps(payload).encode())
@@ -2285,9 +2219,7 @@ def test_handler_overload(app: Sanic):
def handler(request, **kwargs):
return json(kwargs)
- _, response = app.test_client.get(
- "/long/sub/route/param_a/foo/param_b/bar"
- )
+ _, response = app.test_client.get("/long/sub/route/param_a/foo/param_b/bar")
assert response.status == 200
assert response.json == {
"param_a": "foo",
diff --git a/tests/test_response.py b/tests/test_response.py
index 08cb899b..806e622f 100644
--- a/tests/test_response.py
+++ b/tests/test_response.py
@@ -127,14 +127,10 @@ def test_response_content_length(app):
)
_, response = app.test_client.get("/response_with_space")
- content_length_for_response_with_space = response.headers.get(
- "Content-Length"
- )
+ content_length_for_response_with_space = response.headers.get("Content-Length")
_, response = app.test_client.get("/response_without_space")
- content_length_for_response_without_space = response.headers.get(
- "Content-Length"
- )
+ content_length_for_response_without_space = response.headers.get("Content-Length")
assert (
content_length_for_response_with_space
@@ -289,9 +285,7 @@ def test_stream_response_with_cookies(app):
cookies = CookieJar(headers)
cookies["test"] = "modified"
cookies["test"] = "pass"
- response = await request.respond(
- content_type="text/csv", headers=headers
- )
+ response = await request.respond(content_type="text/csv", headers=headers)
await response.send("foo,")
await asyncio.sleep(0.001)
@@ -340,9 +334,7 @@ def get_file_last_modified_timestamp(
return (static_file_directory / file_name).stat().st_mtime
-@pytest.mark.parametrize(
- "file_name", ["test.file", "decode me.txt", "python.png"]
-)
+@pytest.mark.parametrize("file_name", ["test.file", "decode me.txt", "python.png"])
@pytest.mark.parametrize("status", [200, 401])
def test_file_response(app: Sanic, file_name, static_file_directory, status):
@app.route("/files/", methods=["GET"])
@@ -369,9 +361,7 @@ def test_file_response(app: Sanic, file_name, static_file_directory, status):
("python.png", "logo.png"),
],
)
-def test_file_response_custom_filename(
- app: Sanic, source, dest, static_file_directory
-):
+def test_file_response_custom_filename(app: Sanic, source, dest, static_file_directory):
@app.route("/files/", methods=["GET"])
def file_route(request, filename):
file_path = os.path.join(static_file_directory, filename)
@@ -381,10 +371,7 @@ def test_file_response_custom_filename(
request, response = app.test_client.get(f"/files/{source}")
assert response.status == 200
assert response.body == get_file_content(static_file_directory, source)
- assert (
- response.headers["Content-Disposition"]
- == f'attachment; filename="{dest}"'
- )
+ assert response.headers["Content-Disposition"] == f'attachment; filename="{dest}"'
@pytest.mark.parametrize("file_name", ["test.file", "decode me.txt"])
@@ -418,9 +405,7 @@ def test_file_head_response(app: Sanic, file_name, static_file_directory):
)
-@pytest.mark.parametrize(
- "file_name", ["test.file", "decode me.txt", "python.png"]
-)
+@pytest.mark.parametrize("file_name", ["test.file", "decode me.txt", "python.png"])
def test_file_stream_response(app: Sanic, file_name, static_file_directory):
@app.route("/files/", methods=["GET"])
def file_route(request, filename):
@@ -458,16 +443,11 @@ def test_file_stream_response_custom_filename(
request, response = app.test_client.get(f"/files/{source}")
assert response.status == 200
assert response.body == get_file_content(static_file_directory, source)
- assert (
- response.headers["Content-Disposition"]
- == f'attachment; filename="{dest}"'
- )
+ assert response.headers["Content-Disposition"] == f'attachment; filename="{dest}"'
@pytest.mark.parametrize("file_name", ["test.file", "decode me.txt"])
-def test_file_stream_head_response(
- app: Sanic, file_name, static_file_directory
-):
+def test_file_stream_head_response(app: Sanic, file_name, static_file_directory):
@app.route("/files/", methods=["GET", "HEAD"])
async def file_route(request, filename):
file_path = os.path.join(static_file_directory, filename)
@@ -504,12 +484,8 @@ def test_file_stream_head_response(
)
-@pytest.mark.parametrize(
- "file_name", ["test.file", "decode me.txt", "python.png"]
-)
-@pytest.mark.parametrize(
- "size,start,end", [(1024, 0, 1024), (4096, 1024, 8192)]
-)
+@pytest.mark.parametrize("file_name", ["test.file", "decode me.txt", "python.png"])
+@pytest.mark.parametrize("size,start,end", [(1024, 0, 1024), (4096, 1024, 8192)])
def test_file_stream_response_range(
app: Sanic, file_name, static_file_directory, size, start, end
):
@@ -700,8 +676,7 @@ def send_response_after_eof_should_fail(
)
error_msg2 = (
- "Response stream was ended, no more "
- "response data is allowed to be sent."
+ "Response stream was ended, no more " "response data is allowed to be sent."
)
with caplog.at_level(ERROR):
@@ -711,48 +686,30 @@ def send_response_after_eof_should_fail(
assert message_in_records(caplog.records, error_msg2)
-@pytest.mark.parametrize(
- "file_name", ["test.file", "decode me.txt", "python.png"]
-)
-def test_file_response_headers(
- app: Sanic, file_name: str, static_file_directory: str
-):
+@pytest.mark.parametrize("file_name", ["test.file", "decode me.txt", "python.png"])
+def test_file_response_headers(app: Sanic, file_name: str, static_file_directory: str):
test_last_modified = datetime.now()
test_max_age = 10
test_expires = test_last_modified.timestamp() + test_max_age
@app.route("/files/cached/", methods=["GET"])
def file_route_cache(request: Request, filename: str):
- file_path = (
- Path(static_file_directory) / unquote(filename)
- ).absolute()
- return file(
- file_path, max_age=test_max_age, last_modified=test_last_modified
- )
+ file_path = (Path(static_file_directory) / unquote(filename)).absolute()
+ return file(file_path, max_age=test_max_age, last_modified=test_last_modified)
- @app.route(
- "/files/cached_default_last_modified/", methods=["GET"]
- )
- def file_route_cache_default_last_modified(
- request: Request, filename: str
- ):
- file_path = (
- Path(static_file_directory) / unquote(filename)
- ).absolute()
+ @app.route("/files/cached_default_last_modified/", methods=["GET"])
+ def file_route_cache_default_last_modified(request: Request, filename: str):
+ file_path = (Path(static_file_directory) / unquote(filename)).absolute()
return file(file_path, max_age=test_max_age)
@app.route("/files/no_cache/", methods=["GET"])
def file_route_no_cache(request: Request, filename: str):
- file_path = (
- Path(static_file_directory) / unquote(filename)
- ).absolute()
+ file_path = (Path(static_file_directory) / unquote(filename)).absolute()
return file(file_path)
@app.route("/files/no_store/", methods=["GET"])
def file_route_no_store(request: Request, filename: str):
- file_path = (
- Path(static_file_directory) / unquote(filename)
- ).absolute()
+ file_path = (Path(static_file_directory) / unquote(filename)).absolute()
return file(file_path, no_store=True)
_, response = app.test_client.get(f"/files/cached/{file_name}")
@@ -765,8 +722,7 @@ def test_file_response_headers(
)
assert (
"expires" in headers
- and headers.get("expires")[:-6]
- == formatdate(test_expires, usegmt=True)[:-6]
+ and headers.get("expires")[:-6] == formatdate(test_expires, usegmt=True)[:-6]
# [:-6] to allow at most 1 min difference
# It's minimal for cases like:
# Thu, 26 May 2022 05:36:59 GMT
@@ -774,9 +730,9 @@ def test_file_response_headers(
# Thu, 26 May 2022 05:37:00 GMT
)
assert response.status == 200
- assert "last-modified" in headers and headers.get(
- "last-modified"
- ) == formatdate(test_last_modified.timestamp(), usegmt=True)
+ assert "last-modified" in headers and headers.get("last-modified") == formatdate(
+ test_last_modified.timestamp(), usegmt=True
+ )
_, response = app.test_client.get(
f"/files/cached_default_last_modified/{file_name}"
@@ -785,23 +741,19 @@ def test_file_response_headers(
static_file_directory, file_name
)
headers = response.headers
- assert "last-modified" in headers and headers.get(
- "last-modified"
- ) == formatdate(file_last_modified, usegmt=True)
+ assert "last-modified" in headers and headers.get("last-modified") == formatdate(
+ file_last_modified, usegmt=True
+ )
assert response.status == 200
_, response = app.test_client.get(f"/files/no_cache/{file_name}")
headers = response.headers
- assert "cache-control" in headers and "no-cache" == headers.get(
- "cache-control"
- )
+ assert "cache-control" in headers and "no-cache" == headers.get("cache-control")
assert response.status == 200
_, response = app.test_client.get(f"/files/no_store/{file_name}")
headers = response.headers
- assert "cache-control" in headers and "no-store" == headers.get(
- "cache-control"
- )
+ assert "cache-control" in headers and "no-store" == headers.get("cache-control")
assert response.status == 200
@@ -849,17 +801,13 @@ def test_file_validate(app: Sanic, static_file_directory: str):
file_path.unlink()
-@pytest.mark.parametrize(
- "file_name", ["test.file", "decode me.txt", "python.png"]
-)
+@pytest.mark.parametrize("file_name", ["test.file", "decode me.txt", "python.png"])
def test_file_validating_invalid_header(
app: Sanic, file_name: str, static_file_directory: str
):
@app.route("/files/", methods=["GET"])
def file_route(request: Request, filename: str):
- handler_file_path = (
- Path(static_file_directory) / unquote(filename)
- ).absolute()
+ handler_file_path = (Path(static_file_directory) / unquote(filename)).absolute()
return file(
handler_file_path,
@@ -884,17 +832,13 @@ def test_file_validating_invalid_header(
assert response.body == get_file_content(static_file_directory, file_name)
-@pytest.mark.parametrize(
- "file_name", ["test.file", "decode me.txt", "python.png"]
-)
+@pytest.mark.parametrize("file_name", ["test.file", "decode me.txt", "python.png"])
def test_file_validating_304_response(
app: Sanic, file_name: str, static_file_directory: str
):
@app.route("/files/", methods=["GET"])
def file_route(request: Request, filename: str):
- handler_file_path = (
- Path(static_file_directory) / unquote(filename)
- ).absolute()
+ handler_file_path = (Path(static_file_directory) / unquote(filename)).absolute()
return file(
handler_file_path,
@@ -914,9 +858,7 @@ def test_file_validating_304_response(
assert response.body == b""
-@pytest.mark.parametrize(
- "file_name", ["test.file", "decode me.txt", "python.png"]
-)
+@pytest.mark.parametrize("file_name", ["test.file", "decode me.txt", "python.png"])
def test_file_validating_304_response(
app: Sanic, file_name: str, static_file_directory: str
):
@@ -930,9 +872,7 @@ def test_file_validating_304_response(
_, response = app.test_client.get(
"/static",
headers={
- "if-modified-since": formatdate(
- last_modified.timestamp(), usegmt=True
- )
+ "if-modified-since": formatdate(last_modified.timestamp(), usegmt=True)
},
)
assert response.status == 304
diff --git a/tests/test_routes.py b/tests/test_routes.py
index e1ffe3cf..3877c200 100644
--- a/tests/test_routes.py
+++ b/tests/test_routes.py
@@ -163,9 +163,7 @@ def test_matching(path, headers, expected):
request = Request(path, headers, None, "GET", None, app)
try:
- app.router.get(
- request.path, request.method, request.headers.get("host")
- )
+ app.router.get(request.path, request.method, request.headers.get("host"))
except NotFound:
response = 404
except Exception:
@@ -686,9 +684,7 @@ def test_websocket_route_with_subprotocols(app, subprotocols, expected):
results = ws.subprotocol
assert ws.subprotocol is not None
- _, response = SanicTestClient(app).websocket(
- "/ws", subprotocols=subprotocols
- )
+ _, response = SanicTestClient(app).websocket("/ws", subprotocols=subprotocols)
assert response.opened is True
assert results == expected
@@ -1287,8 +1283,6 @@ async def test_duplicate_route_error(app):
async def handler_bar(request):
return text("...")
- message = (
- "Duplicate route names detected: test_duplicate_route_error.duped."
- )
+ message = "Duplicate route names detected: test_duplicate_route_error.duped."
with pytest.raises(ServerError, match=message):
await app._startup()
diff --git a/tests/test_server_events.py b/tests/test_server_events.py
index e88ea018..754ac352 100644
--- a/tests/test_server_events.py
+++ b/tests/test_server_events.py
@@ -108,9 +108,7 @@ async def test_trigger_before_events_create_server(app):
async def init_db(app, loop):
app.ctx.db = MySanicDb()
- srv = await app.create_server(
- debug=True, return_asyncio_server=True, port=PORT
- )
+ srv = await app.create_server(debug=True, return_asyncio_server=True, port=PORT)
await srv.startup()
await srv.before_start()
@@ -167,9 +165,7 @@ def test_create_server_trigger_events(app):
with closing(socket()) as sock:
sock.bind(("127.0.0.1", 0))
- serv_coro = app.create_server(
- return_asyncio_server=True, sock=sock, debug=True
- )
+ serv_coro = app.create_server(return_asyncio_server=True, sock=sock, debug=True)
serv_task = asyncio.ensure_future(serv_coro, loop=loop)
server = loop.run_until_complete(serv_task)
loop.run_until_complete(server.startup())
@@ -199,9 +195,7 @@ async def test_missing_startup_raises_exception(app):
async def init_db(app, loop):
...
- srv = await app.create_server(
- debug=True, return_asyncio_server=True, port=PORT
- )
+ srv = await app.create_server(debug=True, return_asyncio_server=True, port=PORT)
with pytest.raises(SanicException):
await srv.before_start()
diff --git a/tests/test_server_loop.py b/tests/test_server_loop.py
index 2026ae0d..ebfe190c 100644
--- a/tests/test_server_loop.py
+++ b/tests/test_server_loop.py
@@ -93,9 +93,7 @@ def test_sets_loop_policy_only_when_not_already_set(monkeypatch):
# Existing policy is not uvloop.EventLoopPolicy
get_event_loop_policy = Mock(return_value=None)
- monkeypatch.setattr(
- loop.asyncio, "get_event_loop_policy", get_event_loop_policy
- )
+ monkeypatch.setattr(loop.asyncio, "get_event_loop_policy", get_event_loop_policy)
with patch("asyncio.set_event_loop_policy") as set_event_loop_policy:
loop.try_use_uvloop()
@@ -106,9 +104,7 @@ def test_sets_loop_policy_only_when_not_already_set(monkeypatch):
# Existing policy is uvloop.EventLoopPolicy
get_event_loop_policy = Mock(return_value=policy)
- monkeypatch.setattr(
- loop.asyncio, "get_event_loop_policy", get_event_loop_policy
- )
+ monkeypatch.setattr(loop.asyncio, "get_event_loop_policy", get_event_loop_policy)
with patch("asyncio.set_event_loop_policy") as set_event_loop_policy:
loop.try_use_uvloop()
diff --git a/tests/test_signals.py b/tests/test_signals.py
index 3fa97923..fca40d5c 100644
--- a/tests/test_signals.py
+++ b/tests/test_signals.py
@@ -26,9 +26,7 @@ def test_add_signal_method_handler(app):
class TestSanic(Sanic):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
- self.add_signal(
- self.after_routing_signal_handler, "http.routing.after"
- )
+ self.add_signal(self.after_routing_signal_handler, "http.routing.after")
def after_routing_signal_handler(self, *args, **kwargs):
nonlocal counter
@@ -443,9 +441,7 @@ async def test_report_exception(app: Sanic):
registered_signal_handlers = [
handler
- for handler, *_ in app.signal_router.get(
- Event.SERVER_EXCEPTION_REPORT.value
- )
+ for handler, *_ in app.signal_router.get(Event.SERVER_EXCEPTION_REPORT.value)
]
assert catch_any_exception in registered_signal_handlers
diff --git a/tests/test_static.py b/tests/test_static.py
index 458feb32..4587b4cc 100644
--- a/tests/test_static.py
+++ b/tests/test_static.py
@@ -79,9 +79,7 @@ def hard_link(static_file_directory):
["test.file", "decode me.txt", "python.png", "symlink", "hard_link"],
)
def test_static_file(app, static_file_directory, file_name):
- app.static(
- "/testing.file", get_file_path(static_file_directory, file_name)
- )
+ app.static("/testing.file", get_file_path(static_file_directory, file_name))
request, response = app.test_client.get("/testing.file")
assert response.status == 200
@@ -239,9 +237,7 @@ def test_static_content_range_correct(app, file_name, static_file_directory):
assert response.status == 206
assert "Content-Length" in response.headers
assert "Content-Range" in response.headers
- static_content = bytes(get_file_content(static_file_directory, file_name))[
- 12:20
- ]
+ static_content = bytes(get_file_content(static_file_directory, file_name))[12:20]
assert int(response.headers["Content-Length"]) == len(static_content)
assert response.body == static_content
@@ -259,9 +255,7 @@ def test_static_content_range_front(app, file_name, static_file_directory):
assert response.status == 206
assert "Content-Length" in response.headers
assert "Content-Range" in response.headers
- static_content = bytes(get_file_content(static_file_directory, file_name))[
- 12:
- ]
+ static_content = bytes(get_file_content(static_file_directory, file_name))[12:]
assert int(response.headers["Content-Length"]) == len(static_content)
assert response.body == static_content
@@ -279,9 +273,7 @@ def test_static_content_range_back(app, file_name, static_file_directory):
assert response.status == 206
assert "Content-Length" in response.headers
assert "Content-Range" in response.headers
- static_content = bytes(get_file_content(static_file_directory, file_name))[
- -12:
- ]
+ static_content = bytes(get_file_content(static_file_directory, file_name))[-12:]
assert int(response.headers["Content-Length"]) == len(static_content)
assert response.body == static_content
@@ -305,9 +297,7 @@ def test_static_content_range_empty(
assert int(response.headers["Content-Length"]) == len(
get_file_content(static_file_directory, file_name)
)
- assert response.body == bytes(
- get_file_content(static_file_directory, file_name)
- )
+ assert response.body == bytes(get_file_content(static_file_directory, file_name))
@pytest.mark.parametrize("file_name", ["test.file", "decode me.txt"])
@@ -329,9 +319,7 @@ def test_static_content_range_error(app, file_name, static_file_directory):
@pytest.mark.parametrize("file_name", ["test.file", "decode me.txt"])
-def test_static_content_range_invalid_unit(
- app, file_name, static_file_directory
-):
+def test_static_content_range_invalid_unit(app, file_name, static_file_directory):
app.static(
"/testing.file",
get_file_path(static_file_directory, file_name),
@@ -347,9 +335,7 @@ def test_static_content_range_invalid_unit(
@pytest.mark.parametrize("file_name", ["test.file", "decode me.txt"])
-def test_static_content_range_invalid_start(
- app, file_name, static_file_directory
-):
+def test_static_content_range_invalid_start(app, file_name, static_file_directory):
app.static(
"/testing.file",
get_file_path(static_file_directory, file_name),
@@ -365,9 +351,7 @@ def test_static_content_range_invalid_start(
@pytest.mark.parametrize("file_name", ["test.file", "decode me.txt"])
-def test_static_content_range_invalid_end(
- app, file_name, static_file_directory
-):
+def test_static_content_range_invalid_end(app, file_name, static_file_directory):
app.static(
"/testing.file",
get_file_path(static_file_directory, file_name),
@@ -383,9 +367,7 @@ def test_static_content_range_invalid_end(
@pytest.mark.parametrize("file_name", ["test.file", "decode me.txt"])
-def test_static_content_range_invalid_parameters(
- app, file_name, static_file_directory
-):
+def test_static_content_range_invalid_parameters(app, file_name, static_file_directory):
app.static(
"/testing.file",
get_file_path(static_file_directory, file_name),
@@ -399,9 +381,7 @@ def test_static_content_range_invalid_parameters(
assert "Invalid for Content Range parameters" in response.text
-@pytest.mark.parametrize(
- "file_name", ["test.file", "decode me.txt", "python.png"]
-)
+@pytest.mark.parametrize("file_name", ["test.file", "decode me.txt", "python.png"])
def test_static_file_specified_host(app, static_file_directory, file_name):
app.static(
"/testing.file",
@@ -441,14 +421,10 @@ def test_static_stream_large_file(
assert response.body == get_file_content(static_file_directory, file_name)
-@pytest.mark.parametrize(
- "file_name", ["test.file", "decode me.txt", "python.png"]
-)
+@pytest.mark.parametrize("file_name", ["test.file", "decode me.txt", "python.png"])
def test_use_modified_since(app, static_file_directory, file_name):
file_stat = os.stat(get_file_path(static_file_directory, file_name))
- modified_since = strftime(
- "%a, %d %b %Y %H:%M:%S GMT", gmtime(file_stat.st_mtime)
- )
+ modified_since = strftime("%a, %d %b %Y %H:%M:%S GMT", gmtime(file_stat.st_mtime))
app.static(
"/testing.file",
@@ -547,32 +523,22 @@ async def test_multiple_statics_error(app, static_file_directory):
app.static("/file", get_file_path(static_file_directory, "test.file"))
app.static("/png", get_file_path(static_file_directory, "python.png"))
- message = (
- r"Duplicate route names detected: test_multiple_statics_error\.static"
- )
+ message = r"Duplicate route names detected: test_multiple_statics_error\.static"
with pytest.raises(ServerError, match=message):
await app._startup()
def test_multiple_statics(app, static_file_directory):
- app.static(
- "/file", get_file_path(static_file_directory, "test.file"), name="file"
- )
- app.static(
- "/png", get_file_path(static_file_directory, "python.png"), name="png"
- )
+ app.static("/file", get_file_path(static_file_directory, "test.file"), name="file")
+ app.static("/png", get_file_path(static_file_directory, "python.png"), name="png")
_, response = app.test_client.get("/file")
assert response.status == 200
- assert response.body == get_file_content(
- static_file_directory, "test.file"
- )
+ assert response.body == get_file_content(static_file_directory, "test.file")
_, response = app.test_client.get("/png")
assert response.status == 200
- assert response.body == get_file_content(
- static_file_directory, "python.png"
- )
+ assert response.body == get_file_content(static_file_directory, "python.png")
@pytest.mark.asyncio
@@ -580,25 +546,23 @@ async def test_resource_type_default_error(app, static_file_directory):
app.static("/static", static_file_directory)
app.static("/file", get_file_path(static_file_directory, "test.file"))
- message = r"Duplicate route names detected: test_resource_type_default_error\.static"
+ message = (
+ r"Duplicate route names detected: test_resource_type_default_error\.static"
+ )
with pytest.raises(ServerError, match=message):
await app._startup()
def test_resource_type_default(app, static_file_directory):
app.static("/static", static_file_directory, name="static")
- app.static(
- "/file", get_file_path(static_file_directory, "test.file"), name="file"
- )
+ app.static("/file", get_file_path(static_file_directory, "test.file"), name="file")
_, response = app.test_client.get("/static")
assert response.status == 404
_, response = app.test_client.get("/file")
assert response.status == 200
- assert response.body == get_file_content(
- static_file_directory, "test.file"
- )
+ assert response.body == get_file_content(static_file_directory, "test.file")
def test_resource_type_file(app, static_file_directory):
@@ -610,9 +574,7 @@ def test_resource_type_file(app, static_file_directory):
_, response = app.test_client.get("/file")
assert response.status == 200
- assert response.body == get_file_content(
- static_file_directory, "test.file"
- )
+ assert response.body == get_file_content(static_file_directory, "test.file")
with pytest.raises(TypeError):
app.static("/static", static_file_directory, resource_type="file")
@@ -623,9 +585,7 @@ def test_resource_type_dir(app, static_file_directory):
_, response = app.test_client.get("/static/test.file")
assert response.status == 200
- assert response.body == get_file_content(
- static_file_directory, "test.file"
- )
+ assert response.body == get_file_content(static_file_directory, "test.file")
with pytest.raises(TypeError):
app.static(
@@ -666,12 +626,8 @@ def test_breakout(app: Sanic, static_file_directory: str):
assert response.status == 404
-@pytest.mark.skipif(
- sys.platform != "win32", reason="Block backslash on Windows only"
-)
-def test_double_backslash_prohibited_on_win32(
- app: Sanic, static_file_directory: str
-):
+@pytest.mark.skipif(sys.platform != "win32", reason="Block backslash on Windows only")
+def test_double_backslash_prohibited_on_win32(app: Sanic, static_file_directory: str):
app.static("/foo", static_file_directory)
_, response = app.test_client.get("/foo/static/..\\static/test.file")
diff --git a/tests/test_static_directory.py b/tests/test_static_directory.py
index 81592f45..08ccb492 100644
--- a/tests/test_static_directory.py
+++ b/tests/test_static_directory.py
@@ -31,9 +31,7 @@ def test_static_index_single(app: Sanic, static_file_directory: str):
_, response = app.test_client.get("/static/")
assert response.status == 200
- assert response.body == get_file_content(
- static_file_directory, "test.html"
- )
+ assert response.body == get_file_content(static_file_directory, "test.html")
assert response.headers["Content-Type"] == "text/html"
@@ -53,15 +51,11 @@ def test_static_index_multiple(app: Sanic, static_file_directory: str):
_, response = app.test_client.get("/static/")
assert response.status == 200
- assert response.body == get_file_content(
- static_file_directory, "test.html"
- )
+ assert response.body == get_file_content(static_file_directory, "test.html")
assert response.headers["Content-Type"] == "text/html"
-def test_static_directory_view_and_index(
- app: Sanic, static_file_directory: str
-):
+def test_static_directory_view_and_index(app: Sanic, static_file_directory: str):
app.static(
"/static",
static_file_directory,
diff --git a/tests/test_tls.py b/tests/test_tls.py
index e8050e26..4b04c986 100644
--- a/tests/test_tls.py
+++ b/tests/test_tls.py
@@ -111,9 +111,7 @@ def replace_server_name(hostname):
server_hostname=None,
session=None,
):
- return orig_wrap_bio(
- self, incoming, outgoing, server_side, hostname, session
- )
+ return orig_wrap_bio(self, incoming, outgoing, server_side, hostname, session)
orig_wrap_bio, ssl.SSLContext.wrap_bio = (
ssl.SSLContext.wrap_bio,
@@ -462,9 +460,7 @@ def test_logger_vhosts(caplog):
single_process=True,
)
- logmsg = [
- m for s, l, m in caplog.record_tuples if m.startswith("Certificate")
- ][0]
+ logmsg = [m for s, l, m in caplog.record_tuples if m.startswith("Certificate")][0]
assert logmsg == (
"Certificate vhosts: localhost, 127.0.0.1, 0:0:0:0:0:0:0:1, "
@@ -495,9 +491,7 @@ def test_mk_cert_creator_is_not_supported(app):
cert_creator = MkcertCreator(app, _default, _default)
with patch("subprocess.run") as run:
run.side_effect = Exception("")
- with pytest.raises(
- SanicException, match="Sanic is attempting to use mkcert"
- ):
+ with pytest.raises(SanicException, match="Sanic is attempting to use mkcert"):
cert_creator.check_supported()
@@ -535,9 +529,7 @@ def test_trustme_creator_is_supported(app, monkeypatch):
def test_trustme_creator_is_not_supported(app, monkeypatch):
monkeypatch.setattr(sanic.http.tls.creators, "TRUSTME_INSTALLED", False)
cert_creator = TrustmeCreator(app, _default, _default)
- with pytest.raises(
- SanicException, match="Sanic is attempting to use trustme"
- ):
+ with pytest.raises(SanicException, match="Sanic is attempting to use trustme"):
cert_creator.check_supported()
@@ -623,12 +615,8 @@ def test_get_ssl_context_only_mkcert(
):
app.state.mode = Mode.DEBUG
app.config.LOCAL_CERT_CREATOR = requirement
- monkeypatch.setattr(
- sanic.http.tls.creators, "MkcertCreator", MockMkcertCreator
- )
- monkeypatch.setattr(
- sanic.http.tls.creators, "TrustmeCreator", MockTrustmeCreator
- )
+ monkeypatch.setattr(sanic.http.tls.creators, "MkcertCreator", MockMkcertCreator)
+ monkeypatch.setattr(sanic.http.tls.creators, "TrustmeCreator", MockTrustmeCreator)
MockMkcertCreator.SUPPORTED = mk_supported
MockTrustmeCreator.SUPPORTED = trustme_supported
diff --git a/tests/test_unix_socket.py b/tests/test_unix_socket.py
index 1dd90a52..c56edb5a 100644
--- a/tests/test_unix_socket.py
+++ b/tests/test_unix_socket.py
@@ -23,9 +23,7 @@ from sanic.response import text
pytestmark = pytest.mark.skipif(os.name != "posix", reason="UNIX only")
SOCKPATH = "/tmp/sanictest.sock"
SOCKPATH2 = "/tmp/sanictest2.sock"
-httpx_version = tuple(
- map(int, httpx.__version__.strip(ascii_lowercase).split("."))
-)
+httpx_version = tuple(map(int, httpx.__version__.strip(ascii_lowercase).split(".")))
@pytest.fixture(autouse=True)
diff --git a/tests/test_url_building.py b/tests/test_url_building.py
index 4e1c6ac9..e3a9c83a 100644
--- a/tests/test_url_building.py
+++ b/tests/test_url_building.py
@@ -35,9 +35,7 @@ URL_FOR_VALUE4 = f"http://{test_host}:{test_port}/myurl?arg1=v1#anchor"
def _generate_handlers_from_names(app, l):
for name in l:
# this is the easiest way to generate functions with dynamic names
- exec(
- f'@app.route(name)\ndef {name}(request):\n\treturn text("{name}")'
- )
+ exec(f'@app.route(name)\ndef {name}(request):\n\treturn text("{name}")')
@pytest.fixture
diff --git a/tests/test_url_for.py b/tests/test_url_for.py
index c27ca749..3c44fb5c 100644
--- a/tests/test_url_for.py
+++ b/tests/test_url_for.py
@@ -15,10 +15,7 @@ def test_routes_with_host(app):
assert app.url_for("hostindex") == "/"
assert app.url_for("hostpath") == "/path"
assert app.url_for("hostindex", _external=True) == "http://example.com/"
- assert (
- app.url_for("hostpath", _external=True)
- == "http://path.example.com/path"
- )
+ assert app.url_for("hostpath", _external=True) == "http://path.example.com/path"
def test_routes_with_multiple_hosts(app):
@@ -27,9 +24,7 @@ def test_routes_with_multiple_hosts(app):
pass
assert app.url_for("hostindex") == "/"
- assert (
- app.url_for("hostindex", _host="example.com") == "http://example.com/"
- )
+ assert app.url_for("hostindex", _host="example.com") == "http://example.com/"
with pytest.raises(ValueError) as e:
assert app.url_for("hostindex", _external=True)
diff --git a/tests/test_url_for_static.py b/tests/test_url_for_static.py
index bc63cb90..4adcfb77 100644
--- a/tests/test_url_for_static.py
+++ b/tests/test_url_for_static.py
@@ -36,9 +36,7 @@ def get_file_content(static_file_directory, file_name):
)
def test_static_file(static_file_directory, file_name):
app = Sanic("qq")
- app.static(
- "/testing.file", get_file_path(static_file_directory, file_name)
- )
+ app.static("/testing.file", get_file_path(static_file_directory, file_name))
app.static(
"/testing2.file",
get_file_path(static_file_directory, file_name),
@@ -155,16 +153,10 @@ def test_static_directory(file_name, base_uri, static_file_directory):
app.router.reset()
app.blueprint(bp)
- uri = app.url_for(
- "static", name="test_bp_static.static", filename=file_name
- )
- uri2 = app.url_for(
- "static", name="test_bp_static.static", filename="/" + file_name
- )
+ uri = app.url_for("static", name="test_bp_static.static", filename=file_name)
+ uri2 = app.url_for("static", name="test_bp_static.static", filename="/" + file_name)
- uri4 = app.url_for(
- "static", name="test_bp_static.uploads", filename=file_name
- )
+ uri4 = app.url_for("static", name="test_bp_static.uploads", filename=file_name)
uri5 = app.url_for(
"static", name="test_bp_static.uploads", filename="/" + file_name
)
@@ -213,9 +205,7 @@ def test_static_head_request(file_name, static_file_directory):
# blueprint
uri = app.url_for("static", name="test_bp_static.static")
assert uri == "/bp/testing.file"
- assert uri == app.url_for(
- "static", name="test_bp_static.static", filename="any"
- )
+ assert uri == app.url_for("static", name="test_bp_static.static", filename="any")
request, response = app.test_client.head(uri)
assert response.status == 200
@@ -253,27 +243,21 @@ def test_static_content_range_correct(file_name, static_file_directory):
assert response.status == 206
assert "Content-Length" in response.headers
assert "Content-Range" in response.headers
- static_content = bytes(get_file_content(static_file_directory, file_name))[
- 12:20
- ]
+ static_content = bytes(get_file_content(static_file_directory, file_name))[12:20]
assert int(response.headers["Content-Length"]) == len(static_content)
assert response.body == static_content
# blueprint
uri = app.url_for("static", name="test_bp_static.static")
assert uri == "/bp/testing.file"
- assert uri == app.url_for(
- "static", name="test_bp_static.static", filename="any"
- )
+ assert uri == app.url_for("static", name="test_bp_static.static", filename="any")
assert uri == app.url_for("test_bp_static.static")
request, response = app.test_client.get(uri, headers=headers)
assert response.status == 206
assert "Content-Length" in response.headers
assert "Content-Range" in response.headers
- static_content = bytes(get_file_content(static_file_directory, file_name))[
- 12:20
- ]
+ static_content = bytes(get_file_content(static_file_directory, file_name))[12:20]
assert int(response.headers["Content-Length"]) == len(static_content)
assert response.body == static_content
@@ -305,18 +289,14 @@ def test_static_content_range_front(file_name, static_file_directory):
assert response.status == 206
assert "Content-Length" in response.headers
assert "Content-Range" in response.headers
- static_content = bytes(get_file_content(static_file_directory, file_name))[
- 12:
- ]
+ static_content = bytes(get_file_content(static_file_directory, file_name))[12:]
assert int(response.headers["Content-Length"]) == len(static_content)
assert response.body == static_content
# blueprint
uri = app.url_for("static", name="test_bp_static.static")
assert uri == "/bp/testing.file"
- assert uri == app.url_for(
- "static", name="test_bp_static.static", filename="any"
- )
+ assert uri == app.url_for("static", name="test_bp_static.static", filename="any")
assert uri == app.url_for("test_bp_static.static")
assert uri == app.url_for("test_bp_static.static", filename="any")
@@ -324,9 +304,7 @@ def test_static_content_range_front(file_name, static_file_directory):
assert response.status == 206
assert "Content-Length" in response.headers
assert "Content-Range" in response.headers
- static_content = bytes(get_file_content(static_file_directory, file_name))[
- 12:
- ]
+ static_content = bytes(get_file_content(static_file_directory, file_name))[12:]
assert int(response.headers["Content-Length"]) == len(static_content)
assert response.body == static_content
@@ -358,18 +336,14 @@ def test_static_content_range_back(file_name, static_file_directory):
assert response.status == 206
assert "Content-Length" in response.headers
assert "Content-Range" in response.headers
- static_content = bytes(get_file_content(static_file_directory, file_name))[
- -12:
- ]
+ static_content = bytes(get_file_content(static_file_directory, file_name))[-12:]
assert int(response.headers["Content-Length"]) == len(static_content)
assert response.body == static_content
# blueprint
uri = app.url_for("static", name="test_bp_static.static")
assert uri == "/bp/testing.file"
- assert uri == app.url_for(
- "static", name="test_bp_static.static", filename="any"
- )
+ assert uri == app.url_for("static", name="test_bp_static.static", filename="any")
assert uri == app.url_for("test_bp_static.static")
assert uri == app.url_for("test_bp_static.static", filename="any")
@@ -377,9 +351,7 @@ def test_static_content_range_back(file_name, static_file_directory):
assert response.status == 206
assert "Content-Length" in response.headers
assert "Content-Range" in response.headers
- static_content = bytes(get_file_content(static_file_directory, file_name))[
- -12:
- ]
+ static_content = bytes(get_file_content(static_file_directory, file_name))[-12:]
assert int(response.headers["Content-Length"]) == len(static_content)
assert response.body == static_content
@@ -413,16 +385,12 @@ def test_static_content_range_empty(file_name, static_file_directory):
assert int(response.headers["Content-Length"]) == len(
get_file_content(static_file_directory, file_name)
)
- assert response.body == bytes(
- get_file_content(static_file_directory, file_name)
- )
+ assert response.body == bytes(get_file_content(static_file_directory, file_name))
# blueprint
uri = app.url_for("static", name="test_bp_static.static")
assert uri == "/bp/testing.file"
- assert uri == app.url_for(
- "static", name="test_bp_static.static", filename="any"
- )
+ assert uri == app.url_for("static", name="test_bp_static.static", filename="any")
assert uri == app.url_for("test_bp_static.static")
assert uri == app.url_for("test_bp_static.static", filename="any")
@@ -433,9 +401,7 @@ def test_static_content_range_empty(file_name, static_file_directory):
assert int(response.headers["Content-Length"]) == len(
get_file_content(static_file_directory, file_name)
)
- assert response.body == bytes(
- get_file_content(static_file_directory, file_name)
- )
+ assert response.body == bytes(get_file_content(static_file_directory, file_name))
@pytest.mark.parametrize("file_name", ["test.file", "decode me.txt"])
@@ -472,9 +438,7 @@ def test_static_content_range_error(app, file_name, static_file_directory):
# blueprint
uri = app.url_for("static", name="test_bp_static.static")
assert uri == "/bp/testing.file"
- assert uri == app.url_for(
- "static", name="test_bp_static.static", filename="any"
- )
+ assert uri == app.url_for("static", name="test_bp_static.static", filename="any")
assert uri == app.url_for("test_bp_static.static")
assert uri == app.url_for("test_bp_static.static", filename="any")
diff --git a/tests/test_ws_handlers.py b/tests/test_ws_handlers.py
index 81681d0f..87ac06e9 100644
--- a/tests/test_ws_handlers.py
+++ b/tests/test_ws_handlers.py
@@ -5,9 +5,7 @@ from websockets.client import WebSocketClientProtocol
from sanic import Request, Sanic, Websocket
-MimicClientType = Callable[
- [WebSocketClientProtocol], Coroutine[None, None, Any]
-]
+MimicClientType = Callable[[WebSocketClientProtocol], Coroutine[None, None, Any]]
@pytest.fixture
@@ -31,9 +29,7 @@ def test_ws_handler(
msg = await ws.recv()
await ws.send(msg)
- _, ws_proxy = app.test_client.websocket(
- "/ws", mimic=simple_ws_mimic_client
- )
+ _, ws_proxy = app.test_client.websocket("/ws", mimic=simple_ws_mimic_client)
assert ws_proxy.client_sent == ["test 1", "test 2", ""]
assert ws_proxy.client_received == ["test 1", "test 2"]
@@ -47,8 +43,6 @@ def test_ws_handler_async_for(
async for msg in ws:
await ws.send(msg)
- _, ws_proxy = app.test_client.websocket(
- "/ws", mimic=simple_ws_mimic_client
- )
+ _, ws_proxy = app.test_client.websocket("/ws", mimic=simple_ws_mimic_client)
assert ws_proxy.client_sent == ["test 1", "test 2", ""]
assert ws_proxy.client_received == ["test 1", "test 2"]
diff --git a/tests/typing/samples/request_fully_custom.py b/tests/typing/samples/request_fully_custom.py
index e2ec4b31..e094d68c 100644
--- a/tests/typing/samples/request_fully_custom.py
+++ b/tests/typing/samples/request_fully_custom.py
@@ -22,9 +22,7 @@ class CustomRequest(Request[Sanic[CustomConfig, Foo], RequestContext]):
return ctx
-app = Sanic(
- "test", config=CustomConfig(), ctx=Foo(), request_class=CustomRequest
-)
+app = Sanic("test", config=CustomConfig(), ctx=Foo(), request_class=CustomRequest)
@app.get("/")
diff --git a/tests/typing/test_typing.py b/tests/typing/test_typing.py
index 77e106c1..424b5163 100644
--- a/tests/typing/test_typing.py
+++ b/tests/typing/test_typing.py
@@ -92,9 +92,7 @@ def run_check(path_location: str) -> str:
),
),
)
-def test_check_app_default(
- path_location: str, expected: List[Tuple[str, int]]
-) -> None:
+def test_check_app_default(path_location: str, expected: List[Tuple[str, int]]) -> None:
output = run_check(f"samples/{path_location}")
for text, number in expected:
diff --git a/tests/worker/test_inspector.py b/tests/worker/test_inspector.py
index 32b65785..cf06c2cb 100644
--- a/tests/worker/test_inspector.py
+++ b/tests/worker/test_inspector.py
@@ -127,9 +127,9 @@ def test_state_to_json():
def test_run_inspector_authentication():
- inspector = Inspector(
- Mock(), {}, {}, "", 0, "super-secret", Default(), Default()
- )(False)
+ inspector = Inspector(Mock(), {}, {}, "", 0, "super-secret", Default(), Default())(
+ False
+ )
manager = TestManager(inspector.app)
_, response = manager.test_client.get("/")
assert response.status == 401
diff --git a/tests/worker/test_manager.py b/tests/worker/test_manager.py
index bc50ad87..4753b07d 100644
--- a/tests/worker/test_manager.py
+++ b/tests/worker/test_manager.py
@@ -62,9 +62,7 @@ def test_kill(os_mock: Mock):
@patch("sanic.worker.process.os")
@patch("sanic.worker.manager.os")
-def test_shutdown_signal_send_kill(
- manager_os_mock: Mock, process_os_mock: Mock
-):
+def test_shutdown_signal_send_kill(manager_os_mock: Mock, process_os_mock: Mock):
process = Mock()
process.pid = 1234
context = Mock()
@@ -124,9 +122,7 @@ def test_monitor_all(zero_downtime):
p2 = Mock()
sub = Mock()
incoming = (
- "__ALL_PROCESSES__::STARTUP_FIRST"
- if zero_downtime
- else "__ALL_PROCESSES__:"
+ "__ALL_PROCESSES__::STARTUP_FIRST" if zero_downtime else "__ALL_PROCESSES__:"
)
sub.recv.side_effect = [incoming, ""]
context = Mock()
@@ -137,9 +133,7 @@ def test_monitor_all(zero_downtime):
manager.monitor()
restart_order = (
- RestartOrder.STARTUP_FIRST
- if zero_downtime
- else RestartOrder.SHUTDOWN_FIRST
+ RestartOrder.STARTUP_FIRST if zero_downtime else RestartOrder.SHUTDOWN_FIRST
)
manager.restart.assert_called_once_with(
process_names=None,
@@ -167,9 +161,7 @@ def test_monitor_all_with_files(zero_downtime):
manager.monitor()
restart_order = (
- RestartOrder.STARTUP_FIRST
- if zero_downtime
- else RestartOrder.SHUTDOWN_FIRST
+ RestartOrder.STARTUP_FIRST if zero_downtime else RestartOrder.SHUTDOWN_FIRST
)
manager.restart.assert_called_once_with(
process_names=None,
@@ -185,9 +177,7 @@ def test_monitor_one_process(zero_downtime):
p2 = Mock()
sub = Mock()
incoming = (
- f"{p1.name}:foo,bar:STARTUP_FIRST"
- if zero_downtime
- else f"{p1.name}:foo,bar"
+ f"{p1.name}:foo,bar:STARTUP_FIRST" if zero_downtime else f"{p1.name}:foo,bar"
)
sub.recv.side_effect = [incoming, ""]
context = Mock()
@@ -198,9 +188,7 @@ def test_monitor_one_process(zero_downtime):
manager.monitor()
restart_order = (
- RestartOrder.STARTUP_FIRST
- if zero_downtime
- else RestartOrder.SHUTDOWN_FIRST
+ RestartOrder.STARTUP_FIRST if zero_downtime else RestartOrder.SHUTDOWN_FIRST
)
manager.restart.assert_called_once_with(
process_names=[p1.name],
diff --git a/tests/worker/test_reloader.py b/tests/worker/test_reloader.py
index 6f441b5e..b7a27878 100644
--- a/tests/worker/test_reloader.py
+++ b/tests/worker/test_reloader.py
@@ -154,9 +154,7 @@ def test_reload_delayed(monkeypatch):
monkeypatch.setattr(threading.Thread, "start", orig)
-def test_reloader_triggers_start_stop_listeners(
- app: Sanic, app_loader: AppLoader
-):
+def test_reloader_triggers_start_stop_listeners(app: Sanic, app_loader: AppLoader):
results = []
@app.reload_process_start
diff --git a/tests/worker/test_state.py b/tests/worker/test_state.py
index 7d7c6bf6..d934e8c3 100644
--- a/tests/worker/test_state.py
+++ b/tests/worker/test_state.py
@@ -43,21 +43,15 @@ def test_state_eq():
def test_state_keys():
- assert list(gen_state(one=1, two=2).keys()) == list(
- {"one": 1, "two": 2}.keys()
- )
+ assert list(gen_state(one=1, two=2).keys()) == list({"one": 1, "two": 2}.keys())
def test_state_values():
- assert list(gen_state(one=1, two=2).values()) == list(
- {"one": 1, "two": 2}.values()
- )
+ assert list(gen_state(one=1, two=2).values()) == list({"one": 1, "two": 2}.values())
def test_state_items():
- assert list(gen_state(one=1, two=2).items()) == list(
- {"one": 1, "two": 2}.items()
- )
+ assert list(gen_state(one=1, two=2).items()) == list({"one": 1, "two": 2}.items())
def test_state_update():
diff --git a/tests/worker/test_worker_serve.py b/tests/worker/test_worker_serve.py
index 5cee5408..3d8dd8fb 100644
--- a/tests/worker/test_worker_serve.py
+++ b/tests/worker/test_worker_serve.py
@@ -66,9 +66,7 @@ def test_has_multiplexer(app: Sanic):
Sanic.register_app(app)
with patch("sanic.worker.serve._serve_http_1"):
- worker_serve(
- **args(app, monitor_publisher=Mock(), worker_state=Mock())
- )
+ worker_serve(**args(app, monitor_publisher=Mock(), worker_state=Mock()))
assert isinstance(app.multiplexer, WorkerMultiplexer)
del environ["SANIC_WORKER_NAME"]
@@ -102,9 +100,7 @@ def test_serve_app_factory(wm: Mock, mock_app):
@patch("sanic.mixins.startup.WorkerManager")
@pytest.mark.parametrize("config", (True, False))
-def test_serve_with_inspector(
- WorkerManager: Mock, mock_app: Mock, config: bool
-):
+def test_serve_with_inspector(WorkerManager: Mock, mock_app: Mock, config: bool):
Inspector = Mock()
mock_app.config.INSPECTOR = config
mock_app.inspector_class = Inspector