o
    è’Ojù-  ã                	   @   sN  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	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G d
d„ deƒ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-m.Z. d dl/m0Z0 d dl1m2Z2 e,Z3e4Z4e"Z5dd„ Z6dd„ Z7dMdd„Z8dNdd„Z9d dl:m;  m<Z= e=j>Z?d dl@Z@dd„ ZAeBdd„ ƒZCeBd d!„ ƒZDeCe_CeDe_Dd"d#„ ZEd$d%„ ZFz
ejGd&d'� d(ZHW n eIeJfyø   d&ZHY nw d)d*„ ZKdOd+d,„ZLd-d.„ ZMd/d0„ ZNzd dlOZPejQ Rd1d2¡ZSeS T¡ d3k ZUW n eV�y*   d&ZUY nw d4d5„ ZWdPd6d7„ZXd8ZYe
 Zd9eY d: ¡Z[d;Z\d<j]e\eYd=�Z^e\e^d>œZ_g d?¢Z`d@ZadAdB bdCdD„ e`D ƒ¡ dE ZcdFea dG ZddHec dA ed dI Zee
 Zd9ee d: ¡ZfegdJƒZhzd dliZid(ZjW n eV�y’   d&ZjY nw eU�r£eWdKƒ�r£d dLlkmlZl dS dZldS )Qé    N)ÚHTTPMessage)ÚOrderedDict)ÚMutableMapping)Úfloor)Úsix)ÚMD5UnavailableError)Útzlocal)Ú
exceptionsc                   @   s   e Zd ZdS )ÚHTTPHeadersN)Ú__name__Ú
__module__Ú__qualname__© r   r   úU/var/www/html/pharmsmart-cdr-gen/venv/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)Úhttp_responseÚtimeoutr   r   r   Úset_socket_timeout@   s   r&   c                 C   s   t  | ¡d S )Né   )ÚinspectÚgetfullargspec)Úfuncr   r   r   Úaccepts_kwargsH   s   r+   c                 C   s   | S ©Nr   ©ÚsÚencodingÚerrorsr   r   r   Úensure_unicodeK   s   r1   ú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_bytesO   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	   ÚInsecurePlatformWarningr   r   r   r   Úfilter_ssl_warnings]   s   
ürC   c                 C   s$   | ƒ }|  ¡ D ]\}}|||< q|S r,   )Úitems)ÚclsÚdÚnew_instanceÚkeyÚvaluer   r   r   Ú	from_dictg   s   
rJ   c                 C   s    | ƒ }|D ]\}}|||< q|S r,   r   )rE   ÚpairsrG   rH   rI   r   r   r   Ú
from_pairso   s   
rL   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   rO   {   s   
rO   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   rP   ƒ   s   	rP   F)ÚusedforsecurityTc                  O   s   t r
tj| i |¤ŽS tƒ ‚)a:  
    Attempts to get an md5 hashing object.

    :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   )ÚargsrN   r   r   r   Úget_md5˜   s   	rW   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.   rZ   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|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: )ÚappendÚintr   Újoinr9   )r.   Ú
componentsÚbuffÚ	is_quotedÚnum_backslashesÚ	characterÚ	remainderr   r   r   r[   ±   sL   

€r[   c                  C   s$   t jdkrddlm}  t| fS tfS )NrX   r   ©Ú
tzwinlocal)rY   rZ   Údateutil.tzro   r   rn   r   r   r   Úget_tzinfo_options  s   
rq   ÚBOTO_DISABLE_CRTÚfalseÚtruec              	   C   sJ   t sdS tj}ztt| d¡ƒ}t|ƒ}W || kS  ttfy$   Y dS w )z&Not intended for use outside botocore.Fr4   )	ÚHAS_CRTÚawscrtÚ__version__Úmaprf   r]   ÚtupleÚ	TypeErrorr9   )Úminimum_versionÚcrt_version_strÚcrt_version_intsÚcrt_version_tupler   r   r   Úhas_minimum_crt_version&  s   
ýÿr   c                 C   s$   t j  t jj¡}| r|jdd�}|S )zKRetrieve the current timezone in UTC, with or without an explicit timezone.N)Útzinfo)ÚdatetimeÚnowÚtimezoneÚutcÚreplace)Úremove_tzinfoÚdatetime_nowr   r   r   Úget_current_datetime5  s   rˆ   z(?:[0-9]{1,3}\.){3}[0-9]{1,3}ú^ú$z[0-9A-Fa-f]{1,4}z(?:{hex}:{hex}|{ipv4}))ÚhexÚipv4)r‹   Ú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>`  s    r’   ú)z(?:%25|%)(?:[z]|%[a-fA-F0-9]{2})+z\[z)?\]z	
)r   é   é   )ÚEC)NN)r2   r3   r,   )T)mrM   r�   rY   r(   r@   rT   Úhttp.clientr   Úloggingr\   ÚreÚosÚcollectionsr   Úcollections.abcr   Úmathr   Úbotocore.vendoredr   Úbotocore.exceptionsr   rp   r   Úurllib3r	   Ú	getLoggerr   Úloggerr
   Úurllib.parser   r   r   r   r   r   r   r   r   r   r   Úior   Ú_IOBaseÚbase64r   Úemail.utilsr   Ú	itertoolsr   Ú	file_typeÚzipÚunquote_strr&   r+   r1   r;   Úxml.etree.ElementTreeÚetreeÚElementTreeÚETreeÚ
ParseErrorÚXMLParseErrorÚjsonrC   ÚclassmethodrJ   rL   rO   rP   rU   rS   ÚAttributeErrorr9   rW   r^   r[   rq   Úawscrt.authrv   ÚenvironÚgetÚdisabledÚlowerru   ÚImportErrorr   rˆ   ÚIPV4_PATÚcompileÚIPV4_REÚHEX_PATÚformatÚLS32_PATr�   Ú_variationsÚUNRESERVED_PATrg   ÚIPV6_PATÚZONE_ID_PATÚIPV6_ADDRZ_PATÚIPV6_ADDRZ_REÚ	frozensetÚUNSAFE_URL_CHARSÚgzipÚHAS_GZIPÚawscrt.cryptor–   r   r   r   r   Ú<module>   s¬   
0



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