Browse Source

[doc2] Add permissions to /desktop/api2/docs response

Moved perms into Document2's to_dict
Jenny Kim 9 years ago
parent
commit
b46391454d
2 changed files with 23 additions and 29 deletions
  1. 0 28
      desktop/core/src/desktop/api2.py
  2. 23 1
      desktop/core/src/desktop/models.py

+ 0 - 28
desktop/core/src/desktop/api2.py

@@ -163,38 +163,10 @@ def get_document(request):
   else:
   else:
     doc = Document2.objects.get(uuid=request.GET['uuid'])
     doc = Document2.objects.get(uuid=request.GET['uuid'])
 
 
-  permissions = _massage_permissions(doc)
-
   doc_info = doc.to_dict()
   doc_info = doc.to_dict()
-  doc_info.update(permissions)
-
   return JsonResponse(doc_info)
   return JsonResponse(doc_info)
 
 
 
 
-def _massage_permissions(document):
-  """
-  Returns the permissions for a given document as a dictionary
-  """
-  read_perms = document.list_permissions(perm='read')
-  write_perms = document.list_permissions(perm='write')
-  return {
-    'perms': {
-        'read': {
-          'users': [{'id': perm_user.id, 'username': perm_user.username} \
-                     for perm_user in read_perms.users.all()],
-          'groups': [{'id': perm_group.id, 'name': perm_group.name} \
-                     for perm_group in read_perms.groups.all()]
-        },
-        'write': {
-          'users': [{'id': perm_user.id, 'username': perm_user.username} \
-                     for perm_user in write_perms.users.all()],
-          'groups': [{'id': perm_group.id, 'name': perm_group.name} \
-                     for perm_group in write_perms.groups.all()]
-        }
-      }
-    }
-
-
 @api_error_handler
 @api_error_handler
 @require_POST
 @require_POST
 def move_document(request):
 def move_document(request):

+ 23 - 1
desktop/core/src/desktop/models.py

@@ -848,7 +848,7 @@ class Document2(models.Model):
       return reverse('oozie:edit_workflow') + '?workflow=' + str(self.id)
       return reverse('oozie:edit_workflow') + '?workflow=' + str(self.id)
 
 
   def to_dict(self):
   def to_dict(self):
-    return {
+    doc_dict = {
       'owner': self.owner.username,
       'owner': self.owner.username,
       'name': self.name,
       'name': self.name,
       'description': self.description,
       'description': self.description,
@@ -856,11 +856,13 @@ class Document2(models.Model):
       'id': self.id,
       'id': self.id,
       'doc1_id': self.doc.get().id if self.doc.exists() else -1,
       'doc1_id': self.doc.get().id if self.doc.exists() else -1,
       'type': self.type,
       'type': self.type,
+      'perms': self._massage_permissions(),
       'last_modified': self.last_modified.strftime(UTC_TIME_FORMAT),
       'last_modified': self.last_modified.strftime(UTC_TIME_FORMAT),
       'last_modified_ts': calendar.timegm(self.last_modified.utctimetuple()),
       'last_modified_ts': calendar.timegm(self.last_modified.utctimetuple()),
       'isSelected': False,
       'isSelected': False,
       'absoluteUrl': self.get_absolute_url()
       'absoluteUrl': self.get_absolute_url()
     }
     }
+    return doc_dict
 
 
   def can_read_or_exception(self, user):
   def can_read_or_exception(self, user):
     self.doc.get().can_read_or_exception(user)
     self.doc.get().can_read_or_exception(user)
@@ -944,6 +946,26 @@ class Document2(models.Model):
     perm, created = Document2Permission.objects.get_or_create(doc=self, perms=perm)
     perm, created = Document2Permission.objects.get_or_create(doc=self, perms=perm)
     return perm
     return perm
 
 
+  def _massage_permissions(self):
+    """
+    Returns the permissions for a given document as a dictionary
+    """
+    read_perms = self.list_permissions(perm='read')
+    write_perms = self.list_permissions(perm='write')
+    return {
+      'read': {
+        'users': [{'id': perm_user.id, 'username': perm_user.username} \
+                  for perm_user in read_perms.users.all()],
+        'groups': [{'id': perm_group.id, 'name': perm_group.name} \
+                   for perm_group in read_perms.groups.all()]
+      },
+      'write': {
+        'users': [{'id': perm_user.id, 'username': perm_user.username} \
+                  for perm_user in write_perms.users.all()],
+        'groups': [{'id': perm_group.id, 'name': perm_group.name} \
+                   for perm_group in write_perms.groups.all()]
+      }
+    }
 
 
 class Directory(Document2):
 class Directory(Document2):
   # e.g. name = '/' or '/dir1/dir2/f3'
   # e.g. name = '/' or '/dir1/dir2/f3'