a 97a"@sddlZddlZddlmZddlmZddlmZmZm Z ddl m Z m Z ddl m ZddlmZeeZGdd d eZd d ZdS) N) ScalarTypes)first_non_none_response)jsonset_socket_timeout XMLParseError)IncompleteReadErrorReadTimeoutError)r)parsersc@sheZdZdZdZddZddZddd Zd d Zd d Z e Z dddZ efddZ ddZ ddZdS) 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_lengthrl/private/var/folders/s6/9n5zrl012gv99k63s4q6ccsd4s6mqz/T/pip-target-f5cq3f2q/lib/python/botocore/response.py__init__+szStreamingBody.__init__cCs8zt|j|Wn"ty2tjdddYn0dS)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)rtimeoutrrrr0s  z StreamingBody.set_socket_timeoutNc Csvz|j|}Wn2tyB}zt|j|dWYd}~n d}~00|jt|7_|dusj|sr|dkrr||S)zhRead at most amt bytes from the stream. If the amt argument is omitted, read all data. )Z endpoint_urlrNr)r readURLLib3ReadTimeoutErrorrurlrlen_verify_content_length)ramtchunkerrrrGs$zStreamingBody.readcCs ||jS)zCReturn an iterator to yield 1k chunks from the raw stream. ) iter_chunks_DEFAULT_CHUNK_SIZErrrr__iter__YszStreamingBody.__iter__cCs||j}|r|StdS)z6Return the next 1k chunk from the raw stream. N)rr" StopIteration)r current_chunkrrr__next__^s zStreamingBody.__next__Fccsdd}||D]<}||d}|ddD]}||dVq,|d}q|r`||dVdS)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. TNr)r! splitlines)r chunk_sizekeependspendingrlineslinerrr iter_lineshs zStreamingBody.iter_linesccs ||}|dkrq|VqdS)z\Return an iterator to yield chunks of chunk_size bytes from the raw stream. r(N)r)rr+r&rrrr!ws zStreamingBody.iter_chunkscCs2|jdur.|jt|jkr.t|jt|jddS)N)Z actual_bytesZexpected_bytes)r rintrr#rrrrs z$StreamingBody._verify_content_lengthcCs|jdS)z*Close the underlying http response stream.N)r closer#rrrr2szStreamingBody.close)N)r F)__name__ __module__ __qualname____doc__r"rrrr$r'nextr0r!rr2rrrrr s     r cCsx|jd}|j|jd}|ddkr0|j|d<n,|jrRt|j|dd|d<n |j|d<t |}|| ||j fS)Nprotocol)headers status_coder:i,bodyr9zcontent-length) metadatar9r:contentZhas_streaming_outputr rawgetr create_parserparseZ output_shape)Zoperation_model http_responser8Z response_dictparserrrr get_responses      rD)sysloggingZbotocorerZbotocore.hooksrZbotocore.compatrrrZbotocore.exceptionsrrZurllib3.exceptionsrr getLoggerr3robjectr rDrrrrs     s