U
    EZhN                     @   s   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eZdd Zd	d
 Zdd Zdd Zdd Zdd Zdd ZdeiZdS )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                 C   sn   t | ||rj|jd D ]R}t|}|dk	r\td| ||d |d< t|d |  dS td| qdS )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encoder r   X/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/botocore/compress.pymaybe_compress_request   s    
r   c           	      C   s   | j dk	r|| jdkr||jd k	r|t|sFt|d }d}t|| dS |jrb| }|j	}d|kS t
|d }| j}||kS dS )NTZv2r   z*Body type %s does not support compression.FZrequiresLength)Zdisable_request_compressionZsignature_versionr
   _is_compressible_typetyper   r   Zhas_streaming_inputZget_streaming_inputmetadata_get_body_sizeZ"request_min_compression_size_bytes)	r   r   r   Z	body_typeZlog_msgZstreaming_inputZstreaming_metadataZ	body_sizeZmin_sizer   r   r   r	   ,   s&    r	   c                 C   sL   | d }t |tr.t|dddd}|| d< t |tttf}|pJt|dS )Nr   Tutf-8)doseqr   read)
isinstancedictr   encodestrbytes	bytearrayhasattr)r   r   Zis_supported_typer   r   r   r   D   s    
r   c                 C   s$   t | }|d kr td|  d}|S )NzCUnable to get length of the request body: %s. Skipping compression.r   )r   r   r   )r   sizer   r   r   r   N   s    r   c                 C   sv   t | trt| dS t | ttfr.t| S t| drrt| drjt| drj|  }t| }| 	| |S t| S d S )Nr   r   seektell)
r   r"   gzip_compressr!   r#   r$   r%   r(   _gzip_compress_fileobjr'   )r   current_positioncompressed_objr   r   r   _gzip_compress_bodyZ   s    


r-   c              	   C   s^   t  }t|dd6}| d}|s&qFt|tr:|d}|| qW 5 Q R X |d |S )Nwb)fileobjmodei    r   r   )	ioBytesIOr   r   r   r"   r!   writer'   )r   r,   gzchunkr   r   r   r*   h   s    



r*   c                 C   s2   |  d}|d kr|| d< n| d| | d< d S )NzContent-Encoding,)r   )r   r   Z	ce_headerr   r   r   r   v   s    

r   gzip)__doc__r1   loggingr7   r   r   r)   Zbotocore.compatr   Zbotocore.utilsr   	getLogger__name__r   r   r	   r   r   r-   r*   r   r   r   r   r   r   <module>   s   

