def do_put_for_cookie(uri, body, headers = get_form_headers()):
    '''
        usually we don't care about the returned headers,  but in
        the case of login, for instance, we need the cookie it returns
    '''
    method = "PUT"

    record_api_for_step(method, uri)

    world.conn.request(method, add_params(uri),
                       urllib.urlencode(body, doseq=True),
                       headers)
    response = world.conn.getresponse()

    # stolen from Carl Meyer's code
    # Work around httplib2's broken multiple-header handling
    # http://code.google.com/p/httplib2/issues/detail?id=90
    # This will break if a cookie value contains commas.
    cookies = [c.split(";")[0].strip() for c in
               response.getheader("set-cookie").split(",")]
    auth_cookie = [c for c in cookies if c.startswith("USERTOKEN=")][0]



    data = verify_status(200, response, "%s %s:\n%s" % (method, uri, body))
    return data, auth_cookie
def do_get(uri, params = {}, headers = get_json_headers(), exp_status = 200):

    record_api_for_step("GET", uri)

    world.conn.request("GET", add_params(uri, params), "", headers)
    response = world.conn.getresponse()
    return verify_status(exp_status, response, str(uri))
def do_put_for_cookie(uri, body, headers=get_form_headers()):
    '''
        usually we don't care about the returned headers,  but in
        the case of login, for instance, we need the cookie it returns
    '''
    method = "PUT"

    record_api_for_step(method, uri)

    world.conn.request(method, add_params(uri),
                       urllib.urlencode(body, doseq=True), headers)
    response = world.conn.getresponse()

    # stolen from Carl Meyer's code
    # Work around httplib2's broken multiple-header handling
    # http://code.google.com/p/httplib2/issues/detail?id=90
    # This will break if a cookie value contains commas.
    cookies = [
        c.split(";")[0].strip()
        for c in response.getheader("set-cookie").split(",")
    ]
    auth_cookie = [c for c in cookies if c.startswith("USERTOKEN=")][0]

    data = verify_status(200, response, "%s %s:\n%s" % (method, uri, body))
    return data, auth_cookie
def do_get(uri, params={}, headers=get_json_headers(), exp_status=200):

    record_api_for_step("GET", uri)

    world.conn.request("GET", add_params(uri, params), "", headers)
    response = world.conn.getresponse()
    return verify_status(exp_status, response, str(uri))
def do_request(method, uri, params = {}, body = None, headers = get_form_headers(), exp_status = 200):
    '''
        do the request
    '''

    record_api_for_step(method, uri)

    if body == None:
#        del headers["Content-Type"]
        world.conn.request(method, add_params(uri, params), None, headers)
    else:
        encoded_body = urllib.urlencode(body, doseq=True)
        world.conn.request(method, add_params(uri, params),
                           encoded_body,
                           headers)

    response = world.conn.getresponse()

    return verify_status(exp_status, response, "%s %s:\n%s" % (method, uri, body))
def do_request(method,
               uri,
               params={},
               body=None,
               headers=get_form_headers(),
               exp_status=200):
    '''
        do the request
    '''

    record_api_for_step(method, uri)

    if body == None:
        #        del headers["Content-Type"]
        world.conn.request(method, add_params(uri, params), None, headers)
    else:
        encoded_body = urllib.urlencode(body, doseq=True)
        world.conn.request(method, add_params(uri, params), encoded_body,
                           headers)

    response = world.conn.getresponse()

    return verify_status(exp_status, response,
                         "%s %s:\n%s" % (method, uri, body))