def copy_object(src_uri, dest_uri): """Copy object to other bucket.""" s3_resource = get_resources() src_bucket, src_prefix = utils.get_bucket_key(src_uri) dest_bucket, dest_prefix = utils.get_bucket_key(dest_uri) bucket.copy_object(s3_resource, src_bucket, src_prefix, dest_bucket, dest_prefix)
def move_object(src_uri, dest_uri): """Move object into other bucket.""" s3_resource = get_resources() src_bucket, src_prefix = utils.get_bucket_key(src_uri) dest_bucket, dest_prefix = utils.get_bucket_key(dest_uri) bucket.move_object(s3_resource, src_bucket, src_prefix, dest_bucket, dest_prefix)
def get(self, prefix=""): parser = init_parser().copy() parser.add_argument("bucket_name", type=str) args = parser.parse_args() secret_key = args["secret_key"].replace(" ", "+") bucket_name = args["bucket_name"] if args["bucket_name"]: bucket_name, prefix = utils.get_bucket_key(args["bucket_name"]) try: if args["bucket_name"]: buckets = bucket.get_objects( get_resources(args["access_key"], secret_key), bucket_name, prefix) objects = list_objects(buckets) if not objects: return response(200, f"Bucket is Empty.") return response(200, data=objects) buckets = bucket.buckets( get_resources(args["access_key"], secret_key)) all_bucket = [] for index, buck in enumerate(buckets): all_bucket.append({ "name": buck.name, "creation_date": f"{buck.creation_date:%Y-%m-%d %H:%M:%S}", "ACL": buck.Acl().grants, }) if not all_bucket: return response(200, f"Storage is Empty.") return response(200, data=all_bucket) except Exception as e: current_app.logger.error(f"{e}", exc_info=args["debug"]) return response(500, f"{e}")
def list_mpu(uri): """List in-progress multipart uploads""" s3_resource = get_resources() bucket_name, prefix = utils.get_bucket_key(uri) bucket.list_multipart_upload( resource=s3_resource, bucket_name=bucket_name, prefix=prefix )
def remove(uri): """Remove bucket or object.""" s3_resource = get_resources() bucket_name, prefix = utils.get_bucket_key(uri) if not prefix: bucket.remove_bucket(s3_resource, bucket_name=bucket_name) if bucket_name and prefix: bucket.remove_object(s3_resource, bucket_name=bucket_name, object_name=prefix)
def url(uri, expire): """Generate presign URL for object.""" s3_resource = get_resources() s3_resource = get_resources() bucket_name, prefix = utils.get_bucket_key(uri) bucket.generate_url( resource=s3_resource, bucket_name=bucket_name, object_name=prefix, expire=expire )
def du(uri): """Show disk or bucket usage.""" s3_resource = get_resources() bucket_name, prefix = utils.get_bucket_key(uri) if bucket_name: bucket.bucket_usage(s3_resource, bucket_name=bucket_name) else: bucket.disk_usage(s3_resource)
def info(uri): """Display bucket or object info.""" s3_resource = get_resources() plain_auth = get_plain_auth() bucket_name, prefix = utils.get_bucket_key(uri) if not prefix: bucket.bucket_info(s3_resource, bucket_name=bucket_name, auth=plain_auth) if bucket_name and prefix: bucket.object_info(s3_resource, bucket_name=bucket_name, object_name=prefix)
def put_object(local_path, uri): """Upload object to bucket.""" s3_resource = get_resources() bucket_name, prefix = utils.get_bucket_key(uri) bucket.upload_object( resource=s3_resource, bucket_name=bucket_name, local_path=local_path, object_name=prefix, )
def list_part(uri, upload_id): """List in-progress part in multipart upload""" s3_resource = get_resources() bucket_name, prefix = utils.get_bucket_key(uri) bucket.list_part( resource=s3_resource, bucket_name=bucket_name, object_name=prefix, upload_id=upload_id, )
def abort_mpu(uri, upload_id): """Complete a multipart upload by assembling uploaded parts""" s3_resource = get_resources() bucket_name, prefix = utils.get_bucket_key(uri) bucket.complete_multipart_upload( resource=s3_resource, bucket_name=bucket_name, object_name=prefix, upload_id=upload_id, )
def abort_mpu(uri, upload_id): """Abort in-progress multipart upload""" s3_resource = get_resources() bucket_name, prefix = utils.get_bucket_key(uri) bucket.abort_multipart_upload( resource=s3_resource, bucket_name=bucket_name, object_name=prefix, upload_id=upload_id, )
def set_acl(uri, acl): """Set ACL for bucket or object.""" s3_resource = get_resources() bucket_name, prefix = utils.get_bucket_key(uri) if not prefix: bucket.set_acl( resource=s3_resource, bucket_name=bucket_name, acl=acl, acl_type="bucket" ) if bucket_name and prefix: bucket.set_acl( resource=s3_resource, bucket_name=bucket_name, object_name=prefix, acl=acl, acl_type="object", )
def set_acl(uri, acl, fullcontrol, read, readACP, write, writeACP): """Set ACL for bucket or object.""" s3_resource = get_resources() bucket_name, prefix = utils.get_bucket_key(uri) opt = { "resource": s3_resource, "bucket_name": bucket_name, "acl": acl, "grant_fullcontrol": fullcontrol, "grant_read": read, "grant_readACP": readACP, "grant_write": write, "grant_writeACP": writeACP, } if not prefix: bucket.set_acl(**opt, acl_type="bucket") if bucket_name and prefix: bucket.set_acl(**opt, object_name=prefix, acl_type="object")
def get_objects(resource, uri): try: bucket_name, prefix = utils.get_bucket_key(uri) response = bucket_lib.get_objects(resource, bucket_name, prefix) if not response: click.secho(f'Bucket "{bucket_name}" is empty', fg="green") if response["CommonPrefixes"]: for prefix in response["CommonPrefixes"]: dir_ = "DIR".rjust(12) click.secho(f"{dir_} {bucket_name}/{prefix['Prefix']}") if response["Contents"]: for content in response["Contents"]: key = content["Key"] size = utils.sizeof_fmt(content["Size"]) last_modified = content["LastModified"] click.secho( f"{last_modified:%Y-%m-%d %H:%M:%S}, {size}, {bucket_name}/{key}" ) except Exception as exc: click.secho(f"{exc}", fg="yellow", bold=True, err=True)
def mkdir(uri): """Create directory inside bucket""" s3_resource = get_resources() bucket_name, prefix = utils.get_bucket_key(uri) bucket.mkdir(resource=s3_resource, bucket_name=bucket_name, dir_name=prefix)
def get_object(uri): """Download object in bucket.""" s3_resource = get_resources() bucket_name, prefix = utils.get_bucket_key(uri) bucket.download_object(s3_resource, bucket_name=bucket_name, object_name=prefix)