浏览代码

[doc2] Change validation for same path to be restricted to directories

Jenny Kim 9 年之前
父节点
当前提交
ee00b3ac4b
共有 2 个文件被更改,包括 16 次插入13 次删除
  1. 14 11
      desktop/core/src/desktop/models.py
  2. 2 2
      desktop/core/src/desktop/tests_doc2.py

+ 14 - 11
desktop/core/src/desktop/models.py

@@ -807,6 +807,8 @@ class Document2Manager(models.Manager):
           doc = doc.children.get(name=token)
         except Document2.DoesNotExist:
           raise FilesystemException(_('Requested invalid path for user %s: %s') % (user.username, path))
+        except Document2.MultipleObjectsReturned:
+          raise FilesystemException(_('Duplicate documents found for user %s at path: %s') % (user.username, path))
 
     return doc
 
@@ -993,17 +995,18 @@ class Document2(models.Model):
     if invalid_chars.search(self.name):
       raise FilesystemException(_('Document name contains an invalid character.'))
 
-    # Prevent documents with same name and parent from being created more than once
-    try:
-      document = Document2.objects.get(name=self.name, owner=self.owner, parent_directory=self.parent_directory)
-      if document.pk != self.pk:
-        raise FilesystemException(_('Document for owner %s at path %s already exists') % (self.owner, self.path))
-    except Document2.DoesNotExist:
-      pass  # no conflicts
-    except Document2.MultipleObjectsReturned:
-      document_ids = [doc.id for doc in Document2.objects.filter(name=self.name, owner=self.owner, parent_directory=self.parent_directory)]
-      raise FilesystemException(_('Found multiple documents for owner %s at path %s with IDs: [%s]') %
-                                (self.owner, self.path, ', '.join(document_ids)))
+    # Validate that directories cannot have same name and parent
+    if self.is_directory:
+      try:
+        dir = Directory.objects.get(name=self.name, owner=self.owner, parent_directory=self.parent_directory)
+        if dir.pk != self.pk:
+          raise FilesystemException(_('Directory for owner %s at path %s already exists') % (self.owner, self.path))
+      except Directory.DoesNotExist:
+        pass  # no conflicts
+      except Directory.MultipleObjectsReturned:
+        dir_ids = [doc.id for doc in Directory.objects.filter(name=self.name, owner=self.owner, parent_directory=self.parent_directory)]
+        raise FilesystemException(_('Found multiple documents for owner %s at path %s with IDs: [%s]') %
+                                    (self.owner, self.path, ', '.join(dir_ids)))
 
     # Validate home and Trash directories are only created once per user and cannot be created or modified after
     if self.name in ['', Document2.TRASH_DIR] and \

+ 2 - 2
desktop/core/src/desktop/tests_doc2.py

@@ -212,8 +212,8 @@ class TestDocument2(object):
     assert_true('invalid character' in data['message'])
 
 
-  def test_validate_same_name_and_parent(self):
-    # Test error on creating documents with same name and location
+  def test_validate_same_directory(self):
+    # Test error on creating directories with same name and location
     test_dir = Directory.objects.create(name='test_dir', owner=self.user, parent_directory=self.home_dir)
     response = self.client.post('/desktop/api2/doc/mkdir', {'parent_uuid': json.dumps(self.home_dir.uuid), 'name': json.dumps('test_dir')})
     data = json.loads(response.content)