Эх сурвалжийг харах

HUE-4686 [fb] Bubble up error when trying to create directory in / in filechooser

Romain Rigaux 9 жил өмнө
parent
commit
931077d34d

+ 17 - 7
apps/filebrowser/src/filebrowser/views.py

@@ -28,12 +28,14 @@ import stat as stat_module
 import urllib
 
 from datetime import datetime
+from cStringIO import StringIO
+from gzip import GzipFile
 
 from django.contrib import messages
 from django.contrib.auth.models import User, Group
 from django.core.urlresolvers import reverse
 from django.template.defaultfilters import stringformat, filesizeformat
-from django.http import Http404, HttpResponse, HttpResponseNotModified
+from django.http import Http404, HttpResponse, HttpResponseNotModified, HttpResponseForbidden
 from django.views.decorators.http import require_http_methods
 from django.views.static import was_modified_since
 from django.shortcuts import redirect
@@ -41,11 +43,9 @@ from django.utils.functional import curry
 from django.utils.http import http_date
 from django.utils.html import escape
 from django.utils.translation import ugettext as _
-from cStringIO import StringIO
-from gzip import GzipFile
-from avro import datafile, io
 
 from aws.s3.s3fs import S3FileSystemException
+from avro import datafile, io
 from desktop import appmanager
 from desktop.lib import i18n, paginator
 from desktop.lib.conf import coerce_bool
@@ -53,6 +53,7 @@ from desktop.lib.django_util import make_absolute, render, format_preserving_red
 from desktop.lib.django_util import JsonResponse
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.fs import splitpath
+from desktop.lib.i18n import smart_str
 from hadoop.fs.hadoopfs import Hdfs
 from hadoop.fs.exceptions import WebHdfsException
 from hadoop.fs.fsutils import do_overwrite_save
@@ -990,10 +991,16 @@ def generic_op(form_class, request, op, parameter_names, piggyback=None, templat
                 if request.user.is_superuser and not _is_hdfs_superuser(request):
                     msg += _(' Note: you are a Hue admin but not a HDFS superuser, "%(superuser)s" or part of HDFS supergroup, "%(supergroup)s".') \
                            % {'superuser': request.fs.superuser, 'supergroup': request.fs.supergroup}
-                raise PopupException(msg, detail=e)
+                if request.is_ajax():
+                    return HttpResponseForbidden(smart_str(e))
+                else:
+                    raise PopupException(msg, detail=e)
             except S3FileSystemException, e:
               msg = _("S3 filesystem exception.")
-              raise PopupException(msg, detail=e)
+              if request.is_ajax():
+                  return HttpResponseForbidden(smart_str(e))
+              else:
+                  raise PopupException(msg, detail=e)
             except NotImplementedError, e:
                 msg = _("Cannot perform operation.")
                 raise PopupException(msg, detail=e)
@@ -1015,7 +1022,10 @@ def generic_op(form_class, request, op, parameter_names, piggyback=None, templat
                 ret["result_error"] = True
 
             ret['user'] = request.user
-            return render(template, request, ret)
+            if request.is_ajax():
+              return HttpResponse()
+            else:
+              return render(template, request, ret)
     else:
         # Initial parameters may be specified with get with the default extractor
         initial_values = initial_value_extractor(request, parameter_names)

+ 3 - 4
desktop/core/src/desktop/static/desktop/js/jquery.filechooser.js

@@ -342,9 +342,6 @@
                 name: _folderName.val(),
                 path: path
               },
-              beforeSend: function (xhr) {
-                xhr.setRequestHeader("X-Requested-With", "Hue"); // need to override the default one because otherwise Django returns HTTP 500
-              },
               success: function (xhr, status) {
                 if (status == "success") {
                   _parent.navigateTo(path);
@@ -354,9 +351,11 @@
                   _createFolderBtn.removeClass("disabled");
                   _createFolderDetails.slideUp();
                 }
+              },
+              error: function (xhr) {
+                $(document).trigger("error", xhr.responseText);
               }
             });
-
           });
 
           _createFolderDetails.appendTo(_actions);