Browse Source

HUE-3450 [metadata] Add lineage endpoint to Navigator API

GET /metadata/api/navigator/lineage/id=<entity_id>
Jenny Kim 9 years ago
parent
commit
b861021

+ 16 - 0
desktop/libs/metadata/src/metadata/navigator_api.py

@@ -219,3 +219,19 @@ def delete_properties(request):
     response['status'] = 0
 
   return JsonResponse(response)
+
+
+@error_handler
+def get_lineage(request):
+  response = {'status': -1}
+
+  api = NavigatorApi()
+  entity_id = request.REQUEST.get('id')
+
+  if not entity_id:
+    raise MetadataApiException("get_lineage requires an 'id' parameter")
+
+  response['lineage'] = api.get_lineage(entity_id)
+  response['status'] = 0
+
+  return JsonResponse(response)

+ 20 - 0
desktop/libs/metadata/src/metadata/navigator_client.py

@@ -222,6 +222,26 @@ class NavigatorApi(object):
     return self.update_entity(entity_id, properties=new_props)
 
 
+  def get_lineage(self, entity_id):
+    """
+    GET /api/v3/lineage/entityIds=:id
+    http://cloudera.github.io/navigator/apidocs/v3/path__v3_lineage.html
+    """
+    try:
+      params = self.__params
+
+      params += (
+        ('entityIds', entity_id),
+      )
+
+      return self._root.get('lineage', headers=self.__headers, params=params)
+    except RestException, e:
+      msg = 'Failed to get lineage for entity ID %s: %s' % (entity_id, str(e))
+      LOG.exception(msg)
+      raise NavigatorApiException(msg)
+
+
+
   def _clean_path(self, path):
     return path.rstrip('/').split('/')[-1], self._escape_slashes(path.rstrip('/'))
 

+ 1 - 0
desktop/libs/metadata/src/metadata/urls.py

@@ -27,6 +27,7 @@ urlpatterns = patterns('metadata.navigator_api',
   url(r'^api/navigator/delete_tags/?$', 'delete_tags', name='delete_tags'),
   url(r'^api/navigator/update_properties/?$', 'update_properties', name='update_properties'),
   url(r'^api/navigator/delete_properties/?$', 'delete_properties', name='delete_properties'),
+  url(r'^api/navigator/lineage/?$', 'get_lineage', name='get_lineage'),
 )