aurweb.templates: add make_variable_context

A new make_context wrapper which additionally includes either
query parameters (get) or form data (post) in the context.

Use this to simplify setting context variables for form data
in particular.

Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
Kevin Morris 2021-01-27 18:30:57 -08:00
parent 9052688ed2
commit a5be6fc9be
2 changed files with 17 additions and 10 deletions

View file

@ -9,7 +9,7 @@ from aurweb.auth import auth_required
from aurweb.l10n import get_translator_for_request from aurweb.l10n import get_translator_for_request
from aurweb.models.user import User from aurweb.models.user import User
from aurweb.scripts.notify import ResetKeyNotification from aurweb.scripts.notify import ResetKeyNotification
from aurweb.templates import make_context, render_template from aurweb.templates import make_variable_context, render_template
router = APIRouter() router = APIRouter()
@ -17,11 +17,7 @@ router = APIRouter()
@router.get("/passreset", response_class=HTMLResponse) @router.get("/passreset", response_class=HTMLResponse)
@auth_required(False) @auth_required(False)
async def passreset(request: Request): async def passreset(request: Request):
context = make_context(request, "Password Reset") context = await make_variable_context(request, "Password Reset")
for k, v in request.query_params.items():
context[k] = v
return render_template(request, "passreset.html", context) return render_template(request, "passreset.html", context)
@ -34,10 +30,7 @@ async def passreset_post(request: Request,
confirm: str = Form(default=None)): confirm: str = Form(default=None)):
from aurweb.db import session from aurweb.db import session
context = make_context(request, "Password Reset") context = await make_variable_context(request, "Password Reset")
for k, v in dict(await request.form()).items():
context[k] = v
# The user parameter being required, we can match against # The user parameter being required, we can match against
user = db.query(User, or_(User.Username == user, user = db.query(User, or_(User.Username == user,

View file

@ -41,6 +41,20 @@ def make_context(request: Request, title: str, next: str = None):
} }
async def make_variable_context(request: Request, title: str, next: str = None):
""" Make a context with variables provided by the user
(query params via GET or form data via POST). """
context = make_context(request, title, next)
to_copy = dict(request.query_params) \
if request.method.lower() == "get" \
else dict(await request.form())
for k, v in to_copy.items():
context[k] = v
return context
def render_template(request: Request, def render_template(request: Request,
path: str, path: str,
context: dict, context: dict,