Viewing File: /opt/alt/python35/lib/python3.5/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-35.pyc



t_u@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlm
Z
ddlmZddlmZddlmZddlmZdd	lmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#dd
l$m%Z%ddl&m'Z'ddl(m)Z)m*Z*m+Z+m,Z,dlZ-ej.Z/ddddiZ0ej1dkrddZ2ddZddZ3ddZ4dddZ5dd Z6d!d"Z7d#d$Z8d%d&Z9d'd(Z:d)d*Z;dd+d,Z<d-d.Z=d/d0Z>d1d2Z?d3d4Z@d5d6ZAd7d8ZBd9d:ZCd;d<ZDeEd=d>ZFd?d@ZGdAdBZHdCdDZIdEdFZJdGdHZKdIdJZLejMdKdLZNdMdNZOddOdPZPdQdRZQdSdTdUZRdVdWZSdXdYZTdZjUd[ZVeVd\ZWeVd]ZXd^d_ZYd`daZZdbdcZ[ej\ddZ]ej\deZ^dfdgZ_dhdiZ`djdkZadS)mz
requests.utils
~~~~~~~~~~~~~~

This module provides utility functions that are used within Requests
that are also useful for external consumption.
N)OrderedDict)__version__)certs)to_native_string)parse_http_list)quoteurlparsebytesstrunquote
getproxiesproxy_bypass
urlunparse
basestring
integer_typesis_py3proxy_bypass_environmentgetproxies_environmentMapping)cookiejar_from_dict)CaseInsensitiveDict)
InvalidURL
InvalidHeaderFileModeWarningUnrewindableBodyError.netrc_netrchttpPhttpsiwin32cCsFy%trddl}nddl}Wntk
r=dSYnXyK|j|jd}t|j|dd}|j|dd}Wntk
rdSYnX|s|rdS|j	d}x||D]t}|dkrd|krd	S|j
dd
}|j
dd}|j
d
d}tj||tj
rd	SqWdS)NrFz;Software\Microsoft\Windows\CurrentVersion\Internet SettingsZProxyEnableZ
ProxyOverride;z<local>.Tz\.*z.*?)rwinreg_winregImportErrorOpenKeyHKEY_CURRENT_USERintQueryValueExOSErrorsplitreplacerematchI)hostr&ZinternetSettingsZproxyEnableZ
proxyOverridetestr5/builddir/build/BUILDROOT/alt-python35-pip-20.2.4-1.el7.x86_64/opt/alt/python35/lib/python3.5/site-packages/pip/_vendor/requests/utils.pyproxy_bypass_registry0s8
			
	
r7cCs!trt|St|SdS)zReturn True, if the host should be bypassed.

        Checks proxy settings gathered from the environment, if specified,
        or the registry.
        N)rrr7)r3r5r5r6rWs	
rcCst|dr|j}|S)z/Returns an internal sequence dictionary update.items)hasattrr8)dr5r5r6dict_to_sequencecsr;cCsd}d}t|dr*t|}nt|drE|j}nht|dry|j}Wntjk
r{Yn2Xtj|j}d|jkrt	j
dtt|drhy|j}Wn*t
tfk
r|dk	r|}YnpXt|drh|dkrhy3|jdd	|j}|j|pBdWnt
tfk
rgd}YnX|dkrzd}td||S)
Nr__len__lenfilenoba%Requests has determined the content-length for this request using the binary size of the file: however, the file has been opened in text mode (i.e. without the 'b' flag in the mode). This may lead to an incorrect content-length. In Requests 3.0, support will be removed for files in text mode.tellseek)r9r=r>ioUnsupportedOperationosfstatst_sizemodewarningswarnrr@r-IOErrorrAmax)ototal_lengthcurrent_positionr>r5r5r6	super_lenls@rPFcCsbyCddlm}m}d}x_tD]W}ytjjdj|}Wntk
rcdSYnXtjj|r&|}Pq&W|dkrdSt	|}d}t
|tr|jd}|j
j|d}	yG||j|	}
|
r|
drdnd}|
||
dfSWn!|tfk
rA|r=YnXWnttfk
r]YnXdS)	z;Returns the Requests tuple auth for a given url from netrc.r)netrcNetrcParseErrorNz~/{}:asciirrB)rQrRNETRC_FILESrEpath
expanduserformatKeyErrorexistsr	
isinstancerdecodenetlocr.authenticatorsrKr(AttributeError)urlraise_errorsrQrR
netrc_pathflocrisplitstrr3rlogin_ir5r5r6get_netrc_auths8

	rhcCs[t|dd}|rWt|trW|ddkrW|ddkrWtjj|SdS)z0Tries to guess the filename of the given object.nameNr<r>)getattrr[rrErVbasename)objrir5r5r6guess_filenames%rpcCstjj|r|Stjj|\}}xJ|rztjj|rztjj|\}}dj||g}q1Wtj|s|Stj|}||jkr|St	j
}tjj||jd}tjj|s|j|d|}|S)zReplace nonexistent paths that look like they refer to a member of a zip
    archive with the location of an extracted copy of the target, or else
    just return the provided path unchanged.
    /rV)rErVrZr.joinzipfile
