B ݁[7@sddlZddlZddlZddlmZddlmZddlm Z m Z m Z ddl m Z mZddlmZddlmZeeZGdd d eZd d ZdS) N) ScalarTypes)first_non_none_response)jsonset_socket_timeout XMLParseError)IncompleteReadErrorReadTimeoutError)r)parsersc@s\eZdZdZdZddZddZddd Zd d Zdd d Z efddZ ddZ ddZ dS) StreamingBodyaeWrapper class for an http response body. This provides a few additional conveniences that do not exist in the urllib3 model: * Set the timeout on the socket (i.e read() timeouts) * Auto validation of content length, if the amount of bytes we read does not match the content length, an exception is raised. cCs||_||_d|_dS)Nr) _raw_stream_content_length _amount_read)selfZ raw_streamcontent_lengthrR/Users/kashii/Desktop/Projects/Workshops/worker-safety/lambda/botocore/response.py__init__,szStreamingBody.__init__cCs:yt|j|Wn$tk r4tjdddYnXdS)z&Set the timeout seconds on the socket.zbCannot access the socket object of a streaming response. It's possible the interface has changed.T)exc_infoN)rr AttributeErrorloggererror)rtimeoutrrrr1s z StreamingBody.set_socket_timeoutNc Csty|j|}Wn0tk r@}zt|j|dWdd}~XYnX|jt|7_|dksh|sp|dkrp||S)zhRead at most amt bytes from the stream. If the amt argument is omitted, read all data. ) endpoint_urlrNr)r readURLLib3ReadTimeoutErrorrurlrlen_verify_content_length)ramtchunkerrrrHs zStreamingBody.readcCs ||jS)zCReturn an iterator to yield 1k chunks from the raw stream. ) iter_chunks_DEFAULT_CHUNK_SIZE)rrrr__iter__ZszStreamingBody.__iter__ccsd}xp||D]b}|dk r$||}|}|rZ|drZ|rZ|dd|dkrZ|}nd}x|D] }|VqdWqW|dk r|VdS)zReturn an iterator to yield lines from the raw stream. This is achieved by reading chunk of bytes (of size chunk_size) at a time from the raw stream, and then yielding lines from there. N)r" splitlinespop)r chunk_sizependingr lineslinerrr iter_lines_s$  zStreamingBody.iter_linesccs$x||}|dkrP|VqWdS)z\Return an iterator to yield chunks of chunk_size bytes from the raw stream. N)r)rr(Z current_chunkrrrr"ys  zStreamingBody.iter_chunkscCs2|jdk r.|jt|jkr.t|jt|jddS)N)Z actual_bytesZexpected_bytes)r rintr)rrrrrs  z$StreamingBody._verify_content_lengthcCs|jdS)z*Close the underlying http response stream.N)r close)rrrrr/szStreamingBody.close)N)r ) __name__ __module__ __qualname____doc__r#rrrr$r,r"rr/rrrrr s     r cCsx|jd}|j|jd}|ddkr0|j|d<n,|jrRt|j|dd|d<n |j|d<t |}|| ||j fS)Nprotocol)headers status_coder6i,bodyr5zcontent-length) metadatar5r6contenthas_streaming_outputr rawgetr create_parserparse output_shape)operation_model http_responser4 response_dictparserrrr get_responses      rD)sysxml.etree.cElementTreexmlloggingbotocorerbotocore.hooksrbotocore.compatrrrbotocore.exceptionsrrZurllib3.exceptionsrr getLoggerr0robjectr rDrrrrs     t