human
Complete this python program:
def direct_get_object(node, part, account, container, obj, conn_timeout=5, response_timeout=15, resp_chunk_size=None, headers=None):
assistant
#Here is the Python code you requested.

    """Get object directly from the object server.
    :param node: node dictionary from the ring
    :param part: partition the container is on
    :param account: account name
    :param container: container name
    :param obj: object name
    :param conn_timeout: timeout in seconds for establishing the connection
    :param response_timeout: timeout in seconds for getting the response
    :param resp_chunk_size: if defined, chunk size of data to read.
    :param headers: dict to be passed into HTTPConnection headers
    :returns: a tuple of (response headers, the object\s contents) The response
    headers will be a HeaderKeyDict.
    :raises ClientException: HTTP GET request failed
    """
    if (headers is None):
        headers = {}
    path = ('/%s/%s/%s' % (account, container, obj))
    with Timeout(conn_timeout):
        conn = http_connect(node['ip'], node['port'], node['device'], part, 'GET', path, headers=gen_headers(headers))
    with Timeout(response_timeout):
        resp = conn.getresponse()
    if (not is_success(resp.status)):
        resp.read()
        raise DirectClientException('Object', 'GET', node, part, path, resp)
    if resp_chunk_size:
        def _object_body():
            buf = resp.read(resp_chunk_size)
            while buf:
                (yield buf)
                buf = resp.read(resp_chunk_size)
        object_body = _object_body()
    else:
        object_body = resp.read()
    resp_headers = HeaderKeyDict()
    for (header, value) in resp.getheaders():
        resp_headers[header] = value
    return (resp_headers, object_body)