is_zipfileZipFilenamelisttempfile
gettempdirextract)rVarchivememberprefixzip_filetmpextracted_pathr5r5r6extract_zipped_pathss rcCsA|dkrdSt|ttttfr7tdt|S)aTake an object and test to see if it can be represented as a
    dictionary. Unless it can not be represented as such, return an
    OrderedDict, e.g.,

    ::

        >>> from_key_val_list([('key', 'val')])
        OrderedDict([('key', 'val')])
        >>> from_key_val_list('string')
        Traceback (most recent call last):
        ...
        ValueError: cannot encode objects that are not 2-tuples
        >>> from_key_val_list({'key': 'val'})
        OrderedDict([('key', 'val')])

    :rtype: OrderedDict
    Nz+cannot encode objects that are not 2-tuples)r[rr
boolr+
ValueErrorr)valuer5r5r6from_key_val_lists
rcCs\|dkrdSt|ttttfr7tdt|trR|j}t|S)aTake an object and test to see if it can be represented as a
    dictionary. If it can be, return a list of tuples, e.g.,

    ::

        >>> to_key_val_list([('key', 'val')])
        [('key', 'val')]
        >>> to_key_val_list({'key': 'val'})
        [('key', 'val')]
        >>> to_key_val_list('string')
        Traceback (most recent call last):
        ...
        ValueError: cannot encode objects that are not 2-tuples

    :rtype: list
    Nz+cannot encode objects that are not 2-tuples)	r[rr
rr+rrr8list)rr5r5r6to_key_val_listsrcCstg}xgt|D]Y}|dd|ddkoDdknr_t|dd}|j|qW|S)aParse lists as described by RFC 2068 Section 2.

    In particular, parse comma-separated lists where the elements of
    the list may include quoted-strings.  A quoted-string could
    contain a comma.  A non-quoted string could have quotes in the
    middle.  Quotes are removed automatically after parsing.

    It basically works like :func:`parse_set_header` just that items
    may appear multiple times and case sensitivity is preserved.

    The return value is a standard :class:`list`:

    >>> parse_list_header('token, "quoted value"')
    ['token', 'quoted value']

    To create a header from the :class:`list` again, use the
    :func:`dump_header` function.

    :param value: a string with a list header.
    :return: :class:`list`
    :rtype: list
    Nr"rlrl)_parse_list_headerunquote_header_valueappend)rresultitemr5r5r6parse_list_header=s0rcCsi}xt|D]}d|kr2d||<q|jdd\}}|dd|ddkoudknrt|dd}|||<qW|S)a^Parse lists of key, value pairs as described by RFC 2068 Section 2 and
    convert them into a python dict:

    >>> d = parse_dict_header('foo="is a fish", bar="as well"')
    >>> type(d) is dict
    True
    >>> sorted(d.items())
    [('bar', 'as well'), ('foo', 'is a fish')]

    If there is no value for a key it will be `None`:

    >>> parse_dict_header('key_without_value')
    {'key_without_value': None}

    To create a header from the :class:`dict` again, use the
    :func:`dump_header` function.

    :param value: a string with a dict header.
    :return: :class:`dict`
    :rtype: dict
    =Nrrrlrl)rr.r)rrrrir5r5r6parse_dict_header]s
