MCPcopy Create free account
hub / github.com/blacklanternsecurity/bbot / _infinite_retry

Method _infinite_retry

bbot/core/engine.py:67–82  ·  view source on GitHub ↗
(self, callback, *args, **kwargs)

Source from the content-addressed store, hash-verified

65 return error_sentinel
66
67 async def _infinite_retry(self, callback, *args, **kwargs):
68 interval = kwargs.pop("_interval", 300)
69 context = kwargs.pop("_context", "")
70 # default overall timeout of 10 minutes (300 second interval * 2 iterations)
71 max_retries = kwargs.pop("_max_retries", 1)
72 if not context:
73 context = f"{callback.__name__}({args}, {kwargs})"
74 retries = 0
75 while not self._shutdown_status:
76 try:
77 return await asyncio.wait_for(callback(*args, **kwargs), timeout=interval)
78 except (TimeoutError, asyncio.exceptions.TimeoutError):
79 self.log.debug(f"{self.name}: Timeout after {interval:,} seconds {context}, retrying...")
80 retries += 1
81 if max_retries is not None and retries > max_retries:
82 raise TimeoutError(f"Timed out after {(max_retries + 1) * interval:,} seconds {context}")
83
84 def engine_debug(self, *args, **kwargs):
85 if self._engine_debug:

Callers 4

run_and_returnMethod · 0.80
run_and_yieldMethod · 0.80
send_cancel_messageMethod · 0.80
send_socket_multipartMethod · 0.80

Calls 2

popMethod · 0.80
debugMethod · 0.45

Tested by

no test coverage detected