Viewing File: /usr/lib/python3.6/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-36.opt-1.pyc

3

aj/l@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZddl
mZddlmZddlmZddlmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!dd	l"m#Z#dd
l$m%Z%ddl&m'Z'm(Z(m)Z)m*Z*dfZ+ej,Z-dddZ.ej/dkr0ddZ0ddZddZ1ddZ2dgddZ3ddZ4dd Z5d!d"Z6d#d$Z7d%d&Z8dhd'd(Z9d)d*Z:d+d,Z;d-d.Z<d/d0Z=d1d2Z>d3d4Z?d5d6Z@eAdiZBd9d:ZCd;d<ZDd=d>ZEd?d@ZFdAdBZGdCdDZHejIdEdFZJdGdHZKdjdIdJZLdKdLZMdkdNdOZNdPdQZOdRdSZPdTjQdUZReRdVZSeRdWZTdXdYZUdZd[ZVd\d]ZWejXd^ZYejXd_ZZd`daZ[dbdcZ\dddeZ]dS)lz
requests.utils
~~~~~~~~~~~~~~

This module provides utility functions that are used within Requests
that are also useful for external consumption.
N)__version__)certs)to_native_string)parse_http_list)quoteurlparsebytesstrOrderedDictunquote
getproxiesproxy_bypass
urlunparse
basestring
integer_typesis_py3proxy_bypass_environmentgetproxies_environment)cookiejar_from_dict)CaseInsensitiveDict)
InvalidURL
InvalidHeaderFileModeWarningUnrewindableBodyError.netrc_netrcPi)ZhttpZhttpsZWindowsc
Cstrddl}nddl}y2|j|jd}|j|dd}|j|dd}Wntk
r\dSX|sj|rndS|jd}xX|D]P}|dkrd|krd	S|jdd
}|jdd}|jd
d}t	j
||t	jr~d	Sq~WdS)Nrz;Software\Microsoft\Windows\CurrentVersion\Internet SettingsZProxyEnableZ
ProxyOverrideF;z<local>.Tz\.*z.*?)rwinreg_winregOpenKeyHKEY_CURRENT_USERZQueryValueExOSErrorsplitreplacerematchI)hostr"ZinternetSettingsZproxyEnableZ
proxyOverrideZtestr-/usr/lib/python3.6/utils.pyproxy_bypass_registry.s2



r/cCstrt|St|SdS)zReturn True, if the host should be bypassed.

        Checks proxy settings gathered from the environment, if specified,
        or the registry.
        N)rrr/)r,r-r-r.rOsrcCst|dr|j}|S)z/Returns an internal sequence dictionary update.items)hasattrr0)dr-r-r.dict_to_sequence[s
r3cCs2d}d}t|drt|}nbt|dr.|j}nPt|dr~y|j}Wntjk
rZYn$Xtj|j}d|jkr~t	j
dtt|dry|j}Wn$t
tfk
r|dk	r|}Yn\Xt|do|dkry&|jdd	|j}|j|pdWnt
tfk
rd}YnX|dkr$d}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)r1r5r6ioUnsupportedOperationosfstatst_sizemodewarningswarnrr8r&IOErrorr9max)oZtotal_lengthZcurrent_positionr6r-r-r.	super_lends@







rFFcCsyddlm}m}d}xJtD]B}ytjjdj|}Wntk
rJdSXtjj|r|}PqW|dkrndSt	|}d}t
|tr|jd}|j
j|d}	y6||j|	}
|
r|
drdnd}|
||
dfSWn|tfk
r|rYnXWnttfk
rYnXdS)	z;Returns the Requests tuple auth for a given url from netrc.r)netrcNetrcParseErrorNz~/{0}:asciirr:)rGrHNETRC_FILESr=path
expanduserformatKeyErrorexistsr
isinstancer
decodenetlocr'ZauthenticatorsrCImportErrorAttributeError)urlZraise_errorsrGrHZ
netrc_pathflocZriZsplitstrr,rZlogin_ir-r-r.get_netrc_auths8


rYcCsBt|dd}|r>t|tr>|ddkr>|ddkr>tjj|SdS)z0Tries to guess the filename of the given object.nameNr<r>)getattrrQrr=rLbasename)objrZr-r-r.guess_filenamesracCs.|dkrdSt|ttttfr&tdt|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')
        ValueError: need more than 1 value to unpack
        >>> from_key_val_list({'key': 'val'})
        OrderedDict([('key', 'val')])

    :rtype: OrderedDict
    Nz+cannot encode objects that are not 2-tuples)rQr
