12
12
from django .core .files .storage import Storage
13
13
from django .utils import timezone
14
14
from django .utils .deconstruct import deconstructible
15
+ from minio .datatypes import Object
15
16
16
17
from minio_storage .errors import minio_error
17
18
from minio_storage .files import ReadOnlySpooledTemporaryFile
@@ -106,12 +107,9 @@ def _create_base_url_client(client: minio.Minio, bucket_name: str, base_url: str
106
107
base_url_parts = urlsplit (base_url )
107
108
108
109
# Clone from the normal client, but with base_url as the endpoint
109
- credentials = client ._provider .retrieve ()
110
110
base_url_client = minio .Minio (
111
111
base_url_parts .netloc ,
112
- access_key = credentials .access_key ,
113
- secret_key = credentials .secret_key ,
114
- session_token = credentials .session_token ,
112
+ credentials = client ._provider ,
115
113
secure = base_url_parts .scheme == "https" ,
116
114
# The bucket region may be auto-detected by client (via an HTTP
117
115
# request), so don't just use client._region
@@ -250,8 +248,8 @@ def listdir(self, path: str) -> T.Tuple[T.List, T.List]:
250
248
251
249
def size (self , name : str ) -> int :
252
250
try :
253
- info = self .client .stat_object (self .bucket_name , name )
254
- return info .size
251
+ info : Object = self .client .stat_object (self .bucket_name , name )
252
+ return info .size # type: ignore
255
253
except merr .InvalidResponseError as error :
256
254
raise minio_error (f"Could not access file size for { name } " , error )
257
255
@@ -293,7 +291,7 @@ def _presigned_url(
293
291
294
292
def url (
295
293
self , name : str , * args , max_age : T .Optional [datetime .timedelta ] = None
296
- ) -> T . Optional [ str ] :
294
+ ) -> str :
297
295
url = ""
298
296
if self .presign_urls :
299
297
url = self ._presigned_url (name , max_age = max_age )
@@ -317,7 +315,9 @@ def strip_end(path):
317
315
self .bucket_name ,
318
316
quote (strip_beg (name )),
319
317
)
320
- return url
318
+ if url :
319
+ return url
320
+ raise OSError (f"could not produce URL for { name } " )
321
321
322
322
@property
323
323
def endpoint_url (self ):
@@ -337,12 +337,14 @@ def created_time(self, name: str) -> datetime.datetime:
337
337
338
338
def modified_time (self , name : str ) -> datetime .datetime :
339
339
try :
340
- info = self .client .stat_object (self .bucket_name , name )
341
- return info .last_modified
340
+ info : Object = self .client .stat_object (self .bucket_name , name )
341
+ if info .last_modified :
342
+ return info .last_modified # type: ignore
342
343
except merr .InvalidResponseError as error :
343
344
raise minio_error (
344
345
f"Could not access modification time for file { name } " , error
345
346
)
347
+ raise OSError (f"Could not access modification time for file { name } " )
346
348
347
349
348
350
_NoValue = object ()
0 commit comments