
    PeN                         d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
  ej                  e      Zd Zd Zd	 Zd
 Zd Zd Zd ZdeiZy)z
NOTE: All functions in this module are considered private and are
subject to abrupt breaking changes. Please do not use them directly.

    N)GzipFile)compress)	urlencode)determine_content_lengthc                    t        | ||      rw|j                  d   D ]d  }t        j                  |      }|5t        j                  d|        ||d         |d<   t        |d   |        yt        j                  d|       f yy)zAAttempt to compress the request body using the modeled encodings.	encodingsNz%Compressing request with %s encoding.bodyheadersz$Unsupported compression encoding: %s)_should_compress_requestrequest_compressionCOMPRESSION_MAPPINGgetloggerdebug_set_compression_header)configrequest_dictoperation_modelencodingencoders        3/usr/lib/python3/dist-packages/botocore/compress.pymaybe_compress_requestr      s    oF';;KH 	OH)--h7G"DhO'.|F/C'DV$'Y(?JCXN	O G    c                 P   | j                   dur| j                  dk7  r|j                  }t        |      s't	        |d         }d}t
        j                  ||       y|j                  r |j                         }|j                  }d|vS t        |d         }| j                  }||k  S y)NTv2r	   z*Body type %s does not support compression.FrequiresLength)disable_request_compressionsignature_versionr   _is_compressible_typetyper   r   has_streaming_inputget_streaming_inputmetadata_get_body_size"request_min_compression_size_bytes)	r   r   r   	body_typelog_msgstreaming_inputstreaming_metadata	body_sizemin_sizes	            r   r   r   ,   s    **$6$$,//;$\2\&12IBGLL),..-AACO!0!9!9#+==="<#78	<<9$$r   c                     | d   }t        |t              r"t        |dd      j                  d      }|| d<   t        |t        t
        t        f      }|xs t        |d      S )Nr	   Tutf-8)doseqr   read)
isinstancedictr   encodestrbytes	bytearrayhasattr)r   r	   is_supported_types      r   r   r   D   s_    D$TG<CCGL#V"4#ui)@A5f 55r   c                 P    t        |       }|t        j                  d|        d}|S )NzCUnable to get length of the request body: %s. Skipping compression.r   )r   r   r   )r	   sizes     r   r$   r$   N   s1    #D)D|$	

 Kr   c                 T   t        | t              rt        | j                  d            S t        | t        t
        f      rt        |       S t        | d      rQt        | d      r:t        | d      r.| j                         }t        |       }| j                  |       |S t        |       S y )Nr-   r/   seektell)
r0   r3   gzip_compressr2   r4   r5   r6   r<   _gzip_compress_fileobjr;   )r	   current_positioncompressed_objs      r   _gzip_compress_bodyrA   Z   s    $T[[122	D5),	-T""	v	4 WT6%:#yy{3D9NII&'!!%d++ 
r   c                 &   t        j                         }t        |d      5 }	 | j                  d      }|sn3t	        |t
              r|j                  d      }|j                  |       G	 d d d        |j                  d       |S # 1 sw Y   xY w)Nwb)fileobjmodei    r-   r   )	ioBytesIOr   r/   r0   r3   r2   writer;   )r	   r@   gzchunks       r   r>   r>   h   s    ZZ\N	.t	4 IIdOE%%W-HHUO  	  s   A	BBc                 J    | j                  d      }||| d<   y | d| | d<   y )NzContent-Encoding,)r   )r
   r   	ce_headers      r   r   r   v   s8    ./I&."#)21XJ&?"#r   gzip)__doc__rF   loggingrN   r   r   r=   botocore.compatr   botocore.utilsr   	getLogger__name__r   r   r   r   r$   rA   r>   r   r    r   r   <module>rV      sc    
   * % 3			8	$O06	,@ 23 r   