Browse Source

[doc2] Prevent creating duplicated directories for the same user

Romain Rigaux 10 năm trước cách đây
mục cha
commit
ae352b3

+ 1 - 1
desktop/core/src/desktop/api2.py

@@ -110,7 +110,7 @@ def create_directory(request):
   name = json.loads(request.POST.get('name'))
 
   parent_dir = Directory.objects.get(owner=request.user, name=parent_path)
-  
+
   path = Hdfs.normpath(parent_path + '/' + name)
   file_doc = Directory.objects.create(name=path, type='directory', owner=request.user)
   parent_dir.dependencies.add(file_doc)

+ 6 - 3
desktop/core/src/desktop/models.py

@@ -29,6 +29,7 @@ from django.contrib.staticfiles.storage import staticfiles_storage
 from django.core.urlresolvers import reverse
 from django.db import connection, models, transaction
 from django.db.models import Q
+from django.forms import ValidationError
 from django.utils.translation import ugettext as _, ugettext_lazy as _t
 
 from desktop import appmanager
@@ -902,15 +903,17 @@ class Directory(Document2):
 
   class Meta:
     proxy = True
-    
+
   def save(self, *args, **kwargs):
     super(Directory, self).save(*args, **kwargs)
-    # TODO unique_together = ('owner', 'name')
+
+    if Document2.objects.filter(type='directory', owner=self.owner, name=self.name).count() > 1:
+      raise ValidationError(_('Same directory %s for %s already exist') % (self.owner, self.name))
 
   def parent(self):
     return Document2.objects.get(type='directory', dependencies=[self.pk])
 
-  def documents(self): 
+  def documents(self):
     return self.dependencies.all() # TODO perms
 
 

+ 12 - 9
desktop/core/src/desktop/static/desktop/js/home2.vm.js

@@ -71,27 +71,30 @@ function HomeViewModel(data) {
 
 
   self.loadDocuments = function(path) {
-	$.get("/desktop/api2/docs2/", {
-	   path: path
-	}, function(data) {
-	  self.documents(data.documents);    	
-	});
+    $.get("/desktop/api2/docs2/", {
+     path: path
+    }, function(data) {
+      self.path(path);
+      self.documents(data.documents);
+    }).fail(function (xhr) {
+      $(document).trigger("error", xhr.responseText);
+    });
   };
 
   self.mkdir = function() {
     $.post("/desktop/api2/doc/mkdir", {
-	    parent_path: ko.mapping.toJSON(self.path),
-	    name: ko.mapping.toJSON(self.mkdirFormPath)
+      parent_path: ko.mapping.toJSON(self.path),
+      name: ko.mapping.toJSON(self.mkdirFormPath)
       }, function (data) {
         if (data.status == 0) {
           self.loadDocuments(self.path()); // TODO proper refresh
           self.mkdirFormPath('');
         }
         else {
-          fail(data.message);
+          $(document).trigger("error", data.message);
         }
      }).fail(function (xhr) {
-        fail(xhr.responseText);
+       $(document).trigger("error", xhr.responseText);
      });
   };
 }