o
    ~j@c5,                     @   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	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eZd d	lmZ G d
d dejZd dlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+ d dl,m-Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 e.Z5e6Z6e#Z7dd Z8dd Z9dFddZ:dGddZ;zd dl<m=  m>Z? W n e@y   d dlAm=  mBZ? Y nw e?jCZDd dlEZEdd ZFeGdd ZHeGd d! ZIeHe_HeIe_Id"d# ZJd$d% ZKzeL  d&ZMW n eNy   d'ZMY nw d(d) ZOdHd*d+ZPd,d- ZQd.d/ ZRzd dlSZTe	jUVd0d1ZWeWX d2k ZYW n e@y=   d'ZYY nw d3ZZe[d4eZ d5 Z\d6Z]d7j^e]eZd8Z_e]e_d9Z`g d:Zad;Zbd<d=cd>d? eaD  d@ ZddAeb dB ZedCed d< ee dD Zfe[d4ef d5 ZgehdEZiz	d dljZjd&ZkW dS  e@y   d'ZkY dS w )I    N)OrderedDict)MutableMapping)floor)six)MD5UnavailableError)tzlocal)
exceptions)http_clientc                   @   s   e Zd ZdS )HTTPHeadersN)__name__
__module____qualname__ r   r   3usr/lib/python3.10/site-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)Zhttp_responsetimeoutr   r   r   set_socket_timeoutA   s   r%   c                 C   s   t | d S )N   )inspectgetfullargspec)funcr   r   r   accepts_kwargsI   s   r*   c                 C   s   | S Nr   sencodingerrorsr   r   r   ensure_unicodeN   s   r0   utf-8strictc                 C   s8   t | tr| ||S t | tr| S tdt|  d)Nz Expected str or bytes, received .)
isinstancestrencodebytes
ValueErrortyper,   r   r   r   ensure_bytesR   s
   

r:   c                   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   ZInsecurePlatformWarningr   r   r   r   filter_ssl_warningsc   s   
rA   c                 C   s$   |  }|  D ]\}}|||< q|S r+   )items)clsdnew_instancekeyvaluer   r   r   	from_dictm   s   
rH   c                 C   s    |  }|D ]\}}|||< q|S r+   r   )rC   pairsrE   rF   rG   r   r   r   
from_pairsu   s   
rJ   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   rM      s   
rM   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   rN      s   	rN   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   )argsrL   r   r   r   get_md5   s   rT   c                 C   s(   |d u rt j}|dkrt| S t| S )Nwin32)sysplatform_windows_shell_splitshlexsplit)r-   rW   r   r   r   compat_shell_split   s
   
r[   c                 C   s4  | 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|rt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: )appendintr   joinr8   )r-   
componentsZbuffZ	is_quotedZnum_backslashes	character	remainderr   r   r   rX      sL   

rX   c                  C   s$   t jdkrddlm}  t| fS tfS )NrU   r   
tzwinlocal)rV   rW   dateutil.tzri   r   rh   r   r   r   get_tzinfo_options  s   
rk   ZBOTO_DISABLE_CRTfalsetruez(?:[0-9]{1,3}\.){3}[0-9]{1,3}^$z[0-9A-Fa-f]{1,4}z(?:{hex}:{hex}|{ipv4}))hexZipv4)rp   Zls32)	z(?:%(hex)s:){6}%(ls32)sz::(?:%(hex)s:){5}%(ls32)sz%(?:%(hex)s)?::(?:%(hex)s:){4}%(ls32)sz2(?:(?:%(hex)s:)?%(hex)s)?::(?:%(hex)s:){3}%(ls32)sz6(?:(?:%(hex)s:){0,2}%(hex)s)?::(?:%(hex)s:){2}%(ls32)sz/(?:(?:%(hex)s:){0,3}%(hex)s)?::%(hex)s:%(ls32)sz'(?:(?:%(hex)s:){0,4}%(hex)s)?::%(ls32)sz&(?:(?:%(hex)s:){0,5}%(hex)s)?::%(hex)sz(?:(?:%(hex)s:){0,6}%(hex)s)?::zDABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._!\-~z(?:|c                 C   s   g | ]}|t  qS r   )_subs).0xr   r   r   
<listcomp>R  s    ru   )z(?:%25|%)(?:[z]|%[a-fA-F0-9]{2})+z\[z)?\]z	
)NN)r1   r2   r+   )lrK   datetimerV   r'   r?   rQ   loggingrY   reoscollectionsr   collections.abcr   mathr   Zbotocore.vendoredr   Zbotocore.exceptionsr   rj   r   Zurllib3r   	getLoggerr   loggerZbotocore.vendored.six.movesr	   ZHTTPMessager
   urllib.parser   r   r   r   r   r   r   r   r   r   Zhttp.clientr   ior   _IOBasebase64r   email.utilsr   	itertoolsr   Z	file_typezipZunquote_strr%   r*   r0   r:   Zxml.etree.cElementTreeetreeZcElementTreeZETreeImportErrorZxml.etree.ElementTreeZElementTreeZ
ParseErrorZXMLParseErrorjsonrA   classmethodrH   rJ   rM   rN   rR   rP   r8   rT   r[   rX   rk   Zawscrt.authZawscrtenvirongetdisabledlowerZHAS_CRTZIPV4_PATcompileZIPV4_REZHEX_PATformatZLS32_PATrr   Z_variationsZUNRESERVED_PATrd   ZIPV6_PATZZONE_ID_PATZIPV6_ADDRZ_PATZIPV6_ADDRZ_RE	frozensetZUNSAFE_URL_CHARSgzipZHAS_GZIPr   r   r   r   <module>   s   
0






^



