feat(FastAPI): add /pkgbase/{name}/delete (get, post)

In addition, we've had to add cascade arguments to backref so
sqlalchemy treats the relationships as proper cascades.

Furthermore, our pkgbase actions template was not rendering
actions properly based on TU credentials.

Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
Kevin Morris 2021-10-06 13:54:14 -07:00
parent 4e7d2295da
commit d38abd7832
No known key found for this signature in database
GPG key ID: F7E46DED420788F3
3 changed files with 139 additions and 0 deletions

View file

@ -940,3 +940,40 @@ async def pkgbase_disown_post(request: Request, name: str,
disown_pkgbase(pkgbase, request.user)
return RedirectResponse(f"/pkgbase/{name}",
status_code=int(HTTPStatus.SEE_OTHER))
@router.get("/pkgbase/{name}/delete")
@auth_required(True)
async def pkgbase_delete_get(request: Request, name: str):
if not request.user.has_credential("CRED_PKGBASE_DELETE"):
return RedirectResponse(f"/pkgbase/{name}",
status_code=int(HTTPStatus.SEE_OTHER))
context = make_context(request, "Package Deletion")
context["pkgbase"] = get_pkg_or_base(name, PackageBase)
return render_template(request, "packages/delete.html", context)
@router.post("/pkgbase/{name}/delete")
@auth_required(True)
async def pkgbase_delete_post(request: Request, name: str,
confirm: bool = Form(default=False)):
pkgbase = get_pkg_or_base(name, PackageBase)
if not request.user.has_credential("CRED_PKGBASE_DELETE"):
return RedirectResponse(f"/pkgbase/{name}",
status_code=int(HTTPStatus.SEE_OTHER))
if not confirm:
context = make_context(request, "Package Deletion")
context["pkgbase"] = pkgbase
context["errors"] = [("The selected packages have not been deleted, "
"check the confirmation checkbox.")]
return render_template(request, "packages/delete.html", context,
status_code=int(HTTPStatus.EXPECTATION_FAILED))
packages = pkgbase.packages.all()
for package in packages:
delete_package(request.user, package)
return RedirectResponse("/packages", status_code=int(HTTPStatus.SEE_OTHER))