r	boolint
ValueErrorr)valuer-r-r.from_key_val_lists
rfcCsB|dkrdSt|ttttfr&tdt|tjr:|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')
        ValueError: cannot encode objects that are not 2-tuples.

    :rtype: list
    Nz+cannot encode objects that are not 2-tuples)
rQr
r	rbrcrdcollectionsMappingr0list)rer-r-r.to_key_val_listsrjcCs\g}xRt|D]F}|dd|ddko4dknrJt|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"r]r])_parse_list_headerunquote_header_valueappend)reresultitemr-r-r.parse_list_headers(rqcCs|i}xrt|D]f}d|kr$d||<q|jdd\}}|dd|ddkoVdknrlt|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
    =Nrrkr]r])rlr'rm)rerorprZr-r-r.parse_dict_header1s(rscCs^|rZ|d|d	kodknrZ|dd
}|sF|dddkrZ|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
    rrrkNr:z\\\z\"r]r])r()reZis_filenamer-r-r.rmTs
$rmcCs"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
    )rerZ)cjcookie_dictZcookier-r-r.dict_from_cookiejarms
rwcCs
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)rurvr-r-r.add_dict_to_cookiejar|srxcCsTtjdttjdtjd}tjdtjd}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=["\']*(.+?)["\'>])rArBDeprecationWarningr)compiler+findall)contentZ
charset_reZ	pragma_reZxml_rer-r-r.get_encodings_from_contents
r~cCsF|jd}|sdStj|\}}d|kr6|djdSd|krBdSdS)z}Returns encodings from given HTTP Header Dict.

    :param headers: dictionary to extract encoding from.
    :rtype: str
    zcontent-typeNcharsetz'"textz
ISO-8859-1)getcgiZparse_headerstrip)headersZcontent_typeparamsr-r-r.get_encoding_from_headerss
rccsr|jdkr"x|D]
}|VqWdStj|jdd}x |D]}|j|}|r:|Vq:W|jddd}|rn|VdS)zStream decodes a iterator.Nr()errorsT)final)encodingcodecsgetincrementaldecoderrR)iteratorrrpdecoderchunkrvr-r-r.stream_decode_response_unicodes





rccsLd}|dks|dkrt|}x*|t|krF||||V||7}qWdS)z Iterate over slices of a string.rN)r5)stringZslice_lengthposr-r-r.iter_slicessrcCsvtjdtg}t|j}|rJyt|j|Stk
rH|j|YnXyt|j|ddSt	k
rp|jSXdS)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.)r()rN)
rArBrzrrr
r}UnicodeErrorrn	TypeError)rZtried_encodingsrr-r-r.get_unicode_from_responses
rZ4ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzz0123456789-._~c
Cs|jd}xtdt|D]}||dd}t|dkr|jrytt|d}Wn tk
rttd|YnX|tkr|||dd||<qd||||<qd||||<qWdj	|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
    %rrr:z%Invalid percent-escape sequence: '%s'N)
r'ranger5isalnumchrrcrdrUNRESERVED_SETjoin)uripartsihcr-r-r.unquote_unreserveds
rcCs:d}d}ytt||dStk
r4t||dSXdS)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!#$&'()*+,/:;=?@[]~)ZsafeN)rrr)rZsafe_with_percentZsafe_without_percentr-r-r.requote_uri
srcCsltjdtj|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=Lr/)structunpacksocket	inet_atonr'dotted_netmaskrc)ipZnetZipaddrZnetaddrbitsZnetmaskZnetworkr-r-r.address_in_network#s
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)rZ	inet_ntoarpack)maskrr-r-r.r2srcCs*ytj|Wntjk
r$dSXdS)z
    :rtype: bool
    FT)rrerror)Z	string_ipr-r-r.is_ipv4_address=s
rcCs|jddkryt|jdd}Wntk
r8dSX|dksJ|dkrNdSytj|jddWqtjk
r|dSXndSdS)zV
    Very simple check of the cidr format in no_proxy variable.

    :rtype: bool
    rrFrrT)countrcr'rdrrr)Zstring_networkrr-r-r.
