o
    YZßa™.  ã                   @   sî  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlZd dlmZ d dlmZ d dlmZ e e¡ZejrÊd dlmZ G dd„ dejƒZd d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dlm!Z! d dlm"Z" d dlm#Z# d dlm$Z$ d dl%m&Z& d dl'm(Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ e)Z0e1Z1eZ2dd„ Z3dd„ Z4dFdd„Z5dGd d!„Z6n�d d	l7mZ d d
l7mZ d dl7mZ d dl7mZ d dlmZ d dlm Z  d dlm!Z! d dlm"Z" d dlm#Z# d dlm$Z$ d d"l8m9Z9 d dl:m-Z- e;Z0d d#l.m<Z1 d d$l.m=Z/ d dl>m&Z& d d%l*m?Z+ G d&d„ de9ƒZdHd'd(„Z2d)d„ Z3d*d„ Z4dGd+d„Z5dGd,d!„Z6d d-l@mAZA zd dlBmC  mDZE W n eF�yo   d dlGmC  mHZE Y nw eEjIZJd dlKZKd.d/„ ZLeMd0d1„ ƒZNeMd2d3„ ƒZOeNe_NeOe_Od4d5„ ZPd6d7„ ZQze R¡  d8ZSW n eT�y©   d9ZSY nw d:d;„ ZUdId<d=„ZVd>d?„ ZWd@dA„ ZXzd dBlYmZZZ W n eF�yÓ   d dBl@mZZZ Y nw zd dl[Z\ej] ^dCdD¡Z_e_ `¡ dEk ZaW dS  eF�yö   d9ZaY dS w )Jé    N)Úfloor)ÚMD5UnavailableError)Útzlocal)Ú
exceptions)Úhttp_clientc                   @   s   e Zd ZdS )ÚHTTPHeadersN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú1/usr/lib/python3/dist-packages/botocore/compat.pyr   $   s    r   )Úquote)Ú	urlencode)Úunquote)Úunquote_plus)Úurlparse)Úurlsplit)Ú
urlunsplit)Úurljoin)Ú	parse_qsl)Úparse_qs)ÚHTTPResponse)ÚIOBase)Úencodebytes)Ú
formatdate)Úzip_longestc                 C   s   | j jjj |¡ dS ©z„Set the timeout of the socket from an HTTPResponse.

        :param http_response: An instance of ``httplib.HTTPResponse``

        N)Ú_fpÚfpÚrawÚ_sockÚ
settimeout©Úhttp_responseÚtimeoutr   r   r   Úset_socket_timeout>   s   r%   c                 C   ó   t  | ¡d S ©Né   )ÚinspectÚgetfullargspec©Úfuncr   r   r   Úaccepts_kwargsF   s   r-   c                 C   s   | S ©Nr   ©ÚsÚencodingÚerrorsr   r   r   Úensure_unicodeK   s   r3   úutf-8Ústrictc                 C   ó4   t | tƒr|  ||¡S t | tƒr| S tdt| ƒ ƒ‚)Nz#Expected str or bytes, received %s.)Ú
isinstanceÚstrÚencodeÚbytesÚ
ValueErrorÚtyper/   r   r   r   Úensure_bytesO   ó
   

r=   )ÚMessage)Úizip)Úizip_longest)Úencodestringc                   @   s   e Zd Zdd„ ZdS )r   c                 c   s   � | j D ]\}}|V  qd S r.   )Ú_headers)ÚselfÚfieldÚvaluer   r   r   Ú__iter__m   s   €ÿzHTTPHeaders.__iter__N)r   r	   r
   rG   r   r   r   r   r   i   s    c                 C   s   |   |¡}t|ƒ |¡S r.   )r9   r   Údecode)rF   r1   Úbyte_stringr   r   r   Úunquote_strq   s   
rJ   c                 C   s   | j jj |¡ dS r   )r   r   r    r!   r"   r   r   r   r%   {   s   c                 C   r&   r'   )r)   Ú
getargspecr+   r   r   r   r-   ƒ   s   c                 C   s   t | tjƒr| S t| ||ƒS r.   )r7   ÚsixÚ	text_typeÚunicoder/   r   r   r   r3   †   s   c                 C   r6   )Nz%Expected str or unicode, received %s.)r7   rN   r9   r8   r;   r<   r/   r   r   r   r=   ‹   r>   )ÚOrderedDictc                   C   s   t jddtjdd� d S )NÚignorez+A true SSLContext object is not available.*z.*urllib3\.util\.ssl_)ÚmessageÚcategoryÚmodule)ÚwarningsÚfilterwarningsr   ÚInsecurePlatformWarningr   r   r   r   Úfilter_ssl_warningsŸ   s   
ürW   c                 C   s$   | ƒ }|  ¡ D ]\}}|||< q|S r.   )Úitems)ÚclsÚdÚnew_instanceÚkeyrF   r   r   r   Ú	from_dict¨   s   
r]   c                 C   s    | ƒ }|D ]\}}|||< q|S r.   r   )rY   Úpairsr[   r\   rF   r   r   r   Ú
from_pairs°   s   
r_   c                 C   s   t   | ¡}|S )zI
    This used to be a compat shim for 2.6 but is now just an alias.
    )Úcopy)ÚkwargsÚcopy_kwargsr   r   r   rb   »   s   
