Home | History | Annotate | Download | only in afe
      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