0rcCsw|rs|d|d	ko%dknrs|dd
}|sW|dddkrs|jddjddS|S)zUnquotes a header value.  (Reversal of :func:`quote_header_value`).
    This does not use the real unquoting but what browsers are actually
    using for quoting.

    :param value: the header value to unquote.
    :rtype: str
    rrrNrBz\\\z\"rlrl)r/)ris_filenamer5r5r6rs
*rcCs+i}x|D]}|j||j<q
W|S)zReturns a key/value dictionary from a CookieJar.

    :param cj: CookieJar object to extract cookies from.
    :rtype: dict
    )rri)cjcookie_dictcookier5r5r6dict_from_cookiejars
rcCs
t||S)zReturns a CookieJar from a key/value dictionary.

    :param cj: CookieJar to insert cookies into.
    :param cookie_dict: Dict of key/values to insert into CookieJar.
    :rtype: CookieJar
    )r)rrr5r5r6add_dict_to_cookiejarsrcCsvtjdttjddtj}tjddtj}tjd}|j||j||j|S)zlReturns encodings from given content string.

    :param content: bytestring to extract encodings from.
    zIn requests 3.0, get_encodings_from_content will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.)z!<meta.*?charset=["\']*(.+?)["\'>]flagsz+<meta.*?content=["\']*;?charset=(.+?)["\'>]z$^<\?xml.*?encoding=["\']*(.+?)["\'>])rIrJDeprecationWarningr0compiler2findall)content
charset_re	pragma_rexml_rer5r5r6get_encodings_from_contentsrc
Cs|jd}|dj|dd}}i}d}x|D]}|j}|rC|d}}|jd}	|	dkr|d|	j|}||	ddj|}|||j<qCW||fS)	zReturns content type and parameters from given header

    :param header: string
    :return: tuple containing content type and dictionary of
         parameters
    r"rrNz"' Trrl)r.stripfindlower)
headertokenscontent_typeparamsparams_dictitems_to_stripparamkeyrindex_of_equalsr5r5r6_parse_content_type_headers!

rcCs\|jd}|sdSt|\}}d|krH|djdSd|krXdSdS)z}Returns encodings from given HTTP Header Dict.

    :param headers: dictionary to extract encoding from.
    :rtype: str
    zcontent-typeNcharsetz'"textz
ISO-8859-1)getrr)headersrrr5r5r6get_encoding_from_headerssrccs|jdkr)x|D]}|VqWdStj|jdd}x(|D] }|j|}|rK|VqKW|jddd}|r|VdS)zStream decodes a iterator.Nerrorsr/finalT)encodingcodecsgetincrementaldecoderr\)iteratorrrdecoderchunkrvr5r5r6stream_decode_response_unicodes
	
	rccsdd}|dks|dkr*t|}x3|t|kr_||||V||7}q-WdS)z Iterate over slices of a string.rN)r=)stringslice_lengthposr5r5r6iter_slicessrcCstjdtg}t|j}|rayt|j|SWntk
