diff options
author | 2020-12-22 03:17:51 +0000 | |
---|---|---|
committer | 2020-12-22 03:17:51 +0000 | |
commit | a7dd78eda44473e9d9eb32290590eb66ace0753f (patch) | |
tree | 7636d44ecda9e04f9fbe22d4521101808bd28b31 /backend/routes | |
parent | Merge pull request #42 from python-discord/big-int-fix (diff) | |
parent | Updates Patching Strategy (diff) |
Merge pull request #43 from python-discord/modify-patch-behavior
Diffstat (limited to 'backend/routes')
-rw-r--r-- | backend/routes/forms/form.py | 22 | ||||
-rw-r--r-- | backend/routes/forms/index.py | 5 | ||||
-rw-r--r-- | backend/routes/forms/submit.py | 6 |
3 files changed, 20 insertions, 13 deletions
diff --git a/backend/routes/forms/form.py b/backend/routes/forms/form.py index b87c7cf..8ecfdf6 100644 --- a/backend/routes/forms/form.py +++ b/backend/routes/forms/form.py @@ -1,15 +1,16 @@ """ Returns, updates or deletes a single form given an ID. """ +import deepmerge from pydantic import ValidationError from spectree.response import Response from starlette.authentication import requires from starlette.requests import Request from starlette.responses import JSONResponse -from backend.route import Route from backend.models import Form -from backend.validation import OkayResponse, api, ErrorMessage +from backend.route import Route +from backend.validation import ErrorMessage, OkayResponse, api class SingleForm(Route): @@ -53,15 +54,22 @@ class SingleForm(Route): """Updates form by ID.""" data = await request.json() - if raw_form := await request.state.db.forms.find_one( - {"_id": request.path_params["form_id"]} - ): + form_id = {"_id": request.path_params["form_id"]} + if raw_form := await request.state.db.forms.find_one(form_id): if "_id" in data or "id" in data: return JSONResponse({"error": "locked_field"}, status_code=400) - raw_form.update(data) + # Build Data Merger + merge_strategy = [ + (dict, ["merge"]) + ] + merger = deepmerge.Merger(merge_strategy, ["override"], ["override"]) + + # Merge Form Data + updated_form = merger.merge(raw_form, data) + try: - form = Form(**raw_form) + form = Form(**updated_form) except ValidationError as e: return JSONResponse(e.errors(), status_code=422) diff --git a/backend/routes/forms/index.py b/backend/routes/forms/index.py index 0e1dee8..5fd90ab 100644 --- a/backend/routes/forms/index.py +++ b/backend/routes/forms/index.py @@ -6,7 +6,7 @@ from starlette.authentication import requires from starlette.requests import Request from starlette.responses import JSONResponse -from backend.constants import Meta, WebHook +from backend.constants import WebHook from backend.models import Form, FormList from backend.models.form import validate_hook_url from backend.route import Route @@ -51,8 +51,7 @@ class FormsList(Route): # Verify Webhook try: # Get url from request - path = (Meta.__name__.lower(), WebHook.__name__.lower(), WebHook.URL.value) - url = form_data[path[0]][path[1]][path[2]] + url = form_data[WebHook.__name__.lower()][WebHook.URL.value] # Validate URL validation = await validate_hook_url(url) diff --git a/backend/routes/forms/submit.py b/backend/routes/forms/submit.py index 82caa81..8588a2d 100644 --- a/backend/routes/forms/submit.py +++ b/backend/routes/forms/submit.py @@ -155,7 +155,7 @@ class SubmitForm(Route): ) -> None: """Helper to send a submission message to a discord webhook.""" # Stop if webhook is not available - if form.meta.webhook is None: + if form.webhook is None: raise ValueError("Got empty webhook.") try: @@ -190,7 +190,7 @@ class SubmitForm(Route): } # Set hook message - message = form.meta.webhook.message + message = form.webhook.message if message: # Available variables, see SCHEMA.md ctx = { @@ -208,5 +208,5 @@ class SubmitForm(Route): # Post hook async with httpx.AsyncClient() as client: - r = await client.post(form.meta.webhook.url, json=hook) + r = await client.post(form.webhook.url, json=hook) r.raise_for_status() |