rb   c                 C   s   |   ¡ S )zÕ
    Returns the total seconds in a ``datetime.timedelta``.

    This used to be a compat shim for 2.6 but is now just an alias.

    :param delta: The timedelta object
    :type delta: ``datetime.timedelta``
    )Útotal_seconds)Údeltar   r   r   rc   Ã   s   	rc   TFc                  O   s   t r
tj| i |¤ŽS tƒ ‚)aÿ  
    Attempts to get an md5 hashing object.

    :param raise_error_if_unavailable: raise an error if md5 is unavailable on
        this system. If False, None will be returned if it is unavailable.
    :type raise_error_if_unavailable: bool
    :param args: Args to pass to the MD5 constructor
    :param kwargs: Key word arguments to pass to the MD5 constructor
    :return: An MD5 hashing object if available. If it is unavailable, None
        is returned if raise_error_if_unavailable is set to False.
    )ÚMD5_AVAILABLEÚhashlibÚmd5r   )Úargsra   r   r   r   Úget_md5Ø   s   ri   c                 C   s(   |d u rt j}|dkrt| ƒS t | ¡S )NÚwin32)ÚsysÚplatformÚ_windows_shell_splitÚshlexÚsplit)r0   rl   r   r   r   Úcompat_shell_splitê   s
   
rp   c                 C   s2  | sg S g }g }d}d}| D ]k}|dkr|d7 }q|dkrG|dkr>|  dtt|d ƒƒ ¡ |d }d}|dkr>|  d¡ q| }|  d¡ q|dv rg|sg|dkrZ|  d| ¡ d}|rf|  d |¡¡ g }q|dkrt|  d| ¡ d}|  |¡ q|r‚td	|  ƒ‚|dkr�|  d| ¡ |r—|  d |¡¡ |S )
a  Splits up a windows command as the built-in command parser would.

    Windows has potentially bizarre rules depending on where you look. When
    spawning a process via the Windows C runtime (which is what python does
    when you call popen) the rules are as follows:

    https://docs.microsoft.com/en-us/cpp/cpp/parsing-cpp-command-line-arguments

    To summarize:

    * Only space and tab are valid delimiters
    * Double quotes are the only valid quotes
    * Backslash is interpreted literally unless it is part of a chain that
      leads up to a double quote. Then the backslashes escape the backslashes,
      and if there is an odd number the final backslash escapes the quote.

    :param s: The command string to split up into parts.
    :return: A list of command components.
    Fr   ú\é   ú"r(   Ú )ú ú	z"No closing quotation in string: %s)ÚappendÚintr   Újoinr;   )r0   Ú
componentsÚbuffÚ	is_quotedÚnum_backslashesÚ	characterÚ	remainderr   r   r   rm   ô   sL   

€rm   c                  C   s$   t jdkrddlm}  t| fS tfS )Nrj   r   ©Ú
tzwinlocal)rk   rl   Údateutil.tzr�   r   r€   r   r   r   Úget_tzinfo_optionsR  s   
rƒ   )ÚMutableMappingÚBOTO_DISABLE_CRTÚfalseÚtrue)NN)r4   r5   )r4   r.   )br`   Údatetimerk   r)   rT   rf   Úloggingrn   ÚosÚmathr   rL   Úbotocore.exceptionsr   r‚   r   Úurllib3r   Ú	getLoggerr   ÚloggerÚPY3Ú	six.movesr   ÚHTTPMessager   Úurllib.parser   r   r   r   r   r   r   r   r   r   Úhttp.clientr   Úior   Ú_IOBaseÚbase64r   Úemail.utilsr   Ú	itertoolsr   Ú	file_typeÚziprJ   r%   r-   r3   r=   ÚurllibÚemail.messager?   Úemail.UtilsÚfiler@   rA   ÚhttplibrB   ÚcollectionsrO   Úxml.etree.cElementTreeÚetreeÚcElementTreeÚETreeÚImportErrorÚxml.etree.ElementTreeÚElementTreeÚ
ParseErrorÚXMLParseErrorÚjsonrW   Úclassmethodr]   r_   rb   rc   rg   re   r;   ri   rp   rm   rƒ   Úcollections.abcr„   Úawscrt.authÚawscrtÚenvironÚgetÚdisabledÚlowerÚHAS_CRTr   r   r   r   Ú<module>   sÌ   





þ	

ÿ

^ÿ
ÿ