r`|j|YnXyt|j|ddSWnt	k
r|jSYnXdS)zReturns the requested content back in unicode.

    :param r: Response object to get unicode content from.

    Tried:

    1. charset from content-type
    2. fall back and replace all unicode characters

    :rtype: str
    zIn requests 3.0, get_unicode_from_response will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.)rr/N)
rIrJrrrrrUnicodeErrorr	TypeError)rtried_encodingsrr5r5r6get_unicode_from_responses

rZ4ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzz0123456789-._~c
Cs|jd}xtdt|D]}||dd}t|dkr|jrytt|d}Wn"tk
rtd|YnX|tkr|||dd||<qd||||<q%d||||<q%Wdj	|S)	zUn-escape any percent-escape sequences in a URI that are unreserved
    characters. This leaves all reserved, illegal and non-ASCII bytes encoded.

    :rtype: str
    %rrrBz%Invalid percent-escape sequence: '%s'N)
r.ranger=isalnumchrr+rrUNRESERVED_SETrr)uripartsihcr5r5r6unquote_unreserved:s
rcCsOd}d}ytt|d|SWn"tk
rJt|d|SYnXdS)zRe-quote the given URI.

    This function passes the given URI through an unquote/quote cycle to
    ensure that it is fully and consistently quoted.

    :rtype: str
    z!#$%&'()*+,/:;=?@[]~z!#$&'()*+,/:;=?@[]~safeN)rrr)rsafe_with_percentsafe_without_percentr5r5r6requote_uriRs
rcCstjdtj|d}|jd\}}tjdtjtt|d}tjdtj|d|@}||@||@kS)zThis function allows you to check if an IP belongs to a network subnet

    Example: returns True if ip = 192.168.1.1 and net = 192.168.1.0/24
             returns False if ip = 192.168.1.1 and net = 192.168.100.0/24

    :rtype: bool
    z=Lrrq)structunpacksocket	inet_atonr.dotted_netmaskr+)ipnetipaddrnetaddrbitsnetmasknetworkr5r5r6address_in_networkhs
+#rcCs/ddd|>dA}tjtjd|S)zConverts mask from /xx format to xxx.xxx.xxx.xxx

    Example: if mask is 24 function returns 255.255.255.0

    :rtype: str
    lr z>I)r	inet_ntoarpack)maskrr5r5r6rwsrcCs1ytj|Wntjk
r,dSYnXdS)z
    :rtype: bool
    FT)rrerror)	string_ipr5r5r6is_ipv4_addresss
	rcCs|jddkryt|jdd}Wntk
rJdSYnX|dksc|dkrgdSytj|jddWqtjk
rdSYqXndSdS)zV
    Very simple check of the cidr format in no_proxy variable.

    :rtype: bool
    rqrFrrT)countr+r.rrrr)string_networkrr5r5r6
is_valid_cidrs
	rccsn|dk	}|r1tjj|}|tj|<z	dVWd|ri|dkr\tj|=n
|tj|<XdS)zSet the environment variable 'env_name' to 'value'

    Save previous value, yield, and then restore the previous value stored in
    the environment variable 'env_name'.

    If 'value' is None, do nothingN)rEenvironr)env_namer
value_changed	old_valuer5r5r6set_environs
	
rc	Csdd}|}|dkr*|d}t|}|jdkrIdS|r0dd|jdd	jd
D}t|jrx|D]>}t|rt|j|rdSq|j|krdSqWn^|j}|jr|dj|j7}x3|D]+}|jj	|s(|j	|rdSqWt
d|<yt|j}Wn!tt
jfk
rvd}YnXWdQRX|rdSdS)
zL
    Returns whether we should bypass proxies or not.

    :rtype: bool
    cSs(tjj|p'tjj|jS)N)rErrupper)kr5r5r6<lambda>sz'should_bypass_proxies.<locals>.<lambda>Nno_proxyTcss|]}|r|VqdS)Nr5).0r3r5r5r6	<genexpr>sz(should_bypass_proxies.<locals>.<genexpr> r,z:{}F)r	hostnamer/r.rrrportrXendswithrrrrgaierror)	r`r	get_proxyno_proxy_argparsedproxy_iphost_with_portr3bypassr5r5r6should_bypass_proxiess<(
		
!rcCs!t|d|riStSdS)zA
    Return a dict of environment proxies.

    :rtype: dict
    rN)rr
)r`rr5r5r6get_environ_proxiessrcCs|p	i}t|}|jdkrC|j|j|jdS|jd|j|jd|jdg}d}x%|D]}||krz||}PqzW|S)zSelect a proxy for the url, if applicable.

    :param url: The url being for the request
    :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs
    Nallz://zall://)r	rrscheme)r`proxiesurlparts
proxy_keysproxy	proxy_keyr5r5r6select_proxys
	

rzpython-requestscCsd|tfS)zO
    Return a string representing the default user agent.

    :rtype: str
    z%s/%s)r)rir5r5r6default_user_agentsrc	Cs.tdtddjd
