Rejigging async jobs
This commit is contained in:
1 parent
2a0b8fcab2
commit
2e7976e382
7 files changed
+225
-86
No files matched your search
+45
-33
@@ -1511,13 +1511,12 @@ async def upload_scope_import(
|
||||
data = await file.read()
|
||||
actor_id = actor.id
|
||||
|
||||
async def _run(job: jobs.Job) -> None:
|
||||
async def _run(job_id: str) -> None:
|
||||
async with AsyncSessionLocal() as db:
|
||||
try:
|
||||
result = await scope_import_service.import_from_bytes(db, data)
|
||||
except Exception as exc: # noqa: BLE001
|
||||
job.status = "error"
|
||||
job.message = f"Could not read spreadsheet: {exc}"
|
||||
await jobs.mark_error(job_id, f"Could not read spreadsheet: {exc}")
|
||||
return
|
||||
actor_row = await user_crud.get(db, actor_id)
|
||||
await audit_crud.log(
|
||||
@@ -1532,10 +1531,16 @@ async def upload_scope_import(
|
||||
f"{result.errors} errors"
|
||||
),
|
||||
)
|
||||
job.status = "done"
|
||||
job.result = result
|
||||
await jobs.mark_done(
|
||||
job_id,
|
||||
message=(
|
||||
f"Scope import complete: {result.created} created, "
|
||||
f"{result.updated} updated."
|
||||
),
|
||||
result=result.model_dump(mode="json"),
|
||||
)
|
||||
|
||||
job = jobs.start("scope_import", _run)
|
||||
job = await jobs.start("scope_import", _run)
|
||||
return templates.TemplateResponse(
|
||||
request, "admin/_job_progress.html", _scope_import_progress_ctx(job)
|
||||
)
|
||||
@@ -1545,9 +1550,10 @@ async def upload_scope_import(
|
||||
async def scope_import_job_status(
|
||||
request: Request,
|
||||
job_id: str,
|
||||
db: AsyncSession = Depends(get_db),
|
||||
_: User = Depends(web_require("augmented_parts:write")),
|
||||
):
|
||||
job = jobs.get(job_id)
|
||||
job = await jobs.get(db, job_id)
|
||||
if job is None:
|
||||
return templates.TemplateResponse(
|
||||
request,
|
||||
@@ -1718,13 +1724,12 @@ async def sync_augmented_parts(
|
||||
):
|
||||
actor_id = actor.id
|
||||
|
||||
async def _run(job: jobs.Job) -> None:
|
||||
async def _run(job_id: str) -> None:
|
||||
async with AsyncSessionLocal() as db:
|
||||
try:
|
||||
result = await augmented_part_sync_service.sync(db)
|
||||
except Exception as exc:
|
||||
job.status = "error"
|
||||
job.message = f"Sync failed: {exc}"
|
||||
await jobs.mark_error(job_id, f"Sync failed: {exc}")
|
||||
return
|
||||
actor_row = await user_crud.get(db, actor_id)
|
||||
await audit_crud.log(
|
||||
@@ -1738,18 +1743,21 @@ async def sync_augmented_parts(
|
||||
f"{result.skipped} skipped (no type match)"
|
||||
),
|
||||
)
|
||||
job.status = "done"
|
||||
job.message = (
|
||||
f"Sync complete: {result.created} created, {result.deleted} deleted"
|
||||
+ (
|
||||
f", {result.skipped} skipped (type not recognised)"
|
||||
if result.skipped
|
||||
else ""
|
||||
)
|
||||
+ "."
|
||||
await jobs.mark_done(
|
||||
job_id,
|
||||
message=(
|
||||
f"Sync complete: {result.created} created, "
|
||||
f"{result.deleted} deleted"
|
||||
+ (
|
||||
f", {result.skipped} skipped (type not recognised)"
|
||||
if result.skipped
|
||||
else ""
|
||||
)
|
||||
+ "."
|
||||
),
|
||||
)
|
||||
|
||||
job = jobs.start("augmented_part_sync", _run)
|
||||
job = await jobs.start("augmented_part_sync", _run)
|
||||
return templates.TemplateResponse(
|
||||
request,
|
||||
"admin/_job_progress.html",
|
||||
@@ -1768,7 +1776,7 @@ async def augmented_parts_sync_job_status(
|
||||
db: AsyncSession = Depends(get_db),
|
||||
_: User = Depends(web_require("augmented_parts:write")),
|
||||
):
|
||||
job = jobs.get(job_id)
|
||||
job = await jobs.get(db, job_id)
|
||||
if job is None:
|
||||
form_ctx = await _augmented_part_form_ctx(db)
|
||||
return templates.TemplateResponse(
|
||||
@@ -2483,7 +2491,7 @@ async def recompute_augmented_part_fits(
|
||||
):
|
||||
actor_id = actor.id
|
||||
|
||||
async def _run(job: jobs.Job) -> None:
|
||||
async def _run(job_id: str) -> None:
|
||||
async with AsyncSessionLocal() as db:
|
||||
result = await fit_matching_service.recompute_for_part(
|
||||
db, augmented_part_id
|
||||
@@ -2500,10 +2508,11 @@ async def recompute_augmented_part_fits(
|
||||
f"{result.created} created, {result.removed} removed"
|
||||
),
|
||||
)
|
||||
job.status = "done"
|
||||
job.message = f"{result.created} created, {result.removed} removed."
|
||||
await jobs.mark_done(
|
||||
job_id, f"{result.created} created, {result.removed} removed."
|
||||
)
|
||||
|
||||
job = jobs.start("fit_recompute_part", _run)
|
||||
job = await jobs.start("fit_recompute_part", _run)
|
||||
return templates.TemplateResponse(
|
||||
request,
|
||||
"admin/_job_progress.html",
|
||||
@@ -2527,7 +2536,7 @@ async def augmented_part_fits_recompute_job_status(
|
||||
db: AsyncSession = Depends(get_db),
|
||||
actor: User = Depends(web_require("fits:write")),
|
||||
):
|
||||
job = jobs.get(job_id)
|
||||
job = await jobs.get(db, job_id)
|
||||
if job is None:
|
||||
ctx = await _augmented_part_fits_ctx(
|
||||
db,
|
||||
@@ -2774,7 +2783,7 @@ async def recompute_all_fits(
|
||||
):
|
||||
actor_id = actor.id
|
||||
|
||||
async def _run(job: jobs.Job) -> None:
|
||||
async def _run(job_id: str) -> None:
|
||||
async with AsyncSessionLocal() as db:
|
||||
result = await fit_matching_service.recompute_all(db)
|
||||
actor_row = await user_crud.get(db, actor_id)
|
||||
@@ -2789,13 +2798,15 @@ async def recompute_all_fits(
|
||||
f"{result.removed} removed"
|
||||
),
|
||||
)
|
||||
job.status = "done"
|
||||
job.message = (
|
||||
f"Recompute complete: {result.created} created, "
|
||||
f"{result.removed} removed."
|
||||
await jobs.mark_done(
|
||||
job_id,
|
||||
message=(
|
||||
f"Recompute complete: {result.created} created, "
|
||||
f"{result.removed} removed."
|
||||
),
|
||||
)
|
||||
|
||||
job = jobs.start("fit_recompute_all", _run)
|
||||
job = await jobs.start("fit_recompute_all", _run)
|
||||
return templates.TemplateResponse(
|
||||
request,
|
||||
"admin/_job_progress_inline.html",
|
||||
@@ -2813,9 +2824,10 @@ async def recompute_all_fits(
|
||||
async def recompute_all_fits_job_status(
|
||||
request: Request,
|
||||
job_id: str,
|
||||
db: AsyncSession = Depends(get_db),
|
||||
_: User = Depends(web_require("fits:write")),
|
||||
):
|
||||
job = jobs.get(job_id)
|
||||
job = await jobs.get(db, job_id)
|
||||
if job is None:
|
||||
return HTMLResponse("Recompute job not found — it may have expired.")
|
||||
if job.status == "running":
|
||||
|
||||
Reference in new issue
Block a user