def _do_call_api()

in client/securedrop_client/api_jobs/base.py [0:0]


    def _do_call_api(self, api_client: API | None, session: Session) -> None:
        if not api_client:
            raise ApiInaccessibleError()

        while self.remaining_attempts >= 1:
            try:
                self.remaining_attempts -= 1
                result = self.call_api(api_client, session)
            except (AuthError, ApiInaccessibleError) as e:
                raise ApiInaccessibleError() from e
            except (RequestTimeoutError, ServerConnectionError) as e:
                if self.remaining_attempts == 0:
                    self.failure_signal.emit(e)
                    raise
                # Timeout errors may mean the user should try changing Tor circuits
                elif isinstance(e, RequestTimeoutError):
                    logger.info("Encountered RequestTimeoutError, retrying API call")
            except Exception as e:
                self.failure_signal.emit(e)
                raise
            else:
                self.success_signal.emit(result)
                break