From 1ca2f336c444878b02bc0ce0c42f28943ad0de52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Thu, 1 Feb 2018 14:13:01 +0100 Subject: [PATCH] Proper error handling for node type editor --- pillar/web/projects/routes.py | 14 ++++++++++++-- src/templates/projects/edit_node_type_embed.pug | 9 +++++---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/pillar/web/projects/routes.py b/pillar/web/projects/routes.py index ec09743d..e931efa9 100644 --- a/pillar/web/projects/routes.py +++ b/pillar/web/projects/routes.py @@ -580,13 +580,14 @@ def edit_node_type(project_url, node_type_name): api = system_util.pillar_api() # Fetch the Node or 404 try: - project = Project.find_one({ - 'where': '{"url" : "%s"}' % (project_url)}, api=api) + project = Project.find_one({'where': {'url': project_url}}, api=api) except ResourceNotFound: return abort(404) + utils.attach_project_pictures(project, api) node_type = project.get_node_type(node_type_name) form = NodeTypeForm() + if form.validate_on_submit(): # Update dynamic & form schemas dyn_schema = json.loads(form.dyn_schema.data) @@ -618,6 +619,15 @@ def edit_node_type(project_url, node_type_name): form.dyn_schema.data = json.dumps(dyn_schema, indent=4) form.permissions.data = json.dumps(permissions, indent=4) + if request.method == 'POST': + # Send back a JSON response, as this is actually called + # from JS instead of rendered as page. + if form.errors: + resp = jsonify({'_message': str(form.errors)}) + resp.status_code = 400 + return resp + return jsonify({'_message': 'ok'}) + return render_template('projects/edit_node_type_embed.html', form=form, project=project, diff --git a/src/templates/projects/edit_node_type_embed.pug b/src/templates/projects/edit_node_type_embed.pug index 876b4580..ca1fd4d7 100644 --- a/src/templates/projects/edit_node_type_embed.pug +++ b/src/templates/projects/edit_node_type_embed.pug @@ -82,13 +82,14 @@ script. var data = $node_type_form.serialize(); - $.post(url, data, function(datata) { - }) + $.post(url, data) .done(function(){ toastr.success("Node Type: {{ node_type['name'] | undertitle }}", "Saved") }) - .fail(function(){ - toastr.error("Node Type: {{ node_type['name'] | undertitle }}", "Could not save") + .fail(function(err) { + toastr.error( + xhrErrorResponseMessage(err), + "Could not save {{ node_type['name'] | undertitle }}") }); }); });