human
Complete this python program:
def make_get_access_token_call(rpc, scopes, service_account_id=None):
assistant
#Here is the Python code you requested.

    """OAuth2 access token to act on behalf of the application (async, uncached).
    Most developers should use get_access_token instead.
    Args:
    rpc: RPC object.
    scopes: The requested API scope string, or a list of strings.
    Raises:
    InvalidScope: if the scopes are unspecified or invalid.
    """
    request = app_identity_service_pb.GetAccessTokenRequest()
    if (not scopes):
        raise InvalidScope('No    scopes    specified.')
    if isinstance(scopes, basestring):
        request.add_scope(scopes)
    else:
        for scope in scopes:
            request.add_scope(scope)
    if service_account_id:
        if isinstance(service_account_id, (int, long)):
            request.set_service_account_id(service_account_id)
        elif isinstance(service_account_id, basestring):
            request.set_service_account_name(service_account_id)
        else:
            raise TypeError()
    response = app_identity_service_pb.GetAccessTokenResponse()
    def get_access_token_result(rpc):
        'Check    success,    handle    exceptions,    and    return    converted    RPC    result.\n\n                This    method    waits    for    the    RPC    if    it    has    not    yet    finished,    and    calls    the\n                post-call    hooks    on    the    first    invocation.\n\n                Args:\n                        rpc:    A    UserRPC    object.\n\n                Returns:\n                        Pair,    Access    token    (string)    and    expiration    time    (seconds    since    the    epoch).\n                '
        assert (rpc.service == _APP_IDENTITY_SERVICE_NAME), repr(rpc.service)
        assert (rpc.method == _GET_ACCESS_TOKEN_METHOD_NAME), repr(rpc.method)
        try:
            rpc.check_success()
        except apiproxy_errors.ApplicationError as err:
            raise _to_app_identity_error(err)
        return (response.access_token(), response.expiration_time())
    rpc.make_call(_GET_ACCESS_TOKEN_METHOD_NAME, request, response, get_access_token_result)