Browse Source

[oozie] Fix integrity error on lookup by UUID

As reported in: https://groups.google.com/a/cloudera.org/forum/#!topic/hue-user/NyUPR5GIsGA
Jenny Kim 9 năm trước cách đây
mục cha
commit
21a1620
1 tập tin đã thay đổi với 19 bổ sung13 xóa
  1. 19 13
      apps/oozie/src/oozie/decorators.py

+ 19 - 13
apps/oozie/src/oozie/decorators.py

@@ -33,29 +33,35 @@ LOG = logging.getLogger(__name__)
 def check_document_access_permission():
   def inner(view_func):
     def decorate(request, *args, **kwargs):
-      doc_id = {}
+      doc_id = uuid = None
 
       try:
-        if request.GET.get('workflow') or request.POST.get('workflow'):
-          workflow_id = request.GET.get('workflow') or request.POST.get('workflow')
+        if request.REQUEST.get('workflow'):
+          workflow_id = request.REQUEST.get('workflow')
           if workflow_id.isdigit():
-            doc_id['id'] = workflow_id
+            doc_id = workflow_id
           else:
-            doc_id['uuid'] = workflow_id
+            uuid = workflow_id
         elif request.GET.get('uuid'):
-          doc_id['uuid'] = request.GET.get('uuid')
+          uuid = request.GET.get('uuid')
         elif request.GET.get('coordinator'):
-          doc_id['id'] = request.GET.get('coordinator')
+          doc_id = request.GET.get('coordinator')
         elif request.GET.get('bundle'):
-          doc_id['id'] = request.GET.get('bundle')
+          doc_id = request.GET.get('bundle')
         elif 'doc_id' in kwargs:
-          doc_id['id'] = kwargs['doc_id']
+          doc_id = kwargs['doc_id']
 
-        if doc_id:
-          doc2 = Document2.objects.get(**doc_id)
-          doc2.doc.get().can_read_or_exception(request.user)
+        if doc_id is not None:
+          doc2 = Document2.objects.get(id=doc_id)
+        elif uuid is not None:
+          doc2 = Document2.objects.get_by_uuid(uuid)
+        else:
+          raise PopupException(_('Failed to retrieve Document2 object, id or uuid is required.'))
+
+        doc2.doc.get().can_read_or_exception(request.user)
       except Document2.DoesNotExist:
-        raise PopupException(_('Job %(id)s does not exist') % {'id': doc_id})
+        raise PopupException(_('Job with %(key)s=%(value)s does not exist') %
+                             {'key': 'id' if doc_id else 'uuid', 'value': doc_id or uuid})
 
       return view_func(request, *args, **kwargs)
     return wraps(view_func)(decorate)