
    pgeY                         d dl Z d dlZd dlZd dlZd dlmZmZmZ d dlm	Z	  G d dee j
                  Z G d dej                  Zd ZdS )	    N)IncompleteReadErrorReadTimeoutErrorResponseStreamingError)parsersc                       e Zd ZdS )AioReadTimeoutErrorN)__name__
__module____qualname__     4lib/python3.11/site-packages/aiobotocore/response.pyr   r      s        Dr   r   c                        e Zd ZdZdZdej        def fdZd Z	d Z
d Zdd
Zd Zd Zd ZeZedfdZefdZd Zd Z xZS )StreamingBodya&  Wrapper class for an http response body.

    This provides a few additional conveniences that do not exist
    in the urllib3 model:

        * Auto validation of content length, if the amount of bytes
          we read does not match the content length, an exception
          is raised.
    i   
raw_streamcontent_lengthc                 f    t                                          |           || _        d| _        d S )Nr   )super__init___self_content_length_self_amount_read)selfr   r   	__class__s      r   r   zStreamingBody.__init__    s1    $$$$2!!"r   c                 D   K   | j                                          d {V S N)__wrapped__
__aenter__r   s    r   r   zStreamingBody.__aenter__&   s-      %00222222222r   c                 J   K   | j                             |||           d {V S r   )r   	__aexit__)r   exc_typeexc_valexc_tbs       r   r    zStreamingBody.__aexit__)   s3      %//'6JJJJJJJJJr   c                 ,    |                                   S r   )at_eofr   s    r   readablezStreamingBody.readable.   s    ;;==  r   Nc                   K   	 | j         j                            ||nd           d{V }nY# t          j        $ r }t          | j         j        |          d}~wt          j        j	        $ r}t          |          d}~ww xY w| xj        t          |          z  c_        ||s|dk    r|                                  |S )zhRead at most amt bytes from the stream.

        If the amt argument is omitted, read all data.
        N)endpoint_urlerror)r*   r   )r   contentreadasyncioTimeoutErrorr   urlaiohttpclient_exceptionsClientConnectionErrorr   r   len_verify_content_length)r   amtchunkes       r   r,   zStreamingBody.read1   s     		2*277B       EE # 	 	 	%!-1    (> 	2 	2 	2(q1111	2 	#e**,;u;q '')))s    ). BAB/A??Bc                 R   K   d |                                  2              d {V }|S )Nc                 "   K   g | 3 d {V }|
6 S r   r   ).0lines     r   
<listcomp>z+StreamingBody.readlines.<locals>.<listcomp>L   s.      ::::::::::::s   )
iter_lines)r   liness     r   	readlineszStreamingBody.readlinesJ   s:      ::(9(9:::::::::r   c                 6    |                      | j                  S )z:Return an iterator to yield 1k chunks from the raw stream.)iter_chunks_DEFAULT_CHUNK_SIZEr   s    r   	__aiter__zStreamingBody.__aiter__O   s     8999r   c                 \   K   |                      | j                   d{V }|r|S t          )z-Return the next 1k chunk from the raw stream.N)r,   rB   StopAsyncIteration)r   current_chunks     r   	__anext__zStreamingBody.__anext__S   s@      "ii(@AAAAAAAA 	!    r   Fc                $  K   d}|                      |          2 3 d{V }||z                       d          }|dd         D ] }|                    |          d         W V  !|d         }S6 |r |                    |          d         W V  dS dS )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.
        r   NTr(   r   )rA   
splitlines)r   
chunk_sizekeependspendingr6   r>   r;   s          r   r=   zStreamingBody.iter_lines\   s       ++J77 	  	  	  	  	  	  	 %u_0066Ecrc
 3 3ooh//222222BiGG	 8
  	2$$X..q1111111	2 	2s   A-c                Z   K   	 |                      |           d{V }|dk    rdS |W V  ))z\Return an iterator to yield chunks of chunk_size bytes from the raw
        stream.
        TNr   )r,   )r   rJ   rF   s      r   rA   zStreamingBody.iter_chunksk   sR      	 "&))J"7"7777777M##		 r   c                     | j         E| j        t          | j                   k    r*t          | j        t          | j                             d S d S )N)actual_bytesexpected_bytes)r   r   intr   r   s    r   r4   z$StreamingBody._verify_content_lengthu   s_    
 %1&#d.G*H*HHH%!3"4#<==    21HHr   c                     | j         S r   )r   r   s    r   tellzStreamingBody.tell   s    %%r   r   )r	   r
   r   __doc__rB   r0   StreamReaderstrr   r   r    r&   r,   r?   rC   rG   anextr=   rA   r4   rS   __classcell__)r   s   @r   r   r      s(         #7#7 # # # # # # #3 3 3K K K
! ! !   2  
: : :! ! ! E*= 2 2 2 2 ,?          & & & & & & &r   r   c                   K   | j         d         }|j        |j        d}|d         dk    r|j         d {V |d<   nI| j        r2t          |j        |d                             d                    |d<   n|j         d {V |d<   t          j	        |          }t          j        |j                  r"|                    || j                   d {V }n|                    || j                  }||fS )Nprotocol)headersstatus_coder\   i,  bodyr[   zcontent-length)metadatar[   r\   r+   has_streaming_outputr   rawgetr   create_parserr-   iscoroutinefunctionparseoutput_shape)operation_modelhttp_responserZ   response_dictparserparseds         r   get_responserk      sB     '
3H ($0 M ]#s**&3&; ; ; ; ; ; ;f		- < -}Y7;;<LMM!
 !
f '4&; ; ; ; ; ; ;f"8,,F"6<00 K||?7
 
 
 
 
 
 
 
 m_-IJJ&  r   )r-   r0   aiohttp.client_exceptionswraptbotocore.responser   r   r   aiobotocorer   r.   r   ObjectProxyr   rk   r   r   r   <module>rq      s                              	 	 	 	 	*G,@ 	 	 	p& p& p& p& p&E% p& p& p&f! ! ! ! !r   