U ä€C^�+ã@sjddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z ddlmZe e¡Ze j�rˆddlmZGdd„dejƒZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddl#m$Z$ddl%m&Z'ddl(m)Z)ddl*m+Z+ddl,m-Z-e'Z.e/Z/eZ0dd„Z1dd„Z2dAdd„Z3dBd d!„Z4�ndd l5mZdd l5mZdd l5mZdd l5mZdd lmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"dd"l6m7Z7ddl8m+Z+e9Z.dd#l,m:Z/dd$l,m;Z-ddlm?Z?ddl@ZAeAjBjCjDZEddlFZFd.d/„ZGeHd0d1„ƒZIeHd2d3„ƒZJeIe_IeJe_Jd4d5„ZKd6d7„ZLze M¡d8ZNWneOk �rd9ZNYnXd:d;„ZPdFdd?„ZRzdd@lSmTZTWn"eUk �rddd@l>mTZTYnXdS)GéN)Úfloor)Úsix)ÚMD5UnavailableError)Ú exceptions)Ú http_clientc@s eZdZdS)Ú HTTPHeadersN)Ú__name__Ú __module__Ú __qualname__©r r ú5/tmp/pip-install-6_kvzl1k/botocore/botocore/compat.pyr"sr)Úquote)Ú urlencode)Úunquote)Ú unquote_plus)Úurlparse)Úurlsplit)Ú urlunsplit)Úurljoin)Ú parse_qsl)Úparse_qs)Ú HTTPResponse)ÚIOBase)Ú encodebytes)Ú formatdate)Ú zip_longestcCs|jjjj |¡dS©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<sr%cCst |¡dS©Né)ÚinspectÚgetfullargspec©Úfuncr r r Úaccepts_kwargsDsr,cCs|S©Nr ©ÚsÚencodingÚerrorsr r r Úensure_unicodeIsr2úutf-8ÚstrictcCs8t|tƒr| ||¡St|tƒr$|Stdt|ƒƒ‚dS)Nz#Expected str or bytes, received %s.)Ú isinstanceÚstrÚencodeÚbytesÚ ValueErrorÚtyper.r r r Ú ensure_bytesMs    r;)ÚMessage)Úizip)Ú izip_longest)Ú encodestringc@seZdZdd„ZdS)rccs|jD]\}}|VqdSr-)Ú_headers)ÚselfÚfieldÚvaluer r r Ú__iter__kszHTTPHeaders.__iter__N)rr r rDr r r r rgscCs| |¡}t|ƒ |¡Sr-)r7rÚdecode)rCr0Z byte_stringr r r Ú unquote_stros rFcCs|jjj |¡dSr)rrr r!r"r r r r%yscCst |¡dSr&)r(Ú getargspecr*r r r r,�scCst|tjƒr|St|||ƒSr-)r5rÚ text_typeÚunicoder.r r r r2„s cCs8t|tƒr| ||¡St|tƒr$|Stdt|ƒƒ‚dS)Nz%Expected str or unicode, received %s.)r5rIr7r6r9r:r.r r r r;‰s    )Ú OrderedDictcCstjddtjdd�dS)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 ürRcCs$|ƒ}| ¡D]\}}|||<q|Sr-)Úitems)ÚclsÚdÚ new_instanceÚkeyrCr r r Ú from_dict¢s rXcCs |ƒ}|D]\}}|||<q |Sr-r )rTÚpairsrVrWrCr r r Ú from_pairsªs  rZcCst |¡}|S)zI This used to be a compat shim for 2.6 but is now just an alias. )Úcopy)ÚkwargsÚ copy_kwargsr r r r]µs r]cCs| ¡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 r^½s r^TFcOstrtj||ŽStƒ‚dS)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. N)Ú MD5_AVAILABLEÚhashlibÚmd5r)Úargsr\r r r Úget_md5Òs  rdcCs,|dkrtj}|dkrt|ƒSt |¡SdS)NÚwin32)ÚsysÚplatformÚ_windows_shell_splitÚshlexÚsplit)r/rgr r r Úcompat_shell_splitäs rkcCs8|sgSg}g}d}d}|D]Ö}|dkr2|d7}q|dkrŽ|dkr|| dtt|dƒƒ¡|d}d}|dkr|| d¡q| }| d¡q|dkrÎ|sÎ|dkr´| d|¡d}|rò| d |¡¡g}q|dkrè| d|¡d}| |¡q|�rtd |ƒ‚|dk�r| d|¡|�r4| d |¡¡|S) aSplits 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Újoinr9)r/Ú componentsZbuffZ is_quotedZnum_backslashesÚ characterÚ remainderr r r rhîsJ       rh)ÚMutableMapping)NN)r3r4)r3)r3r4)r3r4)N)Vr[Údatetimerfr(rOraÚloggingriÚmathrZbotocore.vendoredrZbotocore.exceptionsrÚurllib3rÚ getLoggerrÚloggerÚPY3Zbotocore.vendored.six.movesrÚ HTTPMessagerÚ urllib.parser rrrrrrrrrÚ http.clientrÚiorÚ_IOBaseÚbase64rÚ email.utilsrÚ itertoolsrÚ file_typeÚziprFr%r,r2r;ÚurllibÚ email.messager<Z email.UtilsÚfiler=r>Úhttplibr?Ú collectionsrJÚxml.etree.cElementTreeÚxmlÚetreeÚ cElementTreeÚ ParseErrorZ XMLParseErrorÚjsonrRÚ classmethodrXrZr]r^rbr`r9rdrkrhÚcollections.abcrxÚ ImportErrorr r r r Úsª                                                ^