Revision 79bb41b7 pithos/backends/modular.py

b/pithos/backends/modular.py
509 509
            self.permissions.access_set(path, permissions)
510 510
        return dest_version_id
511 511
    
512
    def _copy_object(self, user, account, src_container, src_name, dest_container, dest_name, dest_meta={}, replace_meta=False, permissions=None, src_version=None):
513
        if permissions is not None and user != account:
512
    def _copy_object(self, user, src_account, src_container, src_name, dest_account, dest_container, dest_name, dest_meta={}, replace_meta=False, permissions=None, src_version=None):
513
        if permissions is not None and user != dest_account:
514 514
            raise NotAllowedError
515
        self._can_read(user, account, src_container, src_name)
516
        self._can_write(user, account, dest_container, dest_name)
517
        src_path, src_node = self._lookup_object(account, src_container, src_name)
515
        self._can_read(user, src_account, src_container, src_name)
516
        self._can_write(user, dest_account, dest_container, dest_name)
517
        src_path, src_node = self._lookup_object(src_account, src_container, src_name)
518 518
        self._get_version(src_node, src_version)
519 519
        if permissions is not None:
520
            dest_path = '/'.join((account, container, name))
520
            dest_path = '/'.join((dest_account, dest_container, dest_name))
521 521
            self._check_permissions(dest_path, permissions)
522
        dest_path, dest_node = self._put_object_node(account, dest_container, dest_name)
522
        dest_path, dest_node = self._put_object_node(dest_account, dest_container, dest_name)
523 523
        src_version_id, dest_version_id = self._copy_version(user, src_node, src_version, dest_node)
524 524
        if src_version_id is not None:
525 525
            self._copy_data(src_version_id, dest_version_id)
......
531 531
        return dest_version_id
532 532
    
533 533
    @backend_method
534
    def copy_object(self, user, account, src_container, src_name, dest_container, dest_name, dest_meta={}, replace_meta=False, permissions=None, src_version=None):
534
    def copy_object(self, user, src_account, src_container, src_name, dest_account, dest_container, dest_name, dest_meta={}, replace_meta=False, permissions=None, src_version=None):
535 535
        """Copy an object's data and metadata."""
536 536
        
537
        logger.debug("copy_object: %s %s %s %s %s %s %s %s %s", account, src_container, src_name, dest_container, dest_name, dest_meta, replace_meta, permissions, src_version)
538
        return self._copy_object(user, account, src_container, src_name, dest_container, dest_name, dest_meta, replace_meta, permissions, src_version)
537
        logger.debug("copy_object: %s %s %s %s %s %s %s %s %s %s", src_account, src_container, src_name, dest_account, dest_container, dest_name, dest_meta, replace_meta, permissions, src_version)
538
        return self._copy_object(user, src_account, src_container, src_name, dest_account, dest_container, dest_name, dest_meta, replace_meta, permissions, src_version)
539 539
    
540 540
    @backend_method
541
    def move_object(self, user, account, src_container, src_name, dest_container, dest_name, dest_meta={}, replace_meta=False, permissions=None):
541
    def move_object(self, user, src_account, src_container, src_name, dest_account, dest_container, dest_name, dest_meta={}, replace_meta=False, permissions=None):
542 542
        """Move an object's data and metadata."""
543 543
        
544
        logger.debug("move_object: %s %s %s %s %s %s %s %s", account, src_container, src_name, dest_container, dest_name, dest_meta, replace_meta, permissions)
545
        dest_version_id = self._copy_object(user, account, src_container, src_name, dest_container, dest_name, dest_meta, replace_meta, permissions, None)
546
        self._delete_object(user, account, src_container, src_name)
544
        logger.debug("move_object: %s %s %s %s %s %s %s %s %s", src_account, src_container, src_name, dest_account, dest_container, dest_name, dest_meta, replace_meta, permissions)
545
        if user != src_account:
546
            raise NotAllowedError
547
        dest_version_id = self._copy_object(user, src_account, src_container, src_name, dest_account, dest_container, dest_name, dest_meta, replace_meta, permissions, None)
548
        self._delete_object(user, src_account, src_container, src_name)
547 549
        return dest_version_id
548 550
    
549 551
    def _delete_object(self, user, account, container, name, until=None):

Also available in: Unified diff