human
Give me a the Python program you requested given the following:
Complete the below
def direct_get_object(node, part, account, container, obj, conn_timeout=5, response_timeout=15, resp_chunk_size=None, headers={}):

    ''''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 dict and all header names will be lowercase.'
    '''
assistant
#Here is the Python program you requested.
    path = ('/%s/%s/%s' % (account, container, obj))
    with Timeout(conn_timeout):
        conn = http_connect(node['ip'], node['port'], node['device'], part, 'GET', path, headers=headers)
    with Timeout(response_timeout):
        resp = conn.getresponse()
    if (not is_success(resp.status)):
        resp.read()
        raise ClientException(('Object    server    %s:%s    direct    GET    %s    gave    status    %s' % (node['ip'], node['port'], repr(('/%s/%s%s' % (node['device'], part, path))), resp.status)), http_host=node['ip'], http_port=node['port'], http_device=node['device'], http_status=resp.status, http_reason=resp.reason)
    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 = {}
    for (header, value) in resp.getheaders():
        resp_headers[header.lower()] = value
    return (resp_headers, object_body)