summary refs log tree commit diff
path: root/synapse/rest/media/v1/storage_provider.py
diff options
context:
space:
mode:
authorBrendan Abolivier <babolivier@matrix.org>2020-08-13 11:45:08 +0100
committerBrendan Abolivier <babolivier@matrix.org>2020-08-13 11:45:08 +0100
commit527f73d902001d7d4ba4df402866d7ccff3e9b6d (patch)
tree5e8876654b13ebf186ff19233e67612b5da8420c /synapse/rest/media/v1/storage_provider.py
parentMerge branch 'develop' into matrix-org-hotfixes (diff)
parentConvert the roommember database to async/await. (#8070) (diff)
downloadsynapse-527f73d902001d7d4ba4df402866d7ccff3e9b6d.tar.xz
Merge branch 'develop' into matrix-org-hotfixes
Diffstat (limited to 'synapse/rest/media/v1/storage_provider.py')
-rw-r--r--synapse/rest/media/v1/storage_provider.py19
1 files changed, 15 insertions, 4 deletions
diff --git a/synapse/rest/media/v1/storage_provider.py b/synapse/rest/media/v1/storage_provider.py

index a33f56e806..18c9ed48d6 100644 --- a/synapse/rest/media/v1/storage_provider.py +++ b/synapse/rest/media/v1/storage_provider.py
@@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import inspect import logging import os import shutil @@ -88,12 +89,18 @@ class StorageProviderWrapper(StorageProvider): return None if self.store_synchronous: - return await self.backend.store_file(path, file_info) + # store_file is supposed to return an Awaitable, but guard + # against improper implementations. + result = self.backend.store_file(path, file_info) + if inspect.isawaitable(result): + return await result else: # TODO: Handle errors. - def store(): + async def store(): try: - return self.backend.store_file(path, file_info) + result = self.backend.store_file(path, file_info) + if inspect.isawaitable(result): + return await result except Exception: logger.exception("Error storing file") @@ -101,7 +108,11 @@ class StorageProviderWrapper(StorageProvider): return None async def fetch(self, path, file_info): - return await self.backend.fetch(path, file_info) + # store_file is supposed to return an Awaitable, but guard + # against improper implementations. + result = self.backend.fetch(path, file_info) + if inspect.isawaitable(result): + return await result class FileStorageProviderBackend(StorageProvider):