""" This module provides utility functions useful when writing clients for the RPC server. """ __author__ = 'showard@google.com (Steve Howard)' import getpass, os from json_rpc import proxy from autotest_lib.client.common_lib import utils class AuthError(Exception): pass def add_protocol(hostname): """Constructs a normalized URL to make RPC calls This function exists because our configuration files (global_config/shadow_config) include only the hostname of the RPC server to hit, not the protocol (http/https). To support endpoints that require a specific protocol, we allow the hostname to include the protocol prefix, and respect the protocol. If no protocol is provided, http is used, viz, add_protocol('cautotest') --> 'http://cautotest' add_protocol('http://cautotest') --> 'http://cautotest' add_protocol('https://cautotest') --> 'https://cautotest' @param hostname: hostname or url prefix of the RPC server. @returns: A string URL for the RPC server with the protocl prefix. """ if (not hostname.startswith('http://') and not hostname.startswith('https://')): return 'http://' + hostname return hostname def get_proxy(*args, **kwargs): """Use this to access the AFE or TKO RPC interfaces.""" return proxy.ServiceProxy(*args, **kwargs) def _base_authorization_headers(username, server): """ Don't call this directly, call authorization_headers(). This implementation may be overridden by site code. @returns A dictionary of authorization headers to pass in to get_proxy(). """ if not username: if 'AUTOTEST_USER' in os.environ: username = os.environ['AUTOTEST_USER'] else: username = getpass.getuser() return {'AUTHORIZATION' : username} authorization_headers = utils.import_site_function( __file__, 'autotest_lib.frontend.afe.site_rpc_client_lib', 'authorization_headers', _base_authorization_headers)