Revision f9ea264b

b/snf-pithos-backend/pithos/backends/modular.py
381 381
        if user != account:
382 382
            raise NotAllowedError
383 383
        path, node = self._lookup_container(account, container)
384
        self._put_metadata(user, node, domain, meta, replace)
384
        src_version_id, dest_version_id = self._put_metadata(user, node, domain, meta, replace)
385
        if src_version_id is not None:
386
            versioning = self._get_policy(node)['versioning']
387
            if versioning != 'auto':
388
                self.node.version_remove(src_version_id)
385 389
    
386 390
    @backend_method
387 391
    def get_container_policy(self, user, account, container):
......
632 636
        hashmap = self.store.map_get(binascii.unhexlify(props[self.HASH]))
633 637
        return props[self.SIZE], [binascii.hexlify(x) for x in hashmap]
634 638
    
635
    def _update_object_hash(self, user, account, container, name, size, type, hash, checksum, permissions, src_node=None, is_copy=False):
639
    def _update_object_hash(self, user, account, container, name, size, type, hash, checksum, domain, meta, replace_meta, permissions, src_node=None, src_version_id=None, is_copy=False):
636 640
        if permissions is not None and user != account:
637 641
            raise NotAllowedError
638 642
        self._can_write(user, account, container, name)
......
645 649
        path, node = self._put_object_node(container_path, container_node, name)
646 650
        pre_version_id, dest_version_id = self._put_version_duplicate(user, node, src_node=src_node, size=size, type=type, hash=hash, checksum=checksum, is_copy=is_copy)
647 651
        
652
        # Handle meta.
653
        if src_version_id is None:
654
            src_version_id = pre_version_id
655
        self._put_metadata_duplicate(src_version_id, dest_version_id, domain, meta, replace_meta)
656
        
648 657
        # Check quota.
649 658
        del_size = self._apply_versioning(account, container, pre_version_id)
650 659
        size_delta = size - del_size
......
659 668
        
660 669
        if permissions is not None:
661 670
            self.permissions.access_set(path, permissions)
662
        return pre_version_id, dest_version_id
671
        return dest_version_id
663 672
    
664 673
    @backend_method
665 674
    def update_object_hashmap(self, user, account, container, name, size, type, hashmap, checksum, domain, meta={}, replace_meta=False, permissions=None):
......
677 686
            raise ie
678 687
        
679 688
        hash = map.hash()
680
        pre_version_id, dest_version_id = self._update_object_hash(user, account, container, name, size, type, binascii.hexlify(hash), checksum, permissions)
681
        self._put_metadata_duplicate(pre_version_id, dest_version_id, domain, meta, replace_meta)
689
        dest_version_id = self._update_object_hash(user, account, container, name, size, type, binascii.hexlify(hash), checksum, domain, meta, replace_meta, permissions)
682 690
        self.store.map_put(hash, map)
683 691
        return dest_version_id
684 692
    
......
706 714
        size = props[self.SIZE]
707 715
        
708 716
        is_copy = not is_move and (src_account, src_container, src_name) != (dest_account, dest_container, dest_name) # New uuid.
709
        pre_version_id, dest_version_id = self._update_object_hash(user, dest_account, dest_container, dest_name, size, type, hash, None, permissions, src_node=node, is_copy=is_copy)
710
        self._put_metadata_duplicate(src_version_id, dest_version_id, dest_domain, dest_meta, replace_meta)
717
        dest_version_id = self._update_object_hash(user, dest_account, dest_container, dest_name, size, type, hash, None, dest_domain, dest_meta, replace_meta, permissions, src_node=node, src_version_id=src_version_id, is_copy=is_copy)
711 718
        return dest_version_id
712 719
    
713 720
    @backend_method

Also available in: Unified diff