@@ -54,14 +54,13 @@ def __init__(self) -> None:
5454
5555 self ._http_scheme = "https" if self .AWS_S3_USE_SSL else "http"
5656 self ._url = f"{ self ._http_scheme } ://{ self .AWS_S3_ENDPOINT_URL } "
57- self ._s3 = boto3 .resource (
57+ self ._s3 = boto3 .client (
5858 "s3" ,
5959 endpoint_url = self ._url ,
6060 use_ssl = self .AWS_S3_USE_SSL ,
6161 aws_access_key_id = self .AWS_ACCESS_KEY_ID ,
6262 aws_secret_access_key = self .AWS_SECRET_ACCESS_KEY ,
6363 )
64- self ._bucket = self ._s3 .Bucket (name = self .AWS_S3_BUCKET_NAME )
6564
6665 def get_name (self , name : str ) -> str :
6766 """
@@ -86,10 +85,8 @@ def get_path(self, name: str) -> str:
8685 )
8786
8887 if self .AWS_QUERYSTRING_AUTH :
89- params = {"Bucket" : self ._bucket .name , "Key" : key }
90- return self ._s3 .meta .client .generate_presigned_url (
91- "get_object" , Params = params
92- )
88+ params = {"Bucket" : self .AWS_S3_BUCKET_NAME , "Key" : key }
89+ return self ._s3 .generate_presigned_url ("get_object" , Params = params )
9390
9491 return "{}://{}/{}/{}" .format (
9592 self ._http_scheme ,
@@ -104,7 +101,9 @@ def get_size(self, name: str) -> int:
104101 """
105102
106103 key = self .get_name (name )
107- return self ._bucket .Object (key ).content_length
104+ return self ._s3 .head_object (Bucket = self .AWS_S3_BUCKET_NAME , Key = key )[
105+ "ContentLength"
106+ ]
108107
109108 def write (self , file : BinaryIO , name : str ) -> str :
110109 """
@@ -118,9 +117,16 @@ def write(self, file: BinaryIO, name: str) -> str:
118117 "ACL" : self .AWS_DEFAULT_ACL ,
119118 "ContentType" : content_type or self .default_content_type ,
120119 }
121- self ._bucket .upload_fileobj (file , key , ExtraArgs = params )
120+ self ._s3 .upload_fileobj (file , self . AWS_S3_BUCKET_NAME , key , ExtraArgs = params )
122121 return key
123122
123+ def delete (self , name : str ) -> None :
124+ """
125+ Delete the file from S3
126+ """
127+
128+ self ._s3 .delete_object (Bucket = self .AWS_S3_BUCKET_NAME , Key = self .get_name (name ))
129+
124130 def generate_new_filename (self , filename : str ) -> str :
125131 key = self .get_name (filename )
126132 stem = Path (filename ).stem
@@ -136,7 +142,7 @@ def generate_new_filename(self, filename: str) -> str:
136142
137143 def _check_object_exists (self , key : str ) -> bool :
138144 try :
139- self ._bucket . Object ( key ). load ( )
145+ self ._s3 . head_object ( Bucket = self . AWS_S3_BUCKET_NAME , Key = key )
140146 except boto3 .exceptions .botocore .exceptions .ClientError as e :
141147 if e .response ["Error" ]["Code" ] == "404" :
142148 return False
0 commit comments