2
2
import mimetypes
3
3
import posixpath
4
4
import typing as T
5
- import urllib
6
5
from logging import getLogger
7
- from urllib .parse import urlsplit , urlunsplit
6
+ from urllib .parse import quote , urlsplit , urlunsplit
8
7
9
8
import minio
10
9
import minio .error as merr
@@ -119,10 +118,6 @@ def _create_base_url_client(client: minio.Minio, bucket_name: str, base_url: str
119
118
region = client ._get_region (bucket_name , None ),
120
119
http_client = client ._http ,
121
120
)
122
- if hasattr (client , "_credentials" ):
123
- # Client credentials do not exist prior to minio-py 5.0.7, but
124
- # they should be reused if possible
125
- base_url_client ._credentials = client ._credentials
126
121
127
122
return base_url_client
128
123
@@ -154,7 +149,7 @@ def _open(self, name, mode="rb"):
154
149
raise minio_error (f"File { name } could not be saved: { str (e )} " , e )
155
150
return f
156
151
157
- def _save (self , name : str , content : bytes ) -> str :
152
+ def _save (self , name : str , content : T . BinaryIO ) -> str :
158
153
try :
159
154
if hasattr (content , "seek" ) and callable (content .seek ):
160
155
content .seek (0 )
@@ -212,16 +207,15 @@ def exists(self, name: str) -> bool:
212
207
return True
213
208
except merr .InvalidResponseError as error :
214
209
# TODO - deprecate
215
- if error .code == "NoSuchKey" :
210
+ if error ._code == "NoSuchKey" :
216
211
return False
217
212
else :
218
213
raise minio_error (f"Could not stat file { name } " , error )
219
214
except merr .S3Error :
220
215
return False
221
- except merr .S3Error :
222
- raise
223
216
except Exception as error :
224
217
logger .error (error )
218
+ return False
225
219
226
220
def listdir (self , path : str ) -> T .Tuple [T .List , T .List ]:
227
221
# [None, "", "."] is supported to mean the configured root among various
@@ -263,7 +257,7 @@ def size(self, name: str) -> int:
263
257
264
258
def _presigned_url (
265
259
self , name : str , max_age : T .Optional [datetime .timedelta ] = None
266
- ) -> str :
260
+ ) -> T . Optional [ str ] :
267
261
kwargs = {}
268
262
if max_age is not None :
269
263
kwargs ["expires" ] = max_age
@@ -293,11 +287,14 @@ def _presigned_url(
293
287
url_parts .fragment ,
294
288
)
295
289
)
296
- return url
290
+ if url :
291
+ return str (url )
292
+ return None
297
293
298
294
def url (
299
295
self , name : str , * args , max_age : T .Optional [datetime .timedelta ] = None
300
- ) -> str :
296
+ ) -> T .Optional [str ]:
297
+ url = ""
301
298
if self .presign_urls :
302
299
url = self ._presigned_url (name , max_age = max_age )
303
300
else :
@@ -313,14 +310,12 @@ def strip_end(path):
313
310
return path
314
311
315
312
if self .base_url is not None :
316
- url = "{}/{}" .format (
317
- strip_end (self .base_url ), urllib .parse .quote (strip_beg (name ))
318
- )
313
+ url = "{}/{}" .format (strip_end (self .base_url ), quote (strip_beg (name )))
319
314
else :
320
315
url = "{}/{}/{}" .format (
321
316
strip_end (self .endpoint_url ),
322
317
self .bucket_name ,
323
- urllib . parse . quote (strip_beg (name )),
318
+ quote (strip_beg (name )),
324
319
)
325
320
return url
326
321
@@ -353,7 +348,7 @@ def modified_time(self, name: str) -> datetime.datetime:
353
348
_NoValue = object ()
354
349
355
350
356
- def get_setting (name , default = _NoValue ):
351
+ def get_setting (name : str , default = _NoValue ) -> T . Any :
357
352
result = getattr (settings , name , default )
358
353
if result is _NoValue :
359
354
# print("Attr {} : {}".format(name, getattr(settings, name, default)))
0 commit comments