2424
2525import twisted .internet .error
2626import twisted .web .http
27- from twisted .internet import defer
2827from twisted .web .resource import Resource
2928
3029from synapse .api .errors import (
@@ -114,15 +113,14 @@ def _start_update_recently_accessed(self):
114113 "update_recently_accessed_media" , self ._update_recently_accessed
115114 )
116115
117- @defer .inlineCallbacks
118- def _update_recently_accessed (self ):
116+ async def _update_recently_accessed (self ):
119117 remote_media = self .recently_accessed_remotes
120118 self .recently_accessed_remotes = set ()
121119
122120 local_media = self .recently_accessed_locals
123121 self .recently_accessed_locals = set ()
124122
125- yield self .store .update_cached_last_access_time (
123+ await self .store .update_cached_last_access_time (
126124 local_media , remote_media , self .clock .time_msec ()
127125 )
128126
@@ -138,8 +136,7 @@ def mark_recently_accessed(self, server_name, media_id):
138136 else :
139137 self .recently_accessed_locals .add (media_id )
140138
141- @defer .inlineCallbacks
142- def create_content (
139+ async def create_content (
143140 self , media_type , upload_name , content , content_length , auth_user
144141 ):
145142 """Store uploaded content for a local user and return the mxc URL
@@ -158,11 +155,11 @@ def create_content(
158155
159156 file_info = FileInfo (server_name = None , file_id = media_id )
160157
161- fname = yield self .media_storage .store_file (content , file_info )
158+ fname = await self .media_storage .store_file (content , file_info )
162159
163160 logger .info ("Stored local media in file %r" , fname )
164161
165- yield self .store .store_local_media (
162+ await self .store .store_local_media (
166163 media_id = media_id ,
167164 media_type = media_type ,
168165 time_now_ms = self .clock .time_msec (),
@@ -171,12 +168,11 @@ def create_content(
171168 user_id = auth_user ,
172169 )
173170
174- yield self ._generate_thumbnails (None , media_id , media_id , media_type )
171+ await self ._generate_thumbnails (None , media_id , media_id , media_type )
175172
176173 return "mxc://%s/%s" % (self .server_name , media_id )
177174
178- @defer .inlineCallbacks
179- def get_local_media (self , request , media_id , name ):
175+ async def get_local_media (self , request , media_id , name ):
180176 """Responds to reqests for local media, if exists, or returns 404.
181177
182178 Args:
@@ -190,7 +186,7 @@ def get_local_media(self, request, media_id, name):
190186 Deferred: Resolves once a response has successfully been written
191187 to request
192188 """
193- media_info = yield self .store .get_local_media (media_id )
189+ media_info = await self .store .get_local_media (media_id )
194190 if not media_info or media_info ["quarantined_by" ]:
195191 respond_404 (request )
196192 return
@@ -204,13 +200,12 @@ def get_local_media(self, request, media_id, name):
204200
205201 file_info = FileInfo (None , media_id , url_cache = url_cache )
206202
207- responder = yield self .media_storage .fetch_media (file_info )
208- yield respond_with_responder (
203+ responder = await self .media_storage .fetch_media (file_info )
204+ await respond_with_responder (
209205 request , responder , media_type , media_length , upload_name
210206 )
211207
212- @defer .inlineCallbacks
213- def get_remote_media (self , request , server_name , media_id , name ):
208+ async def get_remote_media (self , request , server_name , media_id , name ):
214209 """Respond to requests for remote media.
215210
216211 Args:
@@ -236,8 +231,8 @@ def get_remote_media(self, request, server_name, media_id, name):
236231 # We linearize here to ensure that we don't try and download remote
237232 # media multiple times concurrently
238233 key = (server_name , media_id )
239- with (yield self .remote_media_linearizer .queue (key )):
240- responder , media_info = yield self ._get_remote_media_impl (
234+ with (await self .remote_media_linearizer .queue (key )):
235+ responder , media_info = await self ._get_remote_media_impl (
241236 server_name , media_id
242237 )
243238
@@ -246,14 +241,13 @@ def get_remote_media(self, request, server_name, media_id, name):
246241 media_type = media_info ["media_type" ]
247242 media_length = media_info ["media_length" ]
248243 upload_name = name if name else media_info ["upload_name" ]
249- yield respond_with_responder (
244+ await respond_with_responder (
250245 request , responder , media_type , media_length , upload_name
251246 )
252247 else :
253248 respond_404 (request )
254249
255- @defer .inlineCallbacks
256- def get_remote_media_info (self , server_name , media_id ):
250+ async def get_remote_media_info (self , server_name , media_id ):
257251 """Gets the media info associated with the remote file, downloading
258252 if necessary.
259253
@@ -274,8 +268,8 @@ def get_remote_media_info(self, server_name, media_id):
274268 # We linearize here to ensure that we don't try and download remote
275269 # media multiple times concurrently
276270 key = (server_name , media_id )
277- with (yield self .remote_media_linearizer .queue (key )):
278- responder , media_info = yield self ._get_remote_media_impl (
271+ with (await self .remote_media_linearizer .queue (key )):
272+ responder , media_info = await self ._get_remote_media_impl (
279273 server_name , media_id
280274 )
281275
@@ -286,8 +280,7 @@ def get_remote_media_info(self, server_name, media_id):
286280
287281 return media_info
288282
289- @defer .inlineCallbacks
290- def _get_remote_media_impl (self , server_name , media_id ):
283+ async def _get_remote_media_impl (self , server_name , media_id ):
291284 """Looks for media in local cache, if not there then attempt to
292285 download from remote server.
293286
@@ -299,7 +292,7 @@ def _get_remote_media_impl(self, server_name, media_id):
299292 Returns:
300293 Deferred[(Responder, media_info)]
301294 """
302- media_info = yield self .store .get_cached_remote_media (server_name , media_id )
295+ media_info = await self .store .get_cached_remote_media (server_name , media_id )
303296
304297 # file_id is the ID we use to track the file locally. If we've already
305298 # seen the file then reuse the existing ID, otherwise genereate a new
@@ -317,19 +310,18 @@ def _get_remote_media_impl(self, server_name, media_id):
317310 logger .info ("Media is quarantined" )
318311 raise NotFoundError ()
319312
320- responder = yield self .media_storage .fetch_media (file_info )
313+ responder = await self .media_storage .fetch_media (file_info )
321314 if responder :
322315 return responder , media_info
323316
324317 # Failed to find the file anywhere, lets download it.
325318
326- media_info = yield self ._download_remote_file (server_name , media_id , file_id )
319+ media_info = await self ._download_remote_file (server_name , media_id , file_id )
327320
328- responder = yield self .media_storage .fetch_media (file_info )
321+ responder = await self .media_storage .fetch_media (file_info )
329322 return responder , media_info
330323
331- @defer .inlineCallbacks
332- def _download_remote_file (self , server_name , media_id , file_id ):
324+ async def _download_remote_file (self , server_name , media_id , file_id ):
333325 """Attempt to download the remote file from the given server name,
334326 using the given file_id as the local id.
335327
@@ -351,7 +343,7 @@ def _download_remote_file(self, server_name, media_id, file_id):
351343 ("/_matrix/media/v1/download" , server_name , media_id )
352344 )
353345 try :
354- length , headers = yield self .client .get_file (
346+ length , headers = await self .client .get_file (
355347 server_name ,
356348 request_path ,
357349 output_stream = f ,
@@ -397,15 +389,15 @@ def _download_remote_file(self, server_name, media_id, file_id):
397389 )
398390 raise SynapseError (502 , "Failed to fetch remote media" )
399391
400- yield finish ()
392+ await finish ()
401393
402394 media_type = headers [b"Content-Type" ][0 ].decode ("ascii" )
403395 upload_name = get_filename_from_headers (headers )
404396 time_now_ms = self .clock .time_msec ()
405397
406398 logger .info ("Stored remote media in file %r" , fname )
407399
408- yield self .store .store_cached_remote_media (
400+ await self .store .store_cached_remote_media (
409401 origin = server_name ,
410402 media_id = media_id ,
411403 media_type = media_type ,
@@ -423,7 +415,7 @@ def _download_remote_file(self, server_name, media_id, file_id):
423415 "filesystem_id" : file_id ,
424416 }
425417
426- yield self ._generate_thumbnails (server_name , media_id , file_id , media_type )
418+ await self ._generate_thumbnails (server_name , media_id , file_id , media_type )
427419
428420 return media_info
429421
@@ -458,16 +450,15 @@ def _generate_thumbnail(self, thumbnailer, t_width, t_height, t_method, t_type):
458450
459451 return t_byte_source
460452
461- @defer .inlineCallbacks
462- def generate_local_exact_thumbnail (
453+ async def generate_local_exact_thumbnail (
463454 self , media_id , t_width , t_height , t_method , t_type , url_cache
464455 ):
465- input_path = yield self .media_storage .ensure_media_is_in_local_cache (
456+ input_path = await self .media_storage .ensure_media_is_in_local_cache (
466457 FileInfo (None , media_id , url_cache = url_cache )
467458 )
468459
469460 thumbnailer = Thumbnailer (input_path )
470- t_byte_source = yield defer_to_thread (
461+ t_byte_source = await defer_to_thread (
471462 self .hs .get_reactor (),
472463 self ._generate_thumbnail ,
473464 thumbnailer ,
@@ -490,7 +481,7 @@ def generate_local_exact_thumbnail(
490481 thumbnail_type = t_type ,
491482 )
492483
493- output_path = yield self .media_storage .store_file (
484+ output_path = await self .media_storage .store_file (
494485 t_byte_source , file_info
495486 )
496487 finally :
@@ -500,22 +491,21 @@ def generate_local_exact_thumbnail(
500491
501492 t_len = os .path .getsize (output_path )
502493
503- yield self .store .store_local_thumbnail (
494+ await self .store .store_local_thumbnail (
504495 media_id , t_width , t_height , t_type , t_method , t_len
505496 )
506497
507498 return output_path
508499
509- @defer .inlineCallbacks
510- def generate_remote_exact_thumbnail (
500+ async def generate_remote_exact_thumbnail (
511501 self , server_name , file_id , media_id , t_width , t_height , t_method , t_type
512502 ):
513- input_path = yield self .media_storage .ensure_media_is_in_local_cache (
503+ input_path = await self .media_storage .ensure_media_is_in_local_cache (
514504 FileInfo (server_name , file_id , url_cache = False )
515505 )
516506
517507 thumbnailer = Thumbnailer (input_path )
518- t_byte_source = yield defer_to_thread (
508+ t_byte_source = await defer_to_thread (
519509 self .hs .get_reactor (),
520510 self ._generate_thumbnail ,
521511 thumbnailer ,
@@ -537,7 +527,7 @@ def generate_remote_exact_thumbnail(
537527 thumbnail_type = t_type ,
538528 )
539529
540- output_path = yield self .media_storage .store_file (
530+ output_path = await self .media_storage .store_file (
541531 t_byte_source , file_info
542532 )
543533 finally :
@@ -547,7 +537,7 @@ def generate_remote_exact_thumbnail(
547537
548538 t_len = os .path .getsize (output_path )
549539
550- yield self .store .store_remote_media_thumbnail (
540+ await self .store .store_remote_media_thumbnail (
551541 server_name ,
552542 media_id ,
553543 file_id ,
@@ -560,8 +550,7 @@ def generate_remote_exact_thumbnail(
560550
561551 return output_path
562552
563- @defer .inlineCallbacks
564- def _generate_thumbnails (
553+ async def _generate_thumbnails (
565554 self , server_name , media_id , file_id , media_type , url_cache = False
566555 ):
567556 """Generate and store thumbnails for an image.
@@ -582,7 +571,7 @@ def _generate_thumbnails(
582571 if not requirements :
583572 return
584573
585- input_path = yield self .media_storage .ensure_media_is_in_local_cache (
574+ input_path = await self .media_storage .ensure_media_is_in_local_cache (
586575 FileInfo (server_name , file_id , url_cache = url_cache )
587576 )
588577
@@ -600,7 +589,7 @@ def _generate_thumbnails(
600589 return
601590
602591 if thumbnailer .transpose_method is not None :
603- m_width , m_height = yield defer_to_thread (
592+ m_width , m_height = await defer_to_thread (
604593 self .hs .get_reactor (), thumbnailer .transpose
605594 )
606595
@@ -620,11 +609,11 @@ def _generate_thumbnails(
620609 for (t_width , t_height , t_type ), t_method in iteritems (thumbnails ):
621610 # Generate the thumbnail
622611 if t_method == "crop" :
623- t_byte_source = yield defer_to_thread (
612+ t_byte_source = await defer_to_thread (
624613 self .hs .get_reactor (), thumbnailer .crop , t_width , t_height , t_type
625614 )
626615 elif t_method == "scale" :
627- t_byte_source = yield defer_to_thread (
616+ t_byte_source = await defer_to_thread (
628617 self .hs .get_reactor (), thumbnailer .scale , t_width , t_height , t_type
629618 )
630619 else :
@@ -646,7 +635,7 @@ def _generate_thumbnails(
646635 url_cache = url_cache ,
647636 )
648637
649- output_path = yield self .media_storage .store_file (
638+ output_path = await self .media_storage .store_file (
650639 t_byte_source , file_info
651640 )
652641 finally :
@@ -656,7 +645,7 @@ def _generate_thumbnails(
656645
657646 # Write to database
658647 if server_name :
659- yield self .store .store_remote_media_thumbnail (
648+ await self .store .store_remote_media_thumbnail (
660649 server_name ,
661650 media_id ,
662651 file_id ,
@@ -667,15 +656,14 @@ def _generate_thumbnails(
667656 t_len ,
668657 )
669658 else :
670- yield self .store .store_local_thumbnail (
659+ await self .store .store_local_thumbnail (
671660 media_id , t_width , t_height , t_type , t_method , t_len
672661 )
673662
674663 return {"width" : m_width , "height" : m_height }
675664
676- @defer .inlineCallbacks
677- def delete_old_remote_media (self , before_ts ):
678- old_media = yield self .store .get_remote_media_before (before_ts )
665+ async def delete_old_remote_media (self , before_ts ):
666+ old_media = await self .store .get_remote_media_before (before_ts )
679667
680668 deleted = 0
681669
@@ -689,7 +677,7 @@ def delete_old_remote_media(self, before_ts):
689677
690678 # TODO: Should we delete from the backup store
691679
692- with (yield self .remote_media_linearizer .queue (key )):
680+ with (await self .remote_media_linearizer .queue (key )):
693681 full_path = self .filepaths .remote_media_filepath (origin , file_id )
694682 try :
695683 os .remove (full_path )
@@ -705,7 +693,7 @@ def delete_old_remote_media(self, before_ts):
705693 )
706694 shutil .rmtree (thumbnail_dir , ignore_errors = True )
707695
708- yield self .store .delete_remote_media (origin , media_id )
696+ await self .store .delete_remote_media (origin , media_id )
709697 deleted += 1
710698
711699 return {"deleted" : deleted }
0 commit comments