rpc.py revision be630eb07ddb84310fcc580acffcaa362a2dc606
1be630eb07ddb84310fcc580acffcaa362a2dc606mbligh# 2be630eb07ddb84310fcc580acffcaa362a2dc606mbligh# Copyright 2008 Google Inc. All Rights Reserved. 3be630eb07ddb84310fcc580acffcaa362a2dc606mbligh# 4be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 5be630eb07ddb84310fcc580acffcaa362a2dc606mblighimport os, getpass 6be630eb07ddb84310fcc580acffcaa362a2dc606mblighfrom autotest_lib.frontend.afe import rpc_client_lib 7be630eb07ddb84310fcc580acffcaa362a2dc606mblighfrom autotest_lib.frontend.afe.json_rpc import proxy 8be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 9be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 10be630eb07ddb84310fcc580acffcaa362a2dc606mblighdef get_autotest_server(web_server=None): 11be630eb07ddb84310fcc580acffcaa362a2dc606mbligh if not web_server: 12be630eb07ddb84310fcc580acffcaa362a2dc606mbligh if 'AUTOTEST_WEB' in os.environ: 13be630eb07ddb84310fcc580acffcaa362a2dc606mbligh web_server = os.environ['AUTOTEST_WEB'] 14be630eb07ddb84310fcc580acffcaa362a2dc606mbligh else: 15be630eb07ddb84310fcc580acffcaa362a2dc606mbligh web_server = 'http://autotest' 16be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 17be630eb07ddb84310fcc580acffcaa362a2dc606mbligh # if the name doesn't start with http://, 18be630eb07ddb84310fcc580acffcaa362a2dc606mbligh # nonexistant hosts get an obscure error 19be630eb07ddb84310fcc580acffcaa362a2dc606mbligh if not web_server.startswith('http://'): 20be630eb07ddb84310fcc580acffcaa362a2dc606mbligh web_server = 'http://' + web_server 21be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 22be630eb07ddb84310fcc580acffcaa362a2dc606mbligh return web_server 23be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 24be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 25be630eb07ddb84310fcc580acffcaa362a2dc606mblighclass afe_comm(object): 26be630eb07ddb84310fcc580acffcaa362a2dc606mbligh """Handles the AFE setup and communication through RPC""" 27be630eb07ddb84310fcc580acffcaa362a2dc606mbligh def __init__(self, web_server=None): 28be630eb07ddb84310fcc580acffcaa362a2dc606mbligh self.web_server = get_autotest_server(web_server) 29be630eb07ddb84310fcc580acffcaa362a2dc606mbligh self.proxy = self._connect() 30be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 31be630eb07ddb84310fcc580acffcaa362a2dc606mbligh def _connect(self): 32be630eb07ddb84310fcc580acffcaa362a2dc606mbligh # This does not fail even if the address is wrong. 33be630eb07ddb84310fcc580acffcaa362a2dc606mbligh # We need to wait for an actual RPC to fail 34be630eb07ddb84310fcc580acffcaa362a2dc606mbligh headers = {'AUTHORIZATION' : getpass.getuser()} 35be630eb07ddb84310fcc580acffcaa362a2dc606mbligh rpc_server = self.web_server + "/afe/server/noauth/rpc/" 36be630eb07ddb84310fcc580acffcaa362a2dc606mbligh return rpc_client_lib.get_proxy(rpc_server, headers=headers) 37be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 38be630eb07ddb84310fcc580acffcaa362a2dc606mbligh 39be630eb07ddb84310fcc580acffcaa362a2dc606mbligh def run(self, op, **data): 40be630eb07ddb84310fcc580acffcaa362a2dc606mbligh function = getattr(self.proxy, op) 41be630eb07ddb84310fcc580acffcaa362a2dc606mbligh return function(**data) 42