88from botocore .exceptions import ClientError
99
1010
11- class S3 (CloudStorageAbstractClass ):
12- def __init__ (self , conf ):
11+ class S3 :
12+ def __init__ (self , conf :dict ):
13+ self .session = boto3 .session .Session ()
1314 self .s3_client = boto3 .resource ("s3" )
14- self .region = None
15+ self .region = conf . get ( "region" ) or None
1516
16- def auth (self ):
17- pass
18-
19- def build_service (self ):
20- pass
21-
22- def list_files (self ):
23- pass
24-
25- def upload_file (self , file_name , bucket , object_name = None , extra_args : dict = None ):
17+ async def upload_file (self , file_name : str , bucket : str , object_name = None , extra_args : dict = None ):
2618 """Upload a file to an S3 bucket
2719
2820 :param file_name: File to upload
@@ -33,16 +25,18 @@ def upload_file(self, file_name, bucket, object_name=None, extra_args: dict=None
3325
3426 :return: True if file was uploaded, else False
3527 """
28+ s3_client = boto3 .client ('s3' )
29+
3630 # If S3 object_name was not specified, use file_name
3731 if object_name is None :
3832 object_name = file_name
3933
4034 # Upload the file
4135 try :
42- response = self . s3_client .upload_file (
43- file_name = file_name ,
44- bucket = bucket ,
45- object_name = object_name ,
36+ response = s3_client .upload_file (
37+ file_name ,
38+ bucket ,
39+ object_name ,
4640 ExtraArgs = extra_args ,
4741 Callback = ProgressPercentage (file_name )
4842 )
@@ -52,28 +46,31 @@ def upload_file(self, file_name, bucket, object_name=None, extra_args: dict=None
5246 return False
5347 return True
5448
55- def download_file (self , bucket_name : str , file_name : str , object_name : str = None , extra_args : dict = None ):
56- self .s3_clients3 .download_file (
49+ async def download_file (self , bucket_name : str , file_name : str , object_name : str = None , extra_args : dict = None ):
50+ s3_client = self .session .resource ("s3" )
51+
52+ s3_client .download_file (
5753 bucket_name ,
5854 file_name ,
5955 object_name ,
6056 ExtraArgs = extra_args ,
6157 Callback = ProgressPercentage (file_name )
6258 )
6359
64- def list_buckets (self ):
60+ async def list_buckets (self ):
6561 """[List existing buckets]
6662
6763 Returns:
6864 [dict]: [List of buckets]
6965 """
66+ s3_client = self .session .resource ("s3" )
67+
7068 buckets = []
71- for bucket in self .s3_client .buckets .all ():
72- buckets .append (bucket )
73- print (bucket .name )
69+ for bucket in s3_client .buckets .all ():
70+ buckets .append (bucket .name )
7471 return buckets
7572
76- def create_bucket (self , bucket_name : str , region_name : str = None ):
73+ async def create_bucket (self , bucket_name : str ):
7774 """Create an S3 bucket in a specified region
7875
7976 If a region is not specified, the bucket is created in the S3 default
@@ -87,14 +84,15 @@ def create_bucket(self, bucket_name: str, region_name: str = None):
8784 :return: True if bucket created, else False
8885 """
8986 # Create bucket
87+ s3_client = self .session .resource ("s3" )
9088 try :
9189 if self .region is None :
92- self . s3_client .create_bucket (Bucket = bucket_name )
90+ s3_client .create_bucket (Bucket = bucket_name )
9391 else :
94- self . s3_client = boto3 .client ('s3' , region_name = region_name )
95- location = {'LocationConstraint' : region_name }
92+ s3_client = boto3 .client ('s3' , region_name = self . region )
93+ location = {'LocationConstraint' : self . region }
9694
97- self . s3_client .create_bucket (
95+ s3_client .create_bucket (
9896 Bucket = bucket_name ,
9997 CreateBucketConfiguration = location
10098 )
0 commit comments