• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import time
2import traceback
3import urllib
4import urllib.parse
5import xmlrpc
6import xmlrpc.client
7
8import lavacli
9
10from .log_follower import fatal_err, print_log
11
12
13def setup_lava_proxy():
14    config = lavacli.load_config("default")
15    uri, usr, tok = (config.get(key) for key in ("uri", "username", "token"))
16    uri_obj = urllib.parse.urlparse(uri)
17    uri_str = f"{uri_obj.scheme}://{usr}:{tok}@{uri_obj.netloc}{uri_obj.path}"
18    transport = lavacli.RequestsTransport(
19        uri_obj.scheme,
20        config.get("proxy"),
21        config.get("timeout", 120.0),
22        config.get("verify_ssl_cert", True),
23    )
24    proxy = xmlrpc.client.ServerProxy(uri_str, allow_none=True, transport=transport)
25
26    return proxy
27
28
29def call_proxy(fn, *args):
30    retries = 60
31    for n in range(1, retries + 1):
32        try:
33            return fn(*args)
34        except xmlrpc.client.ProtocolError as err:
35            if n == retries:
36                traceback.print_exc()
37                fatal_err(f"A protocol error occurred (Err {err.errcode} {err.errmsg})")
38            else:
39                time.sleep(15)
40        except xmlrpc.client.Fault as err:
41            traceback.print_exc()
42            fatal_err(f"FATAL: Fault: {err.faultString} (code: {err.faultCode})", err)
43