dddd	iS)z9
    :rtype: requests.structures.CaseInsensitiveDict
    z
User-AgentzAccept-Encodingz, gzipdeflateAcceptz*/*
Connectionz
keep-alive)rr)rrrrr5r5r5r6default_headers's
	rc	Csg}d}|j|}|s%|Sxtjd|D]}y|jdd\}}Wntk
r{|d}}YnXd|jdi}xb|jdD]Q}y|jd\}}Wntk
rPYnX|j|||j|<qW|j|q8W|S)	zReturn a list of parsed link headers proxies.

    i.e. Link: <http:/.../front.jpeg>; rel=front; type="image/jpeg",<http://.../back.jpeg>; rel=back;type="image/jpeg"

    :rtype: list
    z '"z, *<r"rrr`z<> '"r)rr0r.rr)	rlinks
replace_charsvalr`rlinkrrr5r5r6parse_header_links3s&

 rrTrBcCs|dd}|tjtjfkr,dS|ddtjkrIdS|ddtjtjfkrodS|jt}|dkrd	S|dkr|dddtkrd
S|dddtkrdS|dkr|ddt	krd
S|ddt	krdSdS)z
    :rtype: str
    Nzutf-32rz	utf-8-sigrBzutf-16rzutf-8z	utf-16-berz	utf-16-lez	utf-32-bez	utf-32-le)
rBOM_UTF32_LEBOM_UTF32_BEBOM_UTF8BOM_UTF16_LEBOM_UTF16_BEr_null_null2_null3)datasample	nullcountr5r5r6guess_json_utf^s*"r(cCsPt||\}}}}}}|s4||}}t||||||fS)zGiven a URL that may or may not have a scheme, prepend the given scheme.
    Does not replace a present scheme with the one provided as an argument.

    :rtype: str
    )r	r)r`
new_schemerr]rVrqueryfragmentr5r5r6prepend_scheme_if_needed~s!
r,cCsSt|}y"t|jt|jf}Wnttfk
rNd}YnX|S)z{Given a url with authentication components, extract them into a tuple of
    username,password.

    :rtype: (str,str)
    r)rr)r	rusernamepasswordr_r)r`rauthr5r5r6get_auth_from_urls"r0s^\S[^\r\n]*$|^$z^\S[^\r\n]*$|^$cCs|\}}t|tr$t}nt}y#|j|sLtd|Wn1tk
rtd||t|fYnXdS)zVerifies that header value is a string which doesn't contain
    leading whitespace or return characters. This prevents unintended
    header injection.

    :param header: tuple, in the format (name, value).
    z7Invalid return character or leading space in header: %sz>Value for header {%s: %s} must be of type str or bytes, not %sN)r[r
_CLEAN_HEADER_REGEX_BYTE_CLEAN_HEADER_REGEX_STRr1rrtype)rrirpatr5r5r6check_header_validitys	
r5cCsct|\}}}}}}|s1||}}|jddd}t|||||dfS)zW
    Given a url remove the fragment and the authentication part.

    :rtype: str
    @rrrl)r	rsplitr)r`rr]rVrr*r+r5r5r6
urldefragauths

r8cCs~t|jdd}|dk	rnt|jtrny||jWqzttfk
rjtdYqzXntddS)zfMove file pointer back to its recorded starting position
    so it can be read again on redirect.
    rANz;An error occurred when rewinding request body for redirect.z+Unable to rewind request body for redirect.)rmbodyr[_body_positionrrKr-r)prepared_request	body_seekr5r5r6rewind_bodysr=)rr)b__doc__r
contextlibrCrEr0rrsysrwrIrscollectionsrrrr_internal_utilsrcompatrrrr	r
rrr
rrrrrrrrcookiesr
structuresr
exceptionsrrrrrUwhereDEFAULT_CA_BUNDLE_PATH
DEFAULT_PORTSplatformr7r;rPrhrprrrrrrrrrrrrrr	frozensetrrrrrrrcontextmanagerrrrrrrrencoder"r#r$r(r,r0rr1r2r5r8r=r5r5r5r6<module>	s^"'	=3  #
%
=	&

 
Back to Directory File Manager