Ejemplo n.º 1
0
 def delete_file(self, path, ignore_prefix=False):
     """Delete file object"""
     path = path if ignore_prefix is True else self.get_obj_key(path)
     if self.check_if_key_exists(path):
         with ignore_ctrl_c():
             return self.client.delete_object(Bucket=self._bucket, Key=path)
     raise KeyError("{} does not exist!".format(path))
Ejemplo n.º 2
0
    def upload_files(self,
                     path,
                     add_checksum=False,
                     progress=False,
                     encryption_key=None,
                     prefix=None):
        """Upload files"""
        def get_files():
            if os.path.isdir(path):
                return glob.glob(os.path.join(path, "*"))
            return [path]

        for item in get_files():
            itemname = os.path.basename(item)
            key = self.get_obj_key(itemname, prefix=prefix)
            progress_callback = (ProgressPercentage(item,
                                                    humanized=self._humanized)
                                 if progress else lambda x: None)
            extra_args = ({} if self._encrypt is False else
                          self._get_extra_args(encryption_key=encryption_key))

            with ignore_ctrl_c():
                with self._transfer(self.client) as transfer:
                    LOG.debug("uploading %s", item)
                    transfer.upload_file(
                        item,
                        self._bucket,
                        key,
                        extra_args=extra_args,
                        callback=progress_callback,
                    )
            print("")
            if add_checksum:
                self.upload_checksum(item)
Ejemplo n.º 3
0
    def rename_object(self, old_prefix, new_prefix, encryption_key=None):
        """Rename object"""
        if old_prefix == new_prefix:
            LOG.info(":renaming skipped, old and new name are the same")
            return

        LOG.warning(":ignoring all prefixes")
        copy_source = {"Bucket": self._bucket, "Key": old_prefix}
        extra = self._get_extra_args(encryption_key)
        if self._encrypt:
            extra.update(
                dict(
                    CopySourceSSECustomerAlgorithm=self.config.
                    ENCRYPTION_ALGORITHM,
                    CopySourceSSECustomerKey=self.get_encryption_key(
                        encryption_key),
                ))

        with ignore_ctrl_c():
            LOG.info(":renaming")
            self.client.copy(copy_source,
                             self._bucket,
                             new_prefix,
                             ExtraArgs=extra)
            self.delete_file(old_prefix, ignore_prefix=True)
Ejemplo n.º 4
0
    def download_file(
        self, path, dst=".", progress=False, use_encryption=None, encryption_key=None, ignore_prefix=False, prefix=None
    ):
        """Download a file"""
        dst = dst or "."
        if os.path.isdir(dst):
            local = os.path.join(dst, os.path.basename(path))
        else:
            local = dst
        touch(local)
        key = self.get_obj_key(path, ignore_prefix=ignore_prefix, prefix=prefix)
        LOG.warn("Downloading object with key **{}**".format(key))

        progress_callback = (
            ProgressPercentage(
                local,
                size=self.get_object_size(key, encryption_key=encryption_key, ignore_prefix=ignore_prefix),
                humanized=self._humanized,
            )
            if progress
            else lambda x: None
        )
        extra_args = (
            {}
            if use_encryption is False
            else self._get_extra_args(encryption_key=encryption_key)
        )

        if self.check_if_key_exists(key, ignore_prefix=ignore_prefix, prefix=prefix):
            with ignore_ctrl_c():
                with self._transfer(self.client) as transfer:
                    response = transfer.download_file(
                        self._bucket,
                        key,
                        local,
                        extra_args=extra_args,
                        callback=progress_callback,
                    )
            print("")
        else:
            raise KeyError("{} does not exist!".format(path))
        return response