mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
feat(FastAPI): add /pkgbase/{name}/flag-comment (get)
Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
parent
210d92e382
commit
37f0c352f6
4 changed files with 81 additions and 5 deletions
|
@ -812,6 +812,19 @@ async def pkgbase_flag_post(request: Request, name: str,
|
||||||
status_code=HTTPStatus.SEE_OTHER)
|
status_code=HTTPStatus.SEE_OTHER)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/pkgbase/{name}/flag-comment")
|
||||||
|
async def pkgbase_flag_comment(request: Request, name: str):
|
||||||
|
pkgbase = get_pkg_or_base(name, models.PackageBase)
|
||||||
|
|
||||||
|
if pkgbase.Flagger is None:
|
||||||
|
return RedirectResponse(f"/pkgbase/{name}",
|
||||||
|
status_code=HTTPStatus.SEE_OTHER)
|
||||||
|
|
||||||
|
context = make_context(request, "Flag Comment")
|
||||||
|
context["pkgbase"] = pkgbase
|
||||||
|
return render_template(request, "packages/flag-comment.html", context)
|
||||||
|
|
||||||
|
|
||||||
@router.post("/pkgbase/{name}/unflag")
|
@router.post("/pkgbase/{name}/unflag")
|
||||||
@auth_required(True, redirect="/pkgbase/{name}")
|
@auth_required(True, redirect="/pkgbase/{name}")
|
||||||
async def pkgbase_unflag(request: Request, name: str):
|
async def pkgbase_unflag(request: Request, name: str):
|
||||||
|
|
46
templates/packages/flag-comment.html
Normal file
46
templates/packages/flag-comment.html
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
{% extends "partials/layout.html" %}
|
||||||
|
|
||||||
|
{% block pageContent %}
|
||||||
|
<div class="box">
|
||||||
|
<h2>{{ "Flagged Out-of-Date Comment: %s" | tr | format(pkgbase.Name) }}</h2>
|
||||||
|
|
||||||
|
{# Prepare wrapping for the username. #}
|
||||||
|
{% set wrap = ["", ""] %}
|
||||||
|
{% if request.user.is_authenticated() %}
|
||||||
|
{# When logged in, we wrap it with a link to the account. #}
|
||||||
|
{% set wrap = ['<a href="/account/%s">' | format(pkgbase.Flagger.Username), "</a>"] %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{# Prepare OutOfDateTS as a datetime object in the request user's timezone. #}
|
||||||
|
{% set flagged_at = pkgbase.OutOfDateTS | dt | as_timezone(timezone) %}
|
||||||
|
{% set username = "%s%s%s" | format(wrap[0], pkgbase.Flagger.Username, wrap[1]) %}
|
||||||
|
|
||||||
|
<p>
|
||||||
|
{{
|
||||||
|
"%s%s%s flagged %s%s%s out-of-date on %s%s%s for the "
|
||||||
|
"following reason:"
|
||||||
|
| tr | format("<strong>", username, "</strong>",
|
||||||
|
"<strong>", pkgbase.Name, "</strong>",
|
||||||
|
"<strong>", flagged_at.strftime("%Y-%m-%d"), "</strong>")
|
||||||
|
| safe
|
||||||
|
}}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{# Padding #}
|
||||||
|
<p></p>
|
||||||
|
|
||||||
|
<div class="article-content">
|
||||||
|
<blockquote>
|
||||||
|
<p>{{ pkgbase.FlaggerComment }}</p>
|
||||||
|
</blockquote>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<form action="/pkgbase/{{ pkgbase.Name }}">
|
||||||
|
<input type="submit" value="{{ 'Return to Details' | tr }}" />
|
||||||
|
</form>
|
||||||
|
|
||||||
|
{# Padding #}
|
||||||
|
<p></p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -33,11 +33,13 @@
|
||||||
{% else %}
|
{% else %}
|
||||||
<li>
|
<li>
|
||||||
<span class="flagged">
|
<span class="flagged">
|
||||||
|
<a href="/pkgbase/{{ pkgbase.Name }}/flag-comment">
|
||||||
{% set ood_ts = pkgbase.OutOfDateTS | dt | as_timezone(timezone) %}
|
{% set ood_ts = pkgbase.OutOfDateTS | dt | as_timezone(timezone) %}
|
||||||
{{
|
{{
|
||||||
"Flagged out-of-date (%s)"
|
"Flagged out-of-date (%s)"
|
||||||
| tr | format(ood_ts.strftime("%Y-%m-%d"))
|
| tr | format(ood_ts.strftime("%Y-%m-%d"))
|
||||||
}}
|
}}
|
||||||
|
</a>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
|
|
|
@ -1707,6 +1707,14 @@ def test_pkgbase_flag(client: TestClient, user: User, maintainer: User,
|
||||||
resp = request.get(endpoint, cookies=cookies)
|
resp = request.get(endpoint, cookies=cookies)
|
||||||
assert resp.status_code == int(HTTPStatus.OK)
|
assert resp.status_code == int(HTTPStatus.OK)
|
||||||
|
|
||||||
|
# Now, let's check the /pkgbase/{name}/flag-comment route.
|
||||||
|
flag_comment_endpoint = f"/pkgbase/{pkgbase.Name}/flag-comment"
|
||||||
|
with client as request:
|
||||||
|
resp = request.get(flag_comment_endpoint, cookies=cookies,
|
||||||
|
allow_redirects=False)
|
||||||
|
assert resp.status_code == int(HTTPStatus.SEE_OTHER)
|
||||||
|
assert resp.headers.get("location") == f"/pkgbase/{pkgbase.Name}"
|
||||||
|
|
||||||
# Try to flag it without a comment.
|
# Try to flag it without a comment.
|
||||||
with client as request:
|
with client as request:
|
||||||
resp = request.post(endpoint, cookies=cookies)
|
resp = request.post(endpoint, cookies=cookies)
|
||||||
|
@ -1721,6 +1729,13 @@ def test_pkgbase_flag(client: TestClient, user: User, maintainer: User,
|
||||||
assert pkgbase.Flagger == user
|
assert pkgbase.Flagger == user
|
||||||
assert pkgbase.FlaggerComment == "Test"
|
assert pkgbase.FlaggerComment == "Test"
|
||||||
|
|
||||||
|
# Now, let's check the /pkgbase/{name}/flag-comment route.
|
||||||
|
flag_comment_endpoint = f"/pkgbase/{pkgbase.Name}/flag-comment"
|
||||||
|
with client as request:
|
||||||
|
resp = request.get(flag_comment_endpoint, cookies=cookies,
|
||||||
|
allow_redirects=False)
|
||||||
|
assert resp.status_code == int(HTTPStatus.OK)
|
||||||
|
|
||||||
# Now try to perform a get; we should be redirected because
|
# Now try to perform a get; we should be redirected because
|
||||||
# it's already flagged.
|
# it's already flagged.
|
||||||
with client as request:
|
with client as request:
|
||||||
|
|
Loading…
Add table
Reference in a new issue