Merge branch 'permissions'
authorAntony Chazapis <chazapis@gmail.com>
Wed, 15 Feb 2012 13:13:12 +0000 (15:13 +0200)
committerAntony Chazapis <chazapis@gmail.com>
Wed, 15 Feb 2012 13:13:12 +0000 (15:13 +0200)
Conflicts:
pithos/backends/modular.py

1  2 
pithos/backends/lib/sqlalchemy/node.py
pithos/backends/lib/sqlite/node.py
pithos/backends/modular.py

Simple merge
@@@ -553,11 -551,14 +555,11 @@@ class ModularBackend(BaseBackend)
          account_path, account_node = self._lookup_account(account, True)
          container_path, container_node = self._lookup_container(account, container)
          path, node = self._put_object_node(container_path, container_node, name)
-         pre_version_id, dest_version_id = self._put_version_duplicate(user, node, src_node=src_node, size=size, hash=hash, is_copy=is_copy)
+         pre_version_id, dest_version_id = self._put_version_duplicate(user, node, src_node=src_node, size=size, type=type, hash=hash, is_copy=is_copy)
          
          # Check quota.
 -        versioning = self._get_policy(container_node)['versioning']
 -        if versioning != 'auto':
 -            size_delta = size - 0 # TODO: Get previous size.
 -        else:
 -            size_delta = size
 +        del_size = self._apply_versioning(account, container, pre_version_id)
 +        size_delta = size - del_size
          if size_delta > 0:
              account_quota = long(self._get_policy(account_node)['quota'])
              container_quota = long(self._get_policy(container_node)['quota'])
              raise ie
          
          hash = map.hash()
-         pre_version_id, dest_version_id = self._update_object_hash(user, account, container, name, size, binascii.hexlify(hash), permissions)
+         pre_version_id, dest_version_id = self._update_object_hash(user, account, container, name, size, type, binascii.hexlify(hash), permissions)
          self._put_metadata_duplicate(pre_version_id, dest_version_id, domain, meta, replace_meta)
          self.store.map_put(hash, map)
 -        self.queue.send(user, 'diskspace', 0, {'action': 'add', 'version': dest_version_id, 'total': 0})
          return dest_version_id
      
-     def _copy_object(self, user, src_account, src_container, src_name, dest_account, dest_container, dest_name, dest_domain=None, dest_meta={}, replace_meta=False, permissions=None, src_version=None, is_move=False):
+     def _copy_object(self, user, src_account, src_container, src_name, dest_account, dest_container, dest_name, type, dest_domain=None, dest_meta={}, replace_meta=False, permissions=None, src_version=None, is_move=False):
          self._can_read(user, src_account, src_container, src_name)
          path, node = self._lookup_object(src_account, src_container, src_name)
          # TODO: Will do another fetch of the properties in duplicate version...
          return dest_version_id
      
      @backend_method
-     def copy_object(self, user, src_account, src_container, src_name, dest_account, dest_container, dest_name, domain, meta={}, replace_meta=False, permissions=None, src_version=None):
+     def copy_object(self, user, src_account, src_container, src_name, dest_account, dest_container, dest_name, type, domain, meta={}, replace_meta=False, permissions=None, src_version=None):
          """Copy an object's data and metadata."""
          
-         logger.debug("copy_object: %s %s %s %s %s %s %s %s %s %s %s", src_account, src_container, src_name, dest_account, dest_container, dest_name, domain, meta, replace_meta, permissions, src_version)
-         dest_version_id = self._copy_object(user, src_account, src_container, src_name, dest_account, dest_container, dest_name, domain, meta, replace_meta, permissions, src_version, False)
+         logger.debug("copy_object: %s %s %s %s %s %s %s %s %s %s %s %s", src_account, src_container, src_name, dest_account, dest_container, dest_name, type, domain, meta, replace_meta, permissions, src_version)
+         dest_version_id = self._copy_object(user, src_account, src_container, src_name, dest_account, dest_container, dest_name, type, domain, meta, replace_meta, permissions, src_version, False)
          return dest_version_id
      
      @backend_method
-     def move_object(self, user, src_account, src_container, src_name, dest_account, dest_container, dest_name, domain, meta={}, replace_meta=False, permissions=None):
+     def move_object(self, user, src_account, src_container, src_name, dest_account, dest_container, dest_name, type, domain, meta={}, replace_meta=False, permissions=None):
          """Move an object's data and metadata."""
          
-         logger.debug("move_object: %s %s %s %s %s %s %s %s %s %s", src_account, src_container, src_name, dest_account, dest_container, dest_name, domain, meta, replace_meta, permissions)
+         logger.debug("move_object: %s %s %s %s %s %s %s %s %s %s %s", src_account, src_container, src_name, dest_account, dest_container, dest_name, type, domain, meta, replace_meta, permissions)
          if user != src_account:
              raise NotAllowedError
-         dest_version_id = self._copy_object(user, src_account, src_container, src_name, dest_account, dest_container, dest_name, domain, meta, replace_meta, permissions, None, True)
+         dest_version_id = self._copy_object(user, src_account, src_container, src_name, dest_account, dest_container, dest_name, type, domain, meta, replace_meta, permissions, None, True)
          if (src_account, src_container, src_name) != (dest_account, dest_container, dest_name):
              self._delete_object(user, src_account, src_container, src_name)
 -        self.queue.send(user, 'diskspace', 0, {'action': 'add', 'version': dest_version_id, 'total': 0})
          return dest_version_id
      
      def _delete_object(self, user, account, container, name, until=None):
              return
          
          path, node = self._lookup_object(account, container, name)
-         src_version_id, dest_version_id = self._put_version_duplicate(user, node, size=0, hash=None, cluster=CLUSTER_DELETED)
+         src_version_id, dest_version_id = self._put_version_duplicate(user, node, size=0, type='', hash=None, cluster=CLUSTER_DELETED)
 -        self._apply_versioning(account, container, src_version_id)
 +        del_size = self._apply_versioning(account, container, src_version_id)
 +        if del_size:
 +            self._report_size_change(user, account, -del_size, {'action': 'object delete'})
          self.permissions.access_clear(path)
      
      @backend_method