From 8be6b93c3839517e213448f3e188e6c3390648a4 Mon Sep 17 00:00:00 2001 From: Hagen Wierstorf Date: Mon, 11 Nov 2024 14:11:26 +0100 Subject: [PATCH 1/2] Retry if call function on backend fails --- audbackend/core/utils.py | 41 +++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/audbackend/core/utils.py b/audbackend/core/utils.py index 262d957b..2b85c769 100644 --- a/audbackend/core/utils.py +++ b/audbackend/core/utils.py @@ -3,6 +3,7 @@ import errno import os import re +import time import audeer @@ -23,15 +24,41 @@ def call_function_on_backend( *args, suppress_backend_errors: bool = False, fallback_return_value: object = None, + retries: int = 3, **kwargs, ) -> object: - try: - return function(*args, **kwargs) - except Exception as ex: - if suppress_backend_errors: - return fallback_return_value - else: - raise BackendError(ex) + r"""Call function on backend. + + Args: + function: function to call on backend + suppress_backend_errors: if ``True`` + and ``function`` fails during execution, + ``fallback_return_value`` is returned + instead of raising an error + fallback_return_value: value returned + if ``function`` fails during execution + and ``suppress_backend_errors`` is ``True`` + retries: number of times ``function`` + is tried to execute + when it raises an error, + before raising the error + *args: positional args of ``function`` + **kwargs: keyword arguments of ``function`` + + Returns: + return value(s) of ``function`` + + """ + for retry in range(retries): + try: + return function(*args, **kwargs) + except Exception as ex: + if suppress_backend_errors: + return fallback_return_value + else: + if retry + 1 == retries: + raise BackendError(ex) + time.sleep(0.05) def check_path( From 56d775811106f75fa2af3051cada35930c06b902 Mon Sep 17 00:00:00 2001 From: Hagen Wierstorf Date: Fri, 15 Nov 2024 20:25:58 +0100 Subject: [PATCH 2/2] Improve code and error chaining Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com> --- audbackend/core/utils.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/audbackend/core/utils.py b/audbackend/core/utils.py index 2b85c769..e7a9aca8 100644 --- a/audbackend/core/utils.py +++ b/audbackend/core/utils.py @@ -55,10 +55,9 @@ def call_function_on_backend( except Exception as ex: if suppress_backend_errors: return fallback_return_value - else: - if retry + 1 == retries: - raise BackendError(ex) - time.sleep(0.05) + if retry + 1 == retries: + raise BackendError(ex) from ex + time.sleep(0.05) def check_path(