Files
intellecton/venv/lib/python3.12/site-packages/requests/__pycache__/utils.cpython-312.pyc
T

359 lines
39 KiB
Plaintext
Raw Normal View History

Ë
KÀjâ�ãóB—UdZddlmZddlZddlZddlZddlZddlZddlZddl Z ddl
Z
ddl Z ddl Z ddl
Z
ddlmZddlmZmZddlmZmZmZmZmZmZddlmZmZdd lmZdd
lmZdd l m!Z!m"Z"m#Z#m$Z$dd l%m&Z'dd
l(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5ddl(m6Z7ddl8m9Z9ddl:m;Z;m<Z<m=Z=m>Z>ddl?m@Z@erddlAmBZBddlmCZCddlm%ZDddlEmFZFmGZGmHZHdZIdeJd<ej–«ZLdeJd<dddœZMdeJd<ed«ZNed «ZOd!j¡ej¢d"ed#¬$«d%««ZRdeJd&<e
j¦d'k(rd\d(„ZTd\d)„Z/ d]d*„ZUd^d+„ZV d_ d`d,„ZWdad-„ZXdbd.„ZYej´dcd/„«Z[ ddd0„Z\eded1„«Z]e dfd2„«Z] dgd3„Z]dhd4„Z^did5„Z_d_djd6„Z`dkd7„Zadld8„Zbdmd9„Zcdnd:„Zddod;„Ze dpd<„Zfe dqd=„«Zge drd>„«Zg dsd?„Zgdtd@„ZheidA«ZjdeJdB<dudC„ZkdudD„ZldvdE„ZmdwdF„ZndxdG„ZodydH„Zpej´dzdI„«Zqd{dJ„Zrd|d}dK„Zsd~dL„Zt d d€dM„Zud�d‚dN„ZvdƒdO„Zwd„dP„ZxdQjódR«ZzezdSzZ{ezdTzZ|d…dU„Z}d†dV„Z~d‡dW„ZdˆdX„Z€ d‰dY„Z�dŠdZ„Z‚d‹d[„Zƒy)Œz”
requests.utils
~~~~~~~~~~~~~~
This module provides utility functions that are used within Requests
that are also useful for external consumption.
é)Ú annotationsN)Ú OrderedDict)Ú GeneratorÚIterable)Ú
TYPE_CHECKINGÚAnyÚFinalÚTypeVarÚcastÚoverload)Ú make_headersÚ parse_urlé)Úcerts©Ú __version__)Ú_HEADER_VALIDATORS_BYTEÚ_HEADER_VALIDATORS_STRÚHEADER_VALIDATORSÚto_native_string)Ú
SupportsItems)
ÚMappingÚbytesÚ
getproxiesÚgetproxies_environmentÚ
integer_typesÚ is_urllib3_1Ú proxy_bypassÚproxy_bypass_environmentÚquoteÚstrÚunquoteÚurlparseÚ
urlunparse)Úparse_http_list©Úcookiejar_from_dict)ÚFileModeWarningÚ
InvalidHeaderÚ
InvalidURLÚUnrewindableBodyError)ÚCaseInsensitiveDict)Ú CookieJar)ÚBufferedWriter)Ú_types)ÚPreparedRequestÚRequestÚResponse)z.netrcÚ_netrcr Ú NETRC_FILESr!ÚDEFAULT_CA_BUNDLE_PATHéPi»)ÚhttpÚhttpsÚ
DEFAULT_PORTSÚ_KTÚ_VTz, z,\s*T)Úaccept_encodingzaccept-encodingÚDEFAULT_ACCEPT_ENCODINGÚwin32có— ddl} |j|jd«}t |j |d«d«}|j |d«d}|r|sy|jd«}td|«}|D]j}|dk(rd|vry |jdd
«}|jd d «}|jd
d«}tj||tj«sŒjy y#t$rYywxYw#t tf$rYywxYw)NrFz;Software\Microsoft\Windows\CurrentVersion\Internet SettingsÚ ProxyEnableÚ
ProxyOverrideú;z<local>ú.Tz\.Ú*z.*ú?)ÚwinregÚ ImportErrorÚOpenKeyÚHKEY_CURRENT_USERÚintÚ QueryValueExÚOSErrorÚ
ValueErrorÚsplitÚfilterÚreplaceÚreÚmatchÚI)ÚhostrFÚinternetSettingsÚ proxyEnableÚ
proxyOverrideÚtests úQ/home/antigravity/intellecton/venv/lib/python3.12/site-packages/requests/utils.pyÚproxy_bypass_registryrZcs%€ð Û ð
Ø%Ÿ~™~Ø×(Ñ(ØNó Ð ô
˜f×1Ñ1Ð2BÀMÓRÐSTÑUÓVˆKà"×/Ñ/Ð0@À/ÓRÐSTÑUˆMñ¡-Øð
&×+Ñ+¨CÓ0ˆ
ä˜t ]Ó3ˆ
à!ò ˆDØ�yÒ Ø˜d‘?ÙØ—<‘<  UÓ+ˆDØ—<‘<  UÓ+ˆDØ—<‘<  TÓ*ˆDÜ�x‰x˜˜d¤B§D¡DÕ)Ùð ðøôCò Ùð ûôœÐ$ò Ùð ús#‚C(‡AC7Ã( C4Ã3C4Ã7D ÄD cóB—t«r t|«St|«S)zšReturn True, if the host should be bypassed.
Checks proxy settings gathered from the environment, if specified,
or the registry.
)rrrZ)rTs rYrr‰s €ô "Ô #Ü+¨DÓ1Ð 1ä(¨Ó.Ð .ócóF—t|t«r|j«S|S)z/Returns an internal sequence dictionary update.)Ú
isinstanceÚ_SupportsItemsÚitems)Úds rYÚdict_to_sequencerb•s€ô
�!”^Ô$Ø�w‰w‹yÐà €Hr\cóö—d}d}ts!t|t«r|jd«}t |d«r t |«}n~t |d«r
|j
}net |d«rY |j
«}tj|«j}d|jvrtjdt« t |d«rW |j#«}t |d «r:|€8 |j%dd
«|j#«}|j%|xsd«|€d}t)d||z
«S#tjt f$rYŒ‘wxYw#t&$rd}YŒ?wxYw#t&$r|�|}YŒRwxYw) Nrúutf-8Ú__len__ÚlenÚfilenoÚba%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.ÚtellÚseeké)rr^r!ÚencodeÚhasattrrfrgÚosÚfstatÚst_sizeÚmodeÚwarningsÚwarnr(ÚioÚUnsupportedOperationÚAttributeErrorrirjrLÚmax)ÚoÚ total_lengthÚcurrent_positionrgs rYÚ super_lenr{ sy€Ø€LØÐå œJ q¬#Ô.ð
�H‰H�WÓ ˆäˆq�)Ôܘ1“v‰ ä ��EÔ Ø—u‘u‰ ä ��HÔ ð Ø—X‘X“ZˆFôŸ8™8 FÓ+×3Ñ3ˆLð˜!Ÿ&™&Ñ Ü—
‘
ð2ô$õ
ôˆq�&Ôð %Ø Ÿv™v›xÐ ô�q˜&Ô! lÐ&:ð %à—F‘F˜1˜a”LØ#$§6¡6£8�Lð—F‘FÐ+Ò0¨qÔ1ðÐØˆ ä ˆq�,Ð!1Ñ1Ó 2Ð2øôe×'Ñ'¬Ð8ò ñ
ð  ûôXò%Ø#$’Lð%ûô%ò 0ð
Ð'Ø#/Ð ùð
 0ús6Á*D8ÃE(Ã.7EÄ8EÅEÅ E%Å$E%Å(
E8Å7E8có`—t|t«r|jd«}tjj d«}|�|f}n
d„t D«} ddlm}m}d}|D]D}tjj|«}tjj|«sŒB|}n|€yt|«} | j}
|
€y ||«j|
«} | r't| «r| drdnd} | | xsd| d xsdfSyy#|t f$r|r‚YywxYw#t"t$f$rYywxYw)
z;Returns the Requests tuple auth for a given url from netrc.rdÚNETRCNc3ó&K—|] }d|›�–—Œ y­w)z~/N©)Ú.0Úfs rYú <genexpr>z!get_netrc_auth.<locals>.<genexpr>ósèø€Ò9¨˜R ˜sœ8Ñ9ùs‚r)ÚNetrcParseErrorÚnetrcrÚrk)r^rÚdecodernÚenvironÚgetr4r„rƒÚpathÚ
expanduserÚexistsr#ÚhostnameÚauthenticatorsÚanyrLrGrv)
ÚurlÚ raise_errorsÚ
netrc_fileÚnetrc_locationsrƒr„Ú
netrc_pathr�ÚlocÚrirTr3Úlogin_is
rYÚget_netrc_authr—çs@€ô
�#”uÔØ�j‰j˜Ó!ˆä—‘—‘ Ó(€JØÐØ%˜-‰á9¬[Ô9ˆð#
ß0àˆ
à ò ˆAÜ—'‘'×$Ñ$ QÓ'ˆCÜ�w‰w�~‰~˜cÕ"Ø �
Ùð  ð Ð Ø ä
�c‹]ˆØ�{‰{ˆà ˆ<Ø ð
Ù˜:Ó&×5Ñ5°dÓ;ˆFÙœ#˜fœ+à% ašy™!¨a�ؘw™Ò-¨2¨v°a©yª¸BÐ?Ð?ð&ˆvøð ¤Ð)ò ñØñð ûô
œÐ (ò
Ù ð
ús=ÁA
DÂ#DÂ+DÃ>DÄDÄDÄDÄDÄD-Ä,D-có²—t|dd«}|rHt|ttf«r1|ddk7r(|ddk7rtj
j
|«Syyyy)z0Tries to guess the filename of the given object.ÚnameNrú<éÿÿÿÿú>)Úgetattrr^r!rrnr‰Úbasename)Úobjr™s rYÚguess_filenamer sX€ä �3˜ Ó %€DÙ ”
˜4¤#¤u Ô.°4¸±7¸c²>ÀdÈ2ÁhÐRUÂoÜ�w‰w×Ñ Ó%Ð%ðGV°>Ð.€tr\cóF—tjj|«r|Stjj|«\}}|rytjj|«sZtjj|«\}}|sn5dj ||g«}|r tjj|«sŒZt j |«s|St j|«}||j«vr|Stjj|jd«d«d}tj|¬«\}} tj||j|««tj|«|S#tj|«wxYw)zÄReplace 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.
ú/r›)Úsuffix)rnr‰r‹rNÚjoinÚzipfileÚ
is_zipfileÚZipFileÚnamelistÚsplitextÚtempfileÚmkstempÚwriteÚreadÚclose)r‰ÚarchiveÚmemberÚprefixÚzip_filer£ÚfdÚextracted_paths rYÚextract_zipped_pathsrµ"s;€ô

‡w�w‡~�~�dÔàˆ ô—g‘g—m‘m DÓ)�O€GˆVÙ
œ"Ÿ'™'Ÿ.™.¨Ô1ÜŸ'™'Ÿ-™-¨Ó0‰ˆ�Ùð
Ø—‘˜6 6Ð*Ó+ˆñ
œ"Ÿ'™'Ÿ.™.¨Õ1ô × Ñ ˜gÔ &؈ ä�‰˜wÓ'€HØ
�X×&Ñ&Ó(Ñ(؈ ô�W‰W×
Ñ
˜fŸl™l¨3Ó/°Ñ3Ó
4°RÑ
8€FÜ!×)Ñ)°Ô8Ñ€BˆðÜ
�‰��X—]‘] 6Ó*Ô+ä
�‰�Œ à Ðøô �‰�� ús Å
%F Æ F c#óJK—tjtjj |«¬«\}} tj
|d«5}|–—ddd«tj ||«y#1swYŒ xYw#t$rtj|«‚wxYw­w)z-Write a file to the disk in an atomic fashion)ÚdirÚwbN) rªr«rnr‰ÚdirnameÚfdopenrPÚ
BaseExceptionÚremove)ÚfilenameÚtmp_descriptorÚtmp_nameÚ tmp_handlers rYÚ atomic_openrÁHs†èø€ô (×/Ñ/´B·G±G·O±OÀHÓ4MÔNÑ€N�HðÜ
�Y‰Y�~ tÓ
,ð ° ØÒ ÷ ä
�
‰
�8˜XÕ&÷ ð ûô òÜ
� ‰ �(ÔØ
ðüs4‚7B#ºBÁA4ÁBÁ3B#Á4A=Á9BÂ B Â B#cót—|€yt|ttttf«r t d«‚t
|«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
Nú+cannot encode objects that are not 2-tuples)r^r!rÚboolrJrMr©Úvalues rYÚfrom_key_val_listrÇUs6€ð(
€}Øä�%œ#œu¤d¬CÐ0Ô1ÜÐFÓGÐGä �uÓ Ðr\có—y©NrrÅs rYÚto_key_val_listrÊrs€Ø*-r\có—yrÉrrÅs rYrÊrÊts€ð r\cóÆ—|€yt|ttttf«r t d«‚t|t «rt|j««St|«S)aÂTake 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
NrÃ) r^r!rrÄrJrMr_Úlistr`rÅs rYrÊrÊxsP€ð&
€}Øä�%œ#œu¤d¬CÐ0Ô1ÜÐFÓGÐGä�%œÔ(Ü�E—K‘K“MÓ"Ð"ä �‹;Ðr\có�—g}t|«D]5}|dd|ddcxk(rdk(rnnt|dd«}|j|«Œ7|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
Nrr›ú")Ú_parse_list_headerÚunquote_header_valueÚappend)rÆÚresultÚitems rYÚparse_list_headerrÕ˜sY€ð.€FÜ" 5Ó)òˆØ ��ˆ8�t˜B˜C�yÔ ' CÕ 'Ü'¨¨Q¨r¨
Ó3ˆDØ�
‰
�dÕðð €Mr\có¶—i}t|«D]H}d|vrd||<Œ
|jdd«\}}|dd|ddcxk(rdk(rnnt|dd«}|||<ŒJ|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
ú=Nrr›rÏ)rÐrNrÑ)rÆrÓrÔr™s rYÚparse_dict_headerrظs}€ð,%'€FÜ" 5Ó)òˆØ �d‰?؈F�4‰LØ Ø—j‘j  aÓ(‰ ˆˆeØ ��!ˆ9˜˜b˜c˜
Ô ) cÕ )Ü(¨¨q°¨Ó5ˆE؈ˆtŠ ðð €Mr\có–—|rF|d|dcxk(rdk(r5n|S|dd}|r|dddk7r"|jdd«jd d«S|S)
zçUnquotes 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
rr›rÏrNrkz\\ú\z\")rP)rÆÚ is_filenames rYrÑrÑÛsd€ñ
��q‘˜U 2™YÔ-¨#Ô-ð €Lð�a˜� ˆñ˜e B Q˜i¨6Ò1Ø—=‘= ¨Ó.×6Ñ6°u¸cÓBÐ BØ €Lr\cóX—|D�cic]}|j|j“Œ}}|Scc}w)z€Returns a key/value dictionary from a CookieJar.
:param cj: CookieJar object to extract cookies from.
:rtype: dict
)r™rÆ)ÚcjÚcookieÚ cookie_dicts rYÚdict_from_cookiejarràôs/€ð<>Ö>°�6—;‘; § ¡ Ñ,Ð>€KÐ>Ø Ðùò?s…'có—t||«S)zÂReturns 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&)rÝrßs rYÚadd_dict_to_cookiejarrâÿs€ô ˜{¨BÓ /Ð/r\có^—tjdt«tjdtj
¬«}tjdtj
¬«}tjd«}|j
|«|j
|«z|j
|«zS)zlReturns encodings from given content string.
:param content: bytestring to extract encodings from.
z¤In 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=["\']*(.+?)["\'>])rrrsÚDeprecationWarningrQÚcompilerSÚfindall)ÚcontentÚ
charset_reÚ pragma_reÚxml_res rYÚget_encodings_from_contentrì
s‘€ô

‡M�Mð
1ô ô
ô—‘Ð@ÌÏÉÔM€JÜ—
‘
ÐIÔQS×QUÑQUÔV€IÜ
�Z‰ZÐ?Ó
@€Fð ×ј7Ó#Ø
×
Ñ
˜GÓ
$ñ %à
�.‰.˜Ó
!ñ "ðr\cóB—|jd«}|dj«|dd}}i}d}|D]j}|j«}|sŒ|jd«x}dk7sŒ-|d|j|«}||dzdj|«} | ||j«<Œl||fS)z¨Returns content type and parameters from given header.
:param header: string
:return: tuple containing content type and dictionary of
parameters.
rBrrNz"' r×r›)rNÚstripÚfindÚlower)
ÚheaderÚtokensÚ content_typeÚparamsÚ params_dictÚ strip_charsÚparamÚidxÚkeyrÆs
rYÚ_parse_content_type_headerrú#sµ€ð�\‰\˜#Ó
€FØ! !™9Ÿ?™?Ó,¨f°Q°R¨j�&€LØ)+€KØ€Kàò-ˆØ— ‘ “
ˆÚ ˜UŸZ™Z¨›_Ð,�c°Ó3ؘ˜�+×#Ñ# KÓ0ˆCؘ# ™'˜)Ð$×*Ñ*¨;Ó7ˆEØ',ˆK˜Ÿ ™ › Ò $ð -ð ˜Ð $Ð$r\cóŒ—|jd«}|syt|«\}}d|vr|djd«Sd|vryd|vryy) z}Returns encodings from given HTTP Header Dict.
:param headers: dictionary to extract encoding from.
:rtype: str
z content-typeNÚcharsetz'"Útextz
ISO-8859-1zapplication/jsonrd)rˆrúrî)Úheadersrórôs rYÚget_encoding_from_headersrÿ9s`€ð—;‘;˜~Ó.€Lá Øä5°lÓCÑ€L�&à�FÑØ�iÑ ×&Ñ& uÓ-Ð-à
�ÑØà˜\Ñ)àð*r\c#óüK—|j€ |Ed{–—†ytj|j«d¬«}|D]}|j|«}|sŒ|–—Œ|jdd¬«}|r|–—yy7Œe­w)zStream decodes an iterator.NrP©Úerrorsr\T)Úfinal)ÚencodingÚcodecsÚgetincrementaldecoderr†)ÚiteratorÚrÚdecoderÚchunkÚrvs rYÚstream_decode_response_unicoder Rs„èø€ð
 ‡z�zÐØ×ÐØà6Œf×*Ñ*¨1¯:©:Ó6¸iÔH€GØòˆØ
�^‰^˜EÓ
"ˆÚ
Ø‹Hðð
�‰˜ 4ˆÓ (€BÙ Ø‹ð
ð ús‚A<”A:•AA<Á"A<có—yrÉr©ÚstringÚ slice_lengths rYÚ iter_slicesres€ð$'r\có—yrÉrrs rYrris€ð"%r\c#óŽK—d}|�|dkr t|«}|t|«kr||||z–—||z
}|t|«krŒyy­w)z Iterate over slices of a string.rN)rf)rrÚposs rYrrmsYèø€ð €CØÐ˜|¨qÒ0ܘ6“{ˆ Ø
”�F“ Ò
Ø�S˜3 Ñ-Ð.Ò.Ø ˆ|шð ”�F“ Õ
ùs ‚AAÁAcó`—tjdt«|j€yg}t |j
«}|r t
|j|«S t
|j|xsdd¬«S#t$r|j|«YŒ9wxYw#t$r|jcYSwxYw)zâReturns 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
z£In 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.)NrdrPr)
rrrsrårèrÿrþr!Ú UnicodeErrorrÒÚ TypeError)rÚtried_encodingsrs rYÚget_unicode_from_responserys­€ô
‡M�Mð
1ô ô
ð ‡y�yÐØà!#€Oô)¨¯©Ó3€Háð -Ü�q—y‘y (Ó+Ð +ð
Ü�1—9‘9˜hÒ1¨'¸)ÔDÐDøô ò -Ø × "Ñ " 8Ö ,ð -ûô òØ�y‰yÒðús$ÁA5ÁBÁ5BÂBÂB-Â,B-zBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~ÚUNRESERVED_SETcó†—|jd«}tdt|««D]l}||dd}t|«dk(rI|j«r9 t t |d««}|tvr|||ddz||<ŒVd||›�||<Œbd||›�||<Œnd j|«S#t $rtd|›d�«‚wxYw)
z¨Un-escape any percent-escape sequences in a URI that are unreserved
characters. This leaves all reserved, illegal and non-ASCII bytes encoded.
:rtype: str
ú%rrrkéz"Invalid percent-escape sequence: 'ú'Nr…)
rNÚrangerfÚisalnumÚchrrJrMr*rr¤)ÚuriÚpartsÚiÚhÚcs rYÚunquote_unreservedr'¨sâ€ð
�I‰I�c‹N€EÜ
�1”c˜%“jÓ
!ò
&ˆØ �!‰H�Q�qˆMˆÜ ˆq‹6�QŠ;˜1Ÿ9™9œ;ð
LÜœ˜A˜r›
“O�ð”NÑ"ؘu Q™x¨¨˜|Ñ+��a’à˜u Q™x˜j˜>��a’à˜5 ™8˜*�~ˆE�!ŠHð
&ð �7‰7�5‹>Ðøôò
LÜ Ð#EÀaÀSÈÐ!JÓKÐKð
Lús ÁB'Â'Ccóp—d}d} tt|«|¬«S#t$rt||¬«cYSwxYw)z¬Re-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!#$&'()*+,/:;=?@[]~)Úsafe)r r'r*)r"Úsafe_with_percentÚsafe_without_percents rYÚ requote_urir,ÀsJ€ð/ÐØ0Ðð 5ôÔ'¨Ó,Ð3DÔEÐEøÜ ò5ô�SÐ3Ô4Ò4ð 5ús †œ5´5c
ór—tjdtj|««d}|j d«\}}tjdtjt t
|««««d}tjdtj|««d|z}||z||zk(S)zïThis 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=Lrr¢)ÚstructÚunpackÚsocketÚ inet_atonrNÚdotted_netmaskrJ)ÚipÚnetÚipaddrÚnetaddrÚbitsÚnetmaskÚnetworks rYÚaddress_in_networkr:Ös˜€ô�]‰]˜4¤×!1Ñ!1°"Ó!5Ó
6°qÑ
9€FØ—I‘I˜c“N�M€GˆTÜ�m‰m˜D¤&×"2Ñ"2´>Ä#ÀdÃ)Ó3LÓ"MÓNÈqÑQ€GÜ�m‰m˜D¤&×"2Ñ"2°7Ó";Ó<¸QÑ?À'ÑI€GØ �WÑ  '¨GÑ"3Ñ 4Ð4r\cóp—ddd|z
zdz
z }tjtjd|««S)z�Converts mask from /xx format to xxx.xxx.xxx.xxx
Example: if mask is 24 function returns 255.255.255.0
:rtype: str
lÿÿré z>I)r0Ú inet_ntoar.Úpack)Úmaskr7s rYr2r2ås7€ð ˜˜b 4™i™¨1Ñ,Ñ ,€DÜ × Ñ œFŸK™K¨¨dÓ3Ó 4Ð4r\cóN— tj|«y#t$rYywxYw)z
:rtype: bool
FT)r0r1rL)Ú string_ips rYÚis_ipv4_addressrBðs.€ðÜ×јÔ#ð øô òÙðús ‚˜ $£$có —|jd«dk(rR t|jd«d«}|dks|dkDry t j
|jd«d«yy#t$rYywxYw#t $rYywxYw)zV
Very simple check of the cidr format in no_proxy variable.
:rtype: bool
r¢rFr<rT)ÚcountrJrNrMr0r1rL)Ústring_networkr?s rYÚ
is_valid_cidrrFûsœ€ð ×јCÓ  AÒ%ð Ü�~×+Ñ+¨CÓ0°Ñ3Ó4ˆDð �!Š8�t˜b’yØð Ü × Ñ ˜^×1Ñ1°#Ó6°qÑ9Ô :ð
ðøôò Ùð ûôò Ùð ús"–A(¿'A7Á( A4Á3A4Á7 BÂBc#ó<K—|du}d}|r2tjj|«}|tj|< d–—|r(|€tj|=y|tj|<yy#|r(|€tj|=w|tj|<wwxYw­w)zÎSet 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)rnr‡rˆ)Úenv_namerÆÚ
value_changedÚ old_values rYÚ set_environrKs’èø€ð Ð%€MØ €IÙÜ—J‘J—N‘N 8Ó,ˆ Ø$Œ�
‰
�8Ñð1Û
á ØÐ Ü—J‘J˜xÑ(à'0”—
‘
˜8Ò$ð ø‰=ØÐ Ü—J‘J˜xÑ(à'0”—
‘
˜8Ò$ð üs‚;B¾A-Á+BÁ-,BÂBcó�—d d„}|}|€|d«}t|«}|j}|€y|rÉd„|jdd«jd«D«}t |«r)|D]#}t |«rt
||«sŒy||k(sŒ#ynm|}|jr|d |j›�z
}|D]H} | jd
«} || k(s|| k(ryd
| z} |j| «s|j| «sŒHytd|«5 t|«}
ddd«
ryy #ttjf$rd }
YŒ)wxYw#1swYŒ.xYw)
zL
Returns whether we should bypass proxies or not.
:rtype: bool
cóž—tjj|«xs-tjj|j««SrÉ)rnr‡rˆÚupper)rùs rYÚ get_proxyz(should_bypass_proxies.<locals>.get_proxy3s-€Ü�z‰z�~‰~˜cÓ"ÒA¤b§j¡j§n¡n°S·Y±Y³[Ó&AÐAr\NÚno_proxyTc3ó&K—|] }|sŒ|–—Œ y­wrÉr)r€rTs rYr‚z(should_bypass_proxies.<locals>.<genexpr>Esèø€ÒX 4ÒSWœ$ÑXùs‚Šú r…ú,ú:rCF)rùr!Úreturnú
str | None)r#rŒrPrNrBrFr:ÚportÚlstripÚendswithrKrrr0Úgaierror) r�rPrOÚ no_proxy_argÚparsedrŒÚno_proxy_hostsÚproxy_ipÚhost_with_portrTÚbypasss rYÚshould_bypass_proxiesra*sn€óBð
€LØÐÙ˜ZÓ(ˆÜ
�c‹]€FØ�‰€HàÐàáñY¨8×+;Ñ+;¸CÀÓ+D×+JÑ+JÈ3Ó+OÔXˆä ˜8Ô $Ø*ò
�Ü  Ô*Ü)¨(°HÕ=Ù#Ø Ó)ñ ñ
ð&ˆNØ�{Š{Ø A f§k¡k ]Ð"3Ñ3�à&ò
�Ø—{‘{ 3Ó'�ؘtÒ# ~¸Ò'=ÙØ˜T‘z�Ø×$Ñ$ TÔ*¨n×.EÑ.EÀdÕ.KÙð

ô
�Z Ó .ñð Ü! (Ó+ˆF÷ñ Øà øô
œ6Ÿ?™?Ð+ò ØŠFð ú÷ðús*ÄD<Ä DÄD9Ä6D<Ä8D9Ä9D<Ä<Ecó4—t||¬«riSt«S)zA
Return a dict of environment proxies.
:rtype: dict
©rP)rar)r�rPs rYÚget_environ_proxiesrdis€ô ˜S¨8Õ4؈ ä‹|Ðr\có.—|xsi}t|«}|j€+|j|j|jd««S|jdz|jz|jd|jzdg}d}|D]}||vsŒ||}|S|S)z­Select 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
NÚallz://zall://)r#rŒrˆÚscheme)r�ÚproxiesÚurlpartsÚ
proxy_keysÚproxyÚ proxy_keys rYÚ select_proxyrmus¯€ð Šm˜€Gܘ‹}€HØ×ÑÐ Ø�{‰{˜8Ÿ?™?¨G¯K©K¸Ó,>Ó?Ð?ð �‰˜%Ñ (×"3Ñ"3Ñ3Ø�‰Ø�8×$Ñ$Ñ$Ø
ð €Jð