is_valid_cidrHsrccsT|dk	}|r"tjj|}|tj|<z
dVWd|rN|dkrDtj|=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)r=environr)Zenv_namereZ
value_changedZ	old_valuer-r-r.set_environ`s


rc	Csdd}|}|dkr|d}t|j}|rdd|jddjd	D}|jd
d}t|rxb|D](}t|r~t||rdSqb||krbdSqbWn0x.|D]&}|j|s|jd
dj|rdSqWtd|2yt	|}Wnt
tjfk
rd
}YnXWdQRX|rdSd
S)zL
    Returns whether we should bypass proxies or not.

    :rtype: bool
    cSstjj|ptjj|jS)N)r=rrupper)kr-r-r.<lambda>|sz'should_bypass_proxies.<locals>.<lambda>Nno_proxycss|]}|r|VqdS)Nr-).0r,r-r-r.	<genexpr>sz(should_bypass_proxies.<locals>.<genexpr> r,:rTF)
rrSr(r'rrrendswithrrrrZgaierror)	rVrZ	get_proxyZno_proxy_argrSrZproxy_ipr,Zbypassr-r-r.should_bypass_proxiesvs4




rcCst||driStSdS)zA
    Return a dict of environment proxies.

    :rtype: dict
    )rN)rr
)rVrr-r-r.get_environ_proxiessrcCsv|pi}t|}|jdkr.|j|j|jdS|jd|j|jd|jdg}d}x|D]}||krX||}PqXW|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://)rZhostnamerscheme)rVZproxiesZurlpartsZ
proxy_keysproxyZ	proxy_keyr-r-r.select_proxys

rpython-requestscCsd|tfS)zO
    Return a string representing the default user agent.

    :rtype: str
    z%s/%s)r)rZr-r-r.default_user_agentsrcCsttdjddddS)z9
    :rtype: requests.structures.CaseInsensitiveDict
    z, gzipdeflatez*/*z
keep-alive)z
User-AgentzAccept-EncodingZAcceptZ
Connection)rr)rrrr-r-r-r.default_headerss
rc	Csg}d}xtjd|D]}y|jdd\}}Wntk
rL|d}}YnXd|jdi}xP|jdD]B}y|jd\}}Wntk
rPYnX|j|||j|<qhW|j|qW|S)	zReturn a dict 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, *<rrrrVz<> '"rr)r)r'rdrrn)	reZlinksZ
replace_charsvalrVrlinkZparamkeyr-r-r.parse_header_linkss rrJr:cCs|dd}|tjtjfkr dS|ddtjkr6dS|ddtjtjfkrRdS|jt}|dkrhd	S|dkr|dddtkrd
S|dddtkrdS|dkr|ddt	krd
S|ddt	krdSdS)z
    :rtype: str
    Nzutf-32rz	utf-8-sigr:zutf-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)dataZsampleZ	nullcountr-r-r.guess_json_utfs*
rcCs8t||\}}}}}}|s$||}}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
    )rr)rVZ
new_schemerrSrLrqueryfragmentr-r-r.prepend_scheme_if_needed1s
rcCsBt|}yt|jt|jf}Wnttfk
r<d}YnX|S)z{Given a url with authentication components, extract them into a tuple of
    username,password.

    :rtype: (str,str)
    r)rr)rrZusernameZpasswordrUr)rVZparsedZauthr-r-r.get_auth_from_urlBs
rs^\S[^\r\n]*$|^$z^\S[^\r\n]*$|^$cCsf|\}}t|trt}nt}y|j|s4td|Wn*tk
r`td||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)rQr	_CLEAN_HEADER_REGEX_BYTE_CLEAN_HEADER_REGEX_STRr*rrtype)headerrZreZpatr-r-r.check_header_validityWs

rcCsFt|\}}}}}}|s"||}}|jddd}t|||||dfS)zW
    Given a url remove the fragment and the authentication part.

    :rtype: str
    @rrr])rrsplitr)rVrrSrLrrrr-r-r.
urldefragauthls

rcCs`t|jdd}|dk	rTt|jtrTy||jWq\ttfk
rPtdYq\XntddS)zfMove file pointer back to its recorded starting position
    so it can be read again on redirect.
    r9Nz;An error occurred when rewinding request body for redirect.z+Unable to rewind request body for redirect.)r^ZbodyrQZ_body_positionrrCr&r)Zprepared_requestZ	body_seekr-r-r.rewind_body}sr)rr)F)FzBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~)N)r)^__doc__rrrg
contextlibr;r=platformr)rrrArrrZ_internal_utilsrcompatrrlrrr	r
rrr
rrrrrrrZcookiesrZ
structuresr
exceptionsrrrrrKwhereZDEFAULT_CA_BUNDLE_PATHZ
DEFAULT_PORTSsystemr/r3rFrYrarfrjrqrsrmrwrxr~rrrr	frozensetrrrrrrrcontextmanagerrrrrrrrencoderrrrrrr{rrrrrr-r-r-r.<module>	s@
!	=
3 #

%9

	"
 


Back to Directory File Manager