@@ -28,41 +28,40 @@ def setUp(self):
2828 p .start ()
2929 self .addCleanup (p .stop )
3030
31- def test_media_url ( self ):
32- filename = "test"
31+ @ patch ( "superdesk.storage.amazon_media_storage.ObjectId" , return_value = "507f1f77bcf86cd799439011" )
32+ def test_media_url ( self , _mock_object_id ):
3333 # automatic version is set on hourly granularity.
3434 time_id = time .strftime ("%Y%m%d%H" )
35- media_id = self .amazon .media_id (filename )
36- self .assertEqual ("%s/%s" % ( time_id , filename ) , media_id )
35+ media_id = self .amazon .media_id ()
36+ self .assertEqual (f" { time_id } /507f1f77bcf86cd799439011" , media_id )
3737 self .assertEqual (self .amazon .url_for_media (media_id ), "https://acname.s3-us-east-1.amazonaws.com/%s" % media_id )
3838 sub = "test-sub"
3939 settings = {"AMAZON_S3_SUBFOLDER" : sub , "MEDIA_PREFIX" : "https://acname.s3-us-east-1.amazonaws.com/" + sub }
4040 with patch .dict (self .app .config , settings ):
41- media_id = self .amazon .media_id (filename )
42- self .assertEqual ("%s/%s" % ( time_id , filename ) , media_id )
41+ media_id = self .amazon .media_id ()
42+ self .assertEqual (f" { time_id } /507f1f77bcf86cd799439011" , media_id )
4343 path = "%s/%s" % (sub , media_id )
4444 self .assertEqual (self .amazon .url_for_media (media_id ), "https://acname.s3-us-east-1.amazonaws.com/%s" % path )
4545 with patch .object (self .amazon , "client" ) as s3 :
4646 self .amazon .get (media_id )
4747 self .assertTrue (s3 .get_object .called )
4848 self .assertEqual (s3 .get_object .call_args [1 ], dict (Bucket = "acname" , Key = path ))
4949
50- def test_media_id_time_prefix (self ):
51- filename = "test"
52-
50+ @patch ("superdesk.storage.amazon_media_storage.ObjectId" , return_value = "507f1f77bcf86cd799439011" )
51+ def test_media_id_time_prefix (self , _mock_object_id ):
5352 with patch .dict (self .app .config , {"AMAZON_MEDIA_ID_TIME_PREFIX" : "none" }):
54- media_id = self .amazon .media_id (filename )
55- self .assertEqual (filename , media_id )
53+ media_id = self .amazon .media_id ()
54+ self .assertEqual ("507f1f77bcf86cd799439011" , media_id )
5655
5756 with patch ("superdesk.storage.amazon_media_storage.time.strftime" , return_value = "20260102" ):
5857 with patch .dict (self .app .config , {"AMAZON_MEDIA_ID_TIME_PREFIX" : "daily" }):
59- media_id = self .amazon .media_id (filename )
60- self .assertEqual ("20260102/%s" % filename , media_id )
58+ media_id = self .amazon .media_id ()
59+ self .assertEqual ("20260102/507f1f77bcf86cd799439011" , media_id )
6160
6261 with patch ("superdesk.storage.amazon_media_storage.time.strftime" , return_value = "2026010215" ):
6362 with patch .dict (self .app .config , {"AMAZON_MEDIA_ID_TIME_PREFIX" : "hourly" }):
64- media_id = self .amazon .media_id (filename )
65- self .assertEqual ("2026010215/%s" % filename , media_id )
63+ media_id = self .amazon .media_id ()
64+ self .assertEqual ("2026010215/507f1f77bcf86cd799439011" , media_id )
6665
6766 def test_put_and_delete (self ):
6867 """Test amazon if configured.
@@ -83,22 +82,24 @@ def test_put_and_delete(self):
8382 else :
8483 self .assertTrue (True )
8584
86- def test_put_into_folder (self ):
85+ @patch ("superdesk.storage.amazon_media_storage.ObjectId" , return_value = "507f1f77bcf86cd799439011" )
86+ @patch ("superdesk.storage.amazon_media_storage.time.strftime" , return_value = "2026010215" )
87+ def test_put_into_folder (self , mock_time_strftime , _mock_object_id ):
8788 data = b"test data"
8889 folder = "s3test"
8990 filename = "abc123.zip"
9091 content_type = "application/zip"
9192 self .amazon .client .put_object = Mock ()
92- self .amazon .media_id = Mock (return_value = filename )
9393 self .amazon ._check_exists = Mock (return_value = False )
9494
9595 self .amazon .put (data , filename , content_type , folder = folder )
9696
9797 kwargs = {
98- "Key" : "{}/{}" . format ( folder , filename ) ,
98+ "Key" : f" { folder } /2026010215/507f1f77bcf86cd799439011" ,
9999 "Body" : data ,
100100 "Bucket" : "acname" ,
101101 "ContentType" : content_type ,
102+ "Metadata" : {"filename" : filename },
102103 }
103104 self .amazon .client .put_object .assert_called_once_with (** kwargs )
104105
@@ -147,30 +148,28 @@ def test_guess_extension(self):
147148 # leave empty when there is no extension
148149 self .assertEqual ("" , guess_media_extension ("audio/foo" ))
149150
150- def test_media_url_none_utf8 (self ):
151+ @patch ("superdesk.storage.amazon_media_storage.ObjectId" , return_value = "507f1f77bcf86cd799439011" )
152+ def test_media_url_none_utf8 (self , _mock_object_id ):
151153 filename = "[DIARY NOTE] – Victory In The Pacific Day Commemoration - Thursday (1)"
152154 # automatic version is set on hourly granularity.
153155 time_id = time .strftime ("%Y%m%d%H" )
154- media_id = self .amazon .media_id (filename )
155- self .assertEqual (
156- "%s/%s" % (time_id , "DIARY NOTE - Victory In The Pacific Day Commemoration - Thursday (1)" ), media_id
157- )
156+ media_id = self .amazon .media_id ()
157+ self .assertEqual (f"{ time_id } /507f1f77bcf86cd799439011" , media_id )
158158 self .assertEqual (self .amazon .url_for_media (media_id ), "https://acname.s3-us-east-1.amazonaws.com/%s" % media_id )
159159 sub = "test-sub"
160160 settings = {"AMAZON_S3_SUBFOLDER" : sub , "MEDIA_PREFIX" : "https://acname.s3-us-east-1.amazonaws.com/" + sub }
161161 with patch .dict (self .app .config , settings ):
162- media_id = self .amazon .media_id (filename )
163- self .assertEqual (
164- "%s/%s" % (time_id , "DIARY NOTE - Victory In The Pacific Day Commemoration - Thursday (1)" ), media_id
165- )
162+ media_id = self .amazon .media_id ()
163+ self .assertEqual (f"{ time_id } /507f1f77bcf86cd799439011" , media_id )
166164 path = "%s/%s" % (sub , media_id )
167165 self .assertEqual (self .amazon .url_for_media (media_id ), "https://acname.s3-us-east-1.amazonaws.com/%s" % path )
168166 with patch .object (self .amazon , "client" ) as s3 :
169167 self .amazon .get (media_id )
170168 self .assertTrue (s3 .get_object .called )
171169 self .assertEqual (s3 .get_object .call_args [1 ], dict (Bucket = "acname" , Key = path ))
172170
173- def test_put_into_folder_none_utf8 (self ):
171+ @patch ("superdesk.storage.amazon_media_storage.ObjectId" , return_value = "507f1f77bcf86cd799439011" )
172+ def test_put_into_folder_none_utf8 (self , _mock_object_id ):
174173 data = b"test data"
175174 folder = "s3test"
176175 filename = "[DIARY NOTE] – Victory In The Pacific Day Commemoration - Thursday (1).pdf"
@@ -181,10 +180,11 @@ def test_put_into_folder_none_utf8(self):
181180 self .amazon .put (data , filename , content_type , folder = folder , version = False )
182181
183182 kwargs = {
184- "Key" : "{}/{}" . format ( folder , "DIARY NOTE - Victory In The Pacific Day Commemoration - Thursday (1).pdf" ) ,
183+ "Key" : f" { folder } /507f1f77bcf86cd799439011" ,
185184 "Body" : data ,
186185 "Bucket" : "acname" ,
187186 "ContentType" : content_type ,
187+ "Metadata" : {"filename" : "DIARY NOTE - Victory In The Pacific Day Commemoration - Thursday (1).pdf" },
188188 }
189189 self .amazon .client .put_object .assert_called_once_with (** kwargs )
190190
@@ -197,22 +197,24 @@ def test_get_none_utf8(self):
197197 kwargs = {"Bucket" : "acname" , "Key" : "DIARY NOTE - Victory In The Pacific Day Commemoration - Thursday (1).pdf" }
198198 self .amazon .client .get_object .assert_called_once_with (** kwargs )
199199
200- def test_mimetype_detect (self ):
200+ @patch ("superdesk.storage.amazon_media_storage.ObjectId" , return_value = "507f1f77bcf86cd799439011" )
201+ @patch ("superdesk.storage.amazon_media_storage.time.strftime" , return_value = "2026010215" )
202+ def test_mimetype_detect (self , mock_time_strftime , _mock_object_id ):
201203 # keep default mimetype
202204 content = b"bytes are here"
203205 filename = "extensionless"
204206 content_type = "text/css"
205207 folder = "f1"
206208 self .amazon .client .put_object = Mock ()
207209 self .amazon ._check_exists = Mock (return_value = False )
208- self .amazon .media_id = Mock (return_value = filename )
209210 self .amazon .put (content , filename , content_type , folder = folder )
210211 self .amazon .client .put_object .assert_called_once_with (
211212 ** {
212- "Key" : "{}/{}" . format ( folder , filename ) ,
213+ "Key" : f" { folder } /2026010215/507f1f77bcf86cd799439011" ,
213214 "Body" : content ,
214215 "Bucket" : "acname" ,
215216 "ContentType" : content_type ,
217+ "Metadata" : {"filename" : filename },
216218 }
217219 )
218220
@@ -223,14 +225,14 @@ def test_mimetype_detect(self):
223225 folder = "f1"
224226 self .amazon .client .put_object = Mock ()
225227 self .amazon ._check_exists = Mock (return_value = False )
226- self .amazon .media_id = Mock (return_value = filename )
227228 self .amazon .put (content , filename , content_type , folder = folder )
228229 self .amazon .client .put_object .assert_called_once_with (
229230 ** {
230- "Key" : "{}/{}" . format ( folder , filename ) ,
231+ "Key" : f" { folder } /2026010215/507f1f77bcf86cd799439011" ,
231232 "Body" : b"bytes are here" ,
232233 "Bucket" : "acname" ,
233234 "ContentType" : "text/css" ,
235+ "Metadata" : {"filename" : filename },
234236 }
235237 )
236238
@@ -240,14 +242,14 @@ def test_mimetype_detect(self):
240242 folder = "f1"
241243 self .amazon .client .put_object = Mock ()
242244 self .amazon ._check_exists = Mock (return_value = False )
243- self .amazon .media_id = Mock (return_value = filename )
244245 self .amazon .put (content , filename , content_type , folder = folder )
245246 self .amazon .client .put_object .assert_called_once_with (
246247 ** {
247- "Key" : "{}/{}" . format ( folder , filename ) ,
248+ "Key" : f" { folder } /2026010215/507f1f77bcf86cd799439011" ,
248249 "Body" : b"bytes are here" ,
249250 "Bucket" : "acname" ,
250251 "ContentType" : "image/jpeg" ,
252+ "Metadata" : {"filename" : filename },
251253 }
252254 )
253255
@@ -260,14 +262,14 @@ def test_mimetype_detect(self):
260262 folder = "f1"
261263 self .amazon .client .put_object = Mock ()
262264 self .amazon ._check_exists = Mock (return_value = False )
263- self .amazon .media_id = Mock (return_value = filename )
264265 self .amazon .put (content , filename , content_type , folder = folder )
265266 self .amazon .client .put_object .assert_called_once_with (
266267 ** {
267- "Key" : "{}/{}" . format ( folder , filename ) ,
268+ "Key" : f" { folder } /2026010215/507f1f77bcf86cd799439011" ,
268269 "Body" : content ,
269270 "Bucket" : "acname" ,
270271 "ContentType" : "image/jpeg" ,
272+ "Metadata" : {"filename" : filename },
271273 }
272274 )
273275
@@ -277,14 +279,14 @@ def test_mimetype_detect(self):
277279 folder = "f1"
278280 self .amazon .client .put_object = Mock ()
279281 self .amazon ._check_exists = Mock (return_value = False )
280- self .amazon .media_id = Mock (return_value = filename )
281282 self .amazon .put (content , filename , content_type , folder = folder )
282283 self .amazon .client .put_object .assert_called_once_with (
283284 ** {
284- "Key" : "{}/{}" . format ( folder , filename ) ,
285+ "Key" : f" { folder } /2026010215/507f1f77bcf86cd799439011" ,
285286 "Body" : content ,
286287 "Bucket" : "acname" ,
287288 "ContentType" : "application/vnd.ms-excel" ,
289+ "Metadata" : {"filename" : filename },
288290 }
289291 )
290292
@@ -294,14 +296,14 @@ def test_mimetype_detect(self):
294296 folder = "f1"
295297 self .amazon .client .put_object = Mock ()
296298 self .amazon ._check_exists = Mock (return_value = False )
297- self .amazon .media_id = Mock (return_value = filename )
298299 self .amazon .put (content , filename , content_type , folder = folder )
299300 self .amazon .client .put_object .assert_called_once_with (
300301 ** {
301- "Key" : "{}/{}" . format ( folder , filename ) ,
302+ "Key" : f" { folder } /2026010215/507f1f77bcf86cd799439011" ,
302303 "Body" : content ,
303304 "Bucket" : "acname" ,
304305 "ContentType" : "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ,
306+ "Metadata" : {"filename" : filename },
305307 }
306308 )
307309
@@ -311,13 +313,13 @@ def test_mimetype_detect(self):
311313 folder = "f1"
312314 self .amazon .client .put_object = Mock ()
313315 self .amazon ._check_exists = Mock (return_value = False )
314- self .amazon .media_id = Mock (return_value = filename )
315316 self .amazon .put (content , filename , content_type , folder = folder )
316317 self .amazon .client .put_object .assert_called_once_with (
317318 ** {
318- "Key" : "{}/{}" . format ( folder , filename ) ,
319+ "Key" : f" { folder } /2026010215/507f1f77bcf86cd799439011" ,
319320 "Body" : content ,
320321 "Bucket" : "acname" ,
321322 "ContentType" : "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ,
323+ "Metadata" : {"filename" : filename },
322324 }
323325 )
0 commit comments