| import hashlib |
| from enum import Enum |
|
|
| import boto3 |
| from botocore.client import BaseClient |
|
|
|
|
| |
| def get_md5(fpath): |
| with open(fpath, "rb") as f: |
| file_hash = hashlib.md5() |
| while chunk := f.read(8192): |
| file_hash.update(chunk) |
| return file_hash.hexdigest() |
|
|
|
|
| def upload_file_to_bucket(s3_client, file_obj, bucket, s3key): |
| """Upload a file to an S3 bucket |
| :param file_obj: File to upload |
| :param bucket: Bucket to upload to |
| :param s3key: s3key |
| :param object_name: S3 object name. If not specified then file_name is used |
| :return: True if file was uploaded, else False |
| """ |
| |
| return s3_client.upload_fileobj( |
| file_obj, bucket, s3key, |
| ExtraArgs={"ACL": "public-read", "ContentType": "Content-Type: audio/mpeg"} |
| ) |
|
|
|
|
| def s3_auth(aws_access_key_id, aws_secret_access_key, region_name) -> BaseClient: |
| s3 = boto3.client( |
| service_name='s3', |
| aws_access_key_id=aws_access_key_id, |
| aws_secret_access_key=aws_secret_access_key, |
| region_name=region_name |
| ) |
| return s3 |
|
|
|
|
| def get_list_of_buckets(s3: BaseClient): |
| response = s3.list_buckets() |
| buckets = {} |
|
|
| for buckets in response['Buckets']: |
| buckets[response['Name']] = response['Name'] |
|
|
| BucketName = Enum('BucketName', buckets) |
| return BucketName |
|
|
|
|
| if __name__ == '__main__': |
| import os |
|
|
| AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID'] |
| AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY'] |
| S3_BUCKET = "synthia-research" |
| S3_FOLDER = "huggingface_spaces_demo" |
| AWS_REGION = "eu-west-3" |
|
|
| s3 = s3_auth(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION) |
| print(s3.list_buckets()) |
|
|
| s3key = f'{S3_FOLDER}/015.WAV' |
| print(upload_file_to_bucket(s3, file_obj, S3_BUCKET, s3key)) |
|
|