Roland Ding
8.7.20.54 added terminal print out function as a decorator to wrap up function and provide a terminal view for the code it executed.
3337920
| import boto3 | |
| import os | |
| import tempfile | |
| from utility import aws_access_key_id, aws_secret_access_key,terminal_print | |
| s3 = boto3.client( | |
| 's3', | |
| aws_access_key_id=aws_access_key_id, | |
| aws_secret_access_key=aws_secret_access_key | |
| ) | |
| # post or update a file to s3 | |
| def upload_file(path, bucket, object_name=None): | |
| """Upload a file to an S3 bucket | |
| :param path: path to file for upload | |
| :param bucket: Bucket to upload to | |
| :param object_name: S3 object name. | |
| If not specified then file_name is used | |
| :return: True if file was uploaded, else False | |
| """ | |
| file_name = os.path.basename(path) | |
| if object_name is None: | |
| object_name = file_name | |
| try: | |
| res = s3.upload_file(path, bucket, object_name) | |
| except Exception as e: | |
| print(e) | |
| return False | |
| return res | |
| def upload_fileobj(file_obj, bucket, object_name=None): | |
| ''' | |
| Upload a file object to an S3 bucket | |
| :param file_obj: File object to upload | |
| :param bucket: Bucket to upload to | |
| :param object_name: S3 object name. | |
| If not specified then file_name is used | |
| :return: True if file was uploaded, else False | |
| ''' | |
| if object_name is None: | |
| object_name = file_obj.name | |
| try: | |
| res = s3.upload_fileobj(file_obj, bucket, object_name) | |
| except Exception as e: | |
| print(e) | |
| return e | |
| return res | |
| # get a file from s3 | |
| def download_file(bucket, object_name, file_name=None): | |
| """Download a file from an S3 bucket | |
| :param bucket: Bucket to download from | |
| :param file_name: File to download | |
| :param object_name: S3 object name. | |
| If not specified then file_name is used | |
| :return: True if file was downloaded, else False | |
| """ | |
| if file_name is None: | |
| file_name = object_name | |
| try: | |
| s3.download_file(bucket, object_name, file_name) | |
| except Exception as e: | |
| print(e) | |
| return False | |
| return True | |
| # download a file object from s3 | |
| def download_fileobj(bucket, object_name, temp_obj=None): | |
| ''' | |
| Download a file object from an S3 bucket | |
| :param file_name: File to download | |
| :param bucket: Bucket to download from | |
| :param object_name: S3 object name. | |
| If not specified then file_name is used | |
| :return: True if file was downloaded, else False | |
| ''' | |
| if temp_obj is None: | |
| temp_obj = tempfile.TemporaryFile() | |
| try: | |
| s3.download_fileobj(bucket, object_name, temp_obj) | |
| except Exception as e: | |
| print(e) | |
| return False | |
| return temp_obj | |
| # delete a file from s3 | |
| def delete_file(bucket, object_name): | |
| """Delete a file from an S3 bucket | |
| :param bucket: Bucket to delete from | |
| :param object_name: S3 object name. | |
| :return: True if file was deleted, else False | |
| """ | |
| try: | |
| response = s3.delete_object(Bucket=bucket, Key=object_name) | |
| except Exception as e: | |
| print(e) | |
| return False | |
| return response | |
| # list all files in a bucket | |
| def list_files(bucket): | |
| """List files in a bucket | |
| :param bucket: Bucket to list from | |
| :return: List of files in bucket | |
| """ | |
| try: | |
| response = s3.list_objects_v2(Bucket=bucket) | |
| except Exception as e: | |
| print(e) | |
| return False | |
| return response['Contents'] |