1 """ 2 This module provides utility functions useful when writing clients for the RPC 3 server. 4 """ 5 6 __author__ = 'showard (at] google.com (Steve Howard)' 7 8 import getpass, os 9 from json_rpc import proxy 10 from autotest_lib.client.common_lib import utils 11 12 13 class AuthError(Exception): 14 pass 15 16 def add_protocol(hostname): 17 """Constructs a normalized URL to make RPC calls 18 19 This function exists because our configuration files 20 (global_config/shadow_config) include only the hostname of the RPC server to 21 hit, not the protocol (http/https). 22 To support endpoints that require a specific protocol, we allow the hostname 23 to include the protocol prefix, and respect the protocol. If no protocol is 24 provided, http is used, viz, 25 26 add_protocol('cautotest') --> 'http://cautotest' 27 add_protocol('http://cautotest') --> 'http://cautotest' 28 add_protocol('https://cautotest') --> 'https://cautotest' 29 30 @param hostname: hostname or url prefix of the RPC server. 31 @returns: A string URL for the RPC server with the protocl prefix. 32 """ 33 if (not hostname.startswith('http://') and 34 not hostname.startswith('https://')): 35 return 'http://' + hostname 36 return hostname 37 38 39 def get_proxy(*args, **kwargs): 40 """Use this to access the AFE or TKO RPC interfaces.""" 41 return proxy.ServiceProxy(*args, **kwargs) 42 43 44 def _base_authorization_headers(username, server): 45 """ 46 Don't call this directly, call authorization_headers(). 47 This implementation may be overridden by site code. 48 49 @returns A dictionary of authorization headers to pass in to get_proxy(). 50 """ 51 if not username: 52 if 'AUTOTEST_USER' in os.environ: 53 username = os.environ['AUTOTEST_USER'] 54 else: 55 username = getpass.getuser() 56 return {'AUTHORIZATION' : username} 57 58 59 authorization_headers = utils.import_site_function( 60 __file__, 'autotest_lib.frontend.afe.site_rpc_client_lib', 61 'authorization_headers', _base_authorization_headers) 62