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