Show a nicer 404 error when something was deleted (instead of just "not there")

This commit is contained in:
Sybren A. Stüvel 2016-10-21 15:27:17 +02:00
parent 041722f71a
commit 7be8e9b967

View File

@ -2,6 +2,7 @@
import collections
import copy
import json
import logging
import logging.config
import subprocess
@ -341,6 +342,31 @@ class PillarServer(Eve):
def handle_sdk_resource_not_found(self, error):
self.log.info('Forwarding ResourceNotFound exception to client: %s', error, exc_info=True)
content = getattr(error, 'content', None)
if content:
try:
error_content = json.loads(content)
except ValueError:
error_content = None
if error_content and error_content.get('_deleted', False):
# This document used to exist, but doesn't any more. Let the user know.
doc_name = error_content.get('name')
node_type = error_content.get('node_type')
if node_type:
node_type = node_type.replace('_', ' ').title()
if doc_name:
description = u'%s "%s" was deleted.' % (node_type, doc_name)
else:
description = u'This %s was deleted.' % (node_type, )
else:
if doc_name:
description = u'"%s" was deleted.' % doc_name
else:
description = None
error.description = description
error.code = 404
return self.pillar_error_handler(error)
@ -398,7 +424,7 @@ class PillarServer(Eve):
# Also handle the case where we didn't create a template for this error.
try:
return render_template(fname), error_ob.code
return render_template(fname, description=error_ob.description), error_ob.code
except TemplateNotFound:
self.log.warning('Error template %s for code %i not found',
fname, error_ob.code)