Browse Source

HUE-5987 [metadata] Proper error handling of Entity not found

Romain Rigaux 8 years ago
parent
commit
da54c14

+ 1 - 1
desktop/core/src/desktop/templates/nav_components.mako

@@ -31,7 +31,7 @@ from django.utils.translation import ugettext as _
           placeholder: '${_ko('No tags')}',
           readOnly: '${ readOnly }' === 'True',
           hasErrors: hasErrors,
-          errorMessage: '${_ko("There was a problem loading the tags, see server logs for details.")}',
+          errorMessage: '${_ko("Tags could not be loaded.")}',
           setTags: currentTags,
           onSave: onSave,
           validRegExp: '^[a-zA-z0-9_\-]{1,50}$',

+ 7 - 7
desktop/libs/metadata/src/metadata/navigator_api.py

@@ -34,7 +34,7 @@ from desktop.lib.django_util import JsonResponse
 from desktop.lib.i18n import force_unicode, smart_str
 
 from metadata.conf import has_navigator, NAVIGATOR
-from metadata.navigator_client import NavigatorApi, NavigatorApiException
+from metadata.navigator_client import NavigatorApi, NavigatorApiException, EntityDoesNotExistException
 
 
 LOG = logging.getLogger(__name__)
@@ -59,21 +59,21 @@ def error_handler(view_fn):
         raise MetadataApiException('Navigator API is not configured.')
     except Http404, e:
       raise e
+    except EntityDoesNotExistException, e:
+      response['message'] = e.message
+      response['status'] = -3
+      status = 200
     except NavigatorApiException, e:
       try:
         response['message'] = json.loads(e.message)
         response['status'] = -2
-      except Exception, e:
-        response['message'] = LOG.error(str(e))
+      except Exception, ex:
+        response['message'] = e.message
     except Exception, e:
       status = 500
       message = force_unicode(e)
       LOG.exception(message)
 
-      if 'Could not find' in message:
-        status = 200
-      response['message'] = message
-
     return JsonResponse(response, status=status)
   return decorator
 

+ 9 - 2
desktop/libs/metadata/src/metadata/navigator_client.py

@@ -79,6 +79,14 @@ class NavigatorApiException(Exception):
     return smart_unicode(self.message)
 
 
+class EntityDoesNotExistException(Exception):
+  def __init__(self, message=None):
+    self.message = message or _('No error message, please check the logs.')
+
+  def __unicode__(self):
+    return smart_unicode(self.message)
+
+
 class NavigatorApi(object):
   """
   http://cloudera.github.io/navigator/apidocs/v3/index.html
@@ -330,7 +338,7 @@ class NavigatorApi(object):
       response = self._root.get('entities', headers=self.__headers, params=params)
 
       if not response:
-        raise NavigatorApiException('Could not find entity with query filters: %s' % str(query_filters))
+        raise EntityDoesNotExistException('Could not find entity with query filters: %s' % str(query_filters))
       elif len(response) > 1:
         raise NavigatorApiException('Found more than 1 entity with query filters: %s' % str(query_filters))
 
@@ -457,7 +465,6 @@ class NavigatorApi(object):
       raise NavigatorApiException(e.message)
 
 
-
   def _clean_path(self, path):
     return path.rstrip('/').split('/')[-1], self._escape_slashes(path.rstrip('/'))