You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.0 KiB
62 lines
2.0 KiB
"""
|
|
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)
|