Skip to content

Commit dce4278

Browse files
committed
Handle case when multiple people are viewing scan status page at once
1 parent 40574de commit dce4278

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

src/sanescansrv/htmlgen.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from typing import TYPE_CHECKING, Union
66

7-
if TYPE_CHECKING:
7+
if TYPE_CHECKING: # pragma: nocover
88
from collections.abc import Generator, Iterable
99

1010

src/sanescansrv/server.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,6 @@ async def scan_status_get() -> AsyncIterator[str] | WerkzeugResponse:
420420

421421
if status == ScanStatus.DONE:
422422
filename = data[0]
423-
APP_STORAGE["scan_status"] = None
424423
return app.redirect(f"/{filename}")
425424

426425
progress: ScanProgress | None = None
@@ -472,9 +471,9 @@ async def root_get() -> AsyncIterator[str]:
472471
)
473472

474473

475-
@app.post("/")
474+
@app.post("/") # type: ignore[type-var]
476475
@pretty_exception
477-
async def root_post() -> WerkzeugResponse:
476+
async def root_post() -> WerkzeugResponse | AsyncIterator[str]:
478477
"""Handle page POST."""
479478
multi_dict = await request.form
480479
data = multi_dict.to_dict()
@@ -488,6 +487,18 @@ async def root_post() -> WerkzeugResponse:
488487
if device == "none":
489488
return app.redirect("/scanners")
490489

490+
raw_status = APP_STORAGE.get("scan_status")
491+
492+
if raw_status is not None:
493+
status, *_data = raw_status
494+
if status != ScanStatus.DONE:
495+
return await send_error(
496+
"Scan Already Currently Running",
497+
"There is a scan request already running. Please wait for the previous scan to complete.",
498+
return_link="/scan-status",
499+
)
500+
APP_STORAGE["scan_status"] = None
501+
491502
nursery: trio.Nursery | None = APP_STORAGE.get("nursery")
492503
assert isinstance(nursery, trio.Nursery), "Must be nursery"
493504

@@ -497,6 +508,7 @@ async def root_post() -> WerkzeugResponse:
497508

498509

499510
@app.get("/update_scanners")
511+
@pretty_exception
500512
async def update_scanners_get() -> WerkzeugResponse:
501513
"""Update scanners get handling."""
502514
APP_STORAGE["scanners"] = get_devices()

tests/test_htmlgen.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,3 +616,7 @@ def test_jinja_extends_path() -> None:
616616

617617
def test_jinja_super_block() -> None:
618618
assert htmlgen.jinja_super_block() == "{{ super() }}"
619+
620+
621+
def test_jinja_number_plural() -> None:
622+
assert htmlgen.jinja_number_plural(3, "second") == "second{% if 3 > 1 %}s{% elif 3 == 0 %}s{% endif %}"

0 commit comments

Comments
 (0)