From a5be6fc9beaa8a195b9c8e382d25b5bb51225412 Mon Sep 17 00:00:00 2001 From: Kevin Morris Date: Wed, 27 Jan 2021 18:30:57 -0800 Subject: [PATCH] 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 --- aurweb/routers/accounts.py | 13 +++---------- aurweb/templates.py | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/aurweb/routers/accounts.py b/aurweb/routers/accounts.py index 0839f64e..db23bc3a 100644 --- a/aurweb/routers/accounts.py +++ b/aurweb/routers/accounts.py @@ -9,7 +9,7 @@ from aurweb.auth import auth_required from aurweb.l10n import get_translator_for_request from aurweb.models.user import User 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() @@ -17,11 +17,7 @@ router = APIRouter() @router.get("/passreset", response_class=HTMLResponse) @auth_required(False) async def passreset(request: Request): - context = make_context(request, "Password Reset") - - for k, v in request.query_params.items(): - context[k] = v - + context = await make_variable_context(request, "Password Reset") return render_template(request, "passreset.html", context) @@ -34,10 +30,7 @@ async def passreset_post(request: Request, confirm: str = Form(default=None)): from aurweb.db import session - context = make_context(request, "Password Reset") - - for k, v in dict(await request.form()).items(): - context[k] = v + context = await make_variable_context(request, "Password Reset") # The user parameter being required, we can match against user = db.query(User, or_(User.Username == user, diff --git a/aurweb/templates.py b/aurweb/templates.py index 564f3149..4ea74a62 100644 --- a/aurweb/templates.py +++ b/aurweb/templates.py @@ -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, path: str, context: dict,