
    0                       d Z 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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mZ ddlZddlmZ ddlmZmZ ddlmZmZmZmZmZmZmZ ddlm Z m!Z! dd	l"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ dd
l"m0Z1 ddl"mZm2Z2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZBmCZC ddlDmEZE dZFdZG	 ddlHmIZI [IdZJ	 ej                   dZM G d d      ZO G d d      ZP G d d      ZQ G d  d!      ZR G d" d#      ZS ej                  d$d%      ZU G d& d'e:      ZVd( ZWd) ZXej                  j                  d*g d+      d,        Z[ej                  j                  d-d.      d/        Z\ej                  j                  d0dd1d2d3 e5       d4d1d2d3 e5       d5d6id7d1d8d9f      d:        Z]d; Z^d< Z_ G d= d>      Z`d? Zay# eK$ r dZJY 	w xY w# eN$ r dZMY w xY w)@zTests for Requests.    N)mock)Timeout)HTTPAdapter)HTTPDigestAuth_basic_auth_str)JSONDecodeErrorMorselMutableMappingbuiltin_str	cookielib
getproxiesurlparse)cookiejar_from_dictmorsel_to_cookie)ChunkedEncodingErrorConnectionErrorConnectTimeoutContentDecodingErrorInvalidHeaderInvalidProxyURLInvalidSchema
InvalidURLMissingSchema
ProxyErrorReadTimeoutRequestException
RetryError)SSLError)r   TooManyRedirectsUnrewindableBodyError)default_hooks)PreparedRequest	urlencode)SessionRedirectMixinCaseInsensitiveDict   )SNIMissingWarning)StringIO)	TLSServerconsume_socket_content)override_environzhttp://10.255.255.1http://localhost:1)
SSLContextTFc                      e Zd ZdZd Zej                  j                  dedfe	dfe	dfe	dfe
dfe
d	fe
d
ff      d        Zd Zej                  j                  dd      d        Zej                  j                  dd      d        Zej                  j                  dd      d        Zd Zd Zej                  j                  dd      d        Zd Zd Zd Zd Zej                  j                  dd      d        Zd Zd  Zd! Zd" Zd# Zd$ Zd% Zd& Zd' Z d( Z!d) Z"d* Z#d+ Z$d, Z%d- Z&d. Z'd/ Z(d0 Z)d1 Z*d2 Z+d3 Z,d4 Z-d5 Z.d6 Z/d7 Z0d8 Z1d9 Z2d: Z3d; Z4d< Z5d= Z6ej                  j                  d>d?      d@        Z7dA Z8dB Z9dC Z:ej                  j                  dDdEdFjw                         dGjw                         fdHdIf      dJ        Z<dK Z=ej                  j                  dLdMe>fdNe>fdOe
ff      dP        Z?dQ Z@dR ZAdS ZBdT ZCdU ZDdV ZEdW ZFdX ZGej                  j                  dYdZ      d[        ZHd\ ZId] ZJd^ ZKd_ ZLd` ZMda ZNdb ZOdc ZPdd ZQde ZRdf ZSdg ZTdh ZUdi ZVdj ZWdk ZXej                  j                  dldmdndoifdmdodoifdmdodoifdmdndnifdpdndniff      dq        ZYdr ZZds Z[dt Z\du Z]ej                  j                  dvi dwfdxdyidyfdxdzidwfd{dyidyfd{dzidwfdzdzd|dwfdyd}d|dyfdzd}d|d}ff      d~        Z^d Z_ej                  j                  eadu d      d        Zbd Zcd Zdd Zed Zfej                  j                  dddiddjw                         iddiddif      d        Zgd Zhd Zid Zjd Zkd Zld Zmd Znd Zod Zpd Zqd Zrd Zsd Ztd Zud Zvd Zwd Zxd Zyd Zzd Z{d Z|d Z}d Z~d Zd Zd Zd Zd Zd Zej                  j                  dej                  j                   e       efej                  j                   e       efej                  j                  de>fej                  j                   e       eff      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej                  j                  ddndidnfddndiidfddndgidff      dĄ        Zej                  j                  ddndidndidndidndiddiddiddiddif      d΄        Zej                  j                  dddiddiddidndidndidndiddif      dք        Zdׄ Zej                  j                  ddnd ed٫      f      dڄ        Zdۄ Zd܄ Zd݄ Zdބ Zd߄ Zd Zd Zd Zd Zd Zd Zej                  j                  dd      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej                  j                  dddFjw                         dGjw                         dff      d        Zd Zd Zd Zd Zd Zd Zej                  j                  d        Zd Zd Zd ZȐd  Zɐd Zʐd Zːd Z̐d Z͐d Zy(  TestRequests)MD5zSHA-256zSHA-512c                 H   t         j                   t        j                         j                   t        j                         j                   t         j                   t         j                   t         j                   t         j
                   t         j                   ddlm} y )Nr   )PoolManager)	requestssessiongetheadputpatchpost%requests.packages.urllib3.poolmanagerr3   )selfr3   s     ;platform/gsutil/third_party/requests/tests/test_requests.pytest_entry_pointszTestRequests.test_entry_pointsS   sU    E    zexception, urlhiwpefhipowhefopwzlocalhost:3128zlocalhost.localdomain:3128/z10.122.1.1:3128/http://zhttp://*example.comzhttp://.example.comc                     t        j                  |      5  t        j                  |       d d d        y # 1 sw Y   y xY wNpytestraisesr4   r6   )r<   	exceptionurls      r=   test_invalid_urlzTestRequests.test_invalid_url_   s(     ]]9%LL &%%s   5>c                     t        j                         }d|_        ddi|_        |j	                         }|j                  |j                  k(  sJ |j
                  dk(  sJ y )Nzhttp://kennethreitz.org/life42zlife=42)r4   RequestrH   datapreparebody)r<   reqprs      r=   test_basic_buildingz TestRequests.test_basic_buildingo   sU     ,D>[[]vv   ww)###r?   method)GETHEADc                     t        j                  | ||j                                     j                         }d|j                  vsJ y )NContent-Lengthr4   rM   lowerrO   headersr<   httpbinrT   rQ   s       r=   test_no_content_lengthz#TestRequests.test_no_content_lengthx   s:    vwv||~'>?GGIs{{222r?   )POSTPUTPATCHOPTIONSc                     t        j                  | ||j                                     j                         }|j                  d   dk(  sJ y )NrX   0rY   r\   s       r=   test_no_body_content_lengthz(TestRequests.test_no_body_content_length}   s@    vwv||~'>?GGI{{+,333r?   c                     t        j                  | ||j                               d      j                         }|j                  d   dk(  sJ y )N rN   rX   rd   rY   r\   s       r=   test_empty_content_lengthz&TestRequests.test_empty_content_length   sB    vwv||~'>RHPPR{{+,333r?   c                     ddi}t        j                  d |d      |      j                         }d|j                  v sJ |j                  d   dk(  sJ y )NrX   znot zeror_   r:   r[   r4   rM   rO   r[   )r<   r]   r[   rs       r=   test_override_content_lengthz)TestRequests.test_override_content_length   sW    #Z0VWV_gFNNP199,,,yy)*j888r?   c                 n    t        j                  dd      j                         }|j                  dk(  sJ y )NrU   zhttp://0.0.0.0/get/test casez/get/test%20case)r4   rM   rO   path_urlr<   requests     r=   test_path_is_not_double_encodedz,TestRequests.test_path_is_not_double_encoded   s3    ""5*HIQQS#5555r?   zurl, expected))z http://example.com/path#fragmentz$http://example.com/path?a=b#fragment)z*http://example.com/path?key=value#fragmentz.http://example.com/path?key=value&a=b#fragmentc                 v    t        j                  d|ddi      j                         }|j                  |k(  sJ y )NrU   abparamsr4   rM   rO   rH   )r<   rH   expectedrr   s       r=   %test_params_are_added_before_fragmentz2TestRequests.test_params_are_added_before_fragment   s7     ""5#sCjAIIK{{h&&&r?   c                     t        j                  d      }t        j                         }t        j                  dd|      }|j                  |      }|j                  dk(  sJ y )N))zr'   )ru   r'   )kr'   )dr'   rU   http://example.com/rw   z#http://example.com/?z=1&a=1&k=1&d=1)collectionsOrderedDictr4   SessionrM   prepare_requestrH   )r<   param_ordered_dictr5   rr   preps        r=   2test_params_original_order_is_preserved_by_defaultz?TestRequests.test_params_original_order_is_preserved_by_default   sd    (444
 ""$""(1C
 &&w/xx@@@@r?   c                 r    t        j                  ddd      j                         }|j                  dk(  sJ y )NrU   http://example.coms   test=foorw   zhttp://example.com/?test=foory   rq   s     r=   test_params_bytes_are_encodedz*TestRequests.test_params_bytes_are_encoded   s9    ""'

') 	 {{<<<<r?   c                     t        j                  dddj                               j                         }t	        |j
                  t              sJ y )Nr`   r   u   ööörh   )r4   rM   encoderO   
isinstancerP   bytesrq   s     r=   test_binary_putzTestRequests.test_binary_put   sA    ""'hoo.?

') 	 ',,...r?   c                 n    t        j                  dd      j                         }|j                  dk(  sJ y )NrU   z http://example.comr   ry   rq   s     r=   %test_whitespaces_are_removed_from_urlz2TestRequests.test_whitespaces_are_removed_from_url   s1    ""5*?@HHJ{{3333r?   scheme)rA   HTTP://zhTTp://zHttP://c                 @   t        j                         }t               |_        t	         |d            }||j
                  z   |j                  z   }t        j                  d|      }|j                  |j                               }|j                  dk(  s
J d|        y )Nr6   rU      zfailed for scheme )r4   r   r   proxiesr   netlocpathrM   sendrO   status_code)r<   r]   r   spartsrH   rm   s          r=   !test_mixed_case_scheme_acceptablez.TestRequests.test_mixed_case_scheme_acceptable   s    L	(u||#ejj0UC(FF199;}}#B'9&%BB#r?   c                     t        j                  d |d            }t        j                         }t               |_        |j                  |j                               }|j                  dk(  sJ y NrU   r6   r   )r4   rM   r   r   r   r   rO   r   r<   r]   rm   r   s       r=    test_HTTP_200_OK_GET_ALTERNATIVEz-TestRequests.test_HTTP_200_OK_GET_ALTERNATIVE   sU    UGEN3L	FF199;}}###r?   c                     t        j                   |dd            }|j                  dk(  sJ |j                  d   j                  dk(  sJ |j                  d   j                  sJ y )Nredirect1r   r   .  )r4   r6   r   historyis_redirectr<   r]   rm   s      r=    test_HTTP_302_ALLOW_REDIRECT_GETz-TestRequests.test_HTTP_302_ALLOW_REDIRECT_GET   s\    LLS12}}###yy|''3...yy|''''r?   c                 
   t        j                   |d      dddd      }|j                  dk(  sJ |j                  d   j                  dk(  sJ |j                  d   j                  sJ |j                         d	   dk(  sJ y )
Nredirect-totestr:   3  rH   r   rN   rx   r   r   rN   )r4   r:   r   r   r   jsonr   s      r=   !test_HTTP_307_ALLOW_REDIRECT_POSTz.TestRequests.test_HTTP_307_ALLOW_REDIRECT_POST   s    MMM"!#6

 }}###yy|''3...yy|''''vvx6)))r?   c                 R   d}t        j                   |d      t        j                  |      ddd      }|j                  dk(  sJ |j
                  d   j                  dk(  sJ |j
                  d   j                  sJ |j                         d	   |j                  d
      k(  sJ y )Ns   testr   r:   r   r   r   r   r   rN   utf-8)	r4   r:   ioBytesIOr   r   r   r   decode)r<   r]   byte_strrm   s       r=   /test_HTTP_307_ALLOW_REDIRECT_POST_WITH_SEEKABLEz<TestRequests.test_HTTP_307_ALLOW_REDIRECT_POST_WITH_SEEKABLE   s    MMM"H%!#6

 }}###yy|''3...yy|''''vvx8??7#;;;;r?   c                 Z   	 t        j                   |dd             t        j                  d       y # t        $ rm} |dd      }|j
                  j                  |k(  sJ |j                  j                  |k(  sJ t        |j                  j                        dk(  sJ Y d }~y d }~ww xY w)Nrelative-redirect50z:Expected redirect to raise TooManyRedirects but it did not20   )
r4   r6   rE   failr   rr   rH   responselenr   )r<   r]   erH   s       r=    test_HTTP_302_TOO_MANY_REDIRECTSz-TestRequests.test_HTTP_302_TOO_MANY_REDIRECTS   s    	VLL!4d;< KKTU   	1-t4C99==C'''::>>S(((qzz))*b000		1s   4 	B*A#B%%B*c                    t        j                         }d|_        	 |j                   |dd             t	        j
                  d       y # t        $ rm} |dd      }|j                  j                  |k(  sJ |j                  j                  |k(  sJ t        |j                  j                        dk(  sJ Y d }~y d }~ww xY w)N   r   r   zCExpected custom max number of redirects to be respected but was not45)r4   r5   max_redirectsr6   rE   r   r   rr   rH   r   r   r   )r<   r]   r   r   rH   s        r=   ,test_HTTP_302_TOO_MANY_REDIRECTS_WITH_PARAMSz9TestRequests.test_HTTP_302_TOO_MANY_REDIRECTS_WITH_PARAMS   s    
	EE'-t45 KKU   	0-t4C99==C'''::>>S(((qzz))*a///		0s   A 	CA#B<<Cc                    t        j                   |dd            }|j                  dk(  sJ |j                  j                  dk(  sJ |j
                  d   j                  dk(  sJ |j
                  d   j                  sJ y )Nstatus301r   rU   r   -  r4   r:   r   rr   rT   r   r   r   s      r=   !test_http_301_changes_post_to_getz.TestRequests.test_http_301_changes_post_to_get	  t    MM'(E23}}###yy5(((yy|''3...yy|''''r?   c                 4   t        j                   |dd      d      }t        |j                         |j                  dk(  sJ |j
                  j                  dk(  sJ |j                  d   j                  dk(  sJ |j                  d   j                  sJ y )	Nr   r   Tallow_redirectsr   rV   r   r   )	r4   r7   printcontentr   rr   rT   r   r   r   s      r=   'test_http_301_doesnt_change_head_to_getz4TestRequests.test_http_301_doesnt_change_head_to_get  s    MM'(E2DIaii}}###yy6)))yy|''3...yy|''''r?   c                    t        j                   |dd            }|j                  dk(  sJ |j                  j                  dk(  sJ |j
                  d   j                  dk(  sJ |j
                  d   j                  sJ y )Nr   302r   rU   r   r   r   r   s      r=   !test_http_302_changes_post_to_getz.TestRequests.test_http_302_changes_post_to_get  r   r?   c                 
   t        j                   |dd      d      }|j                  dk(  sJ |j                  j                  dk(  sJ |j
                  d   j                  dk(  sJ |j
                  d   j                  sJ y )	Nr   r   Tr   r   rV   r   r   r4   r7   r   rr   rT   r   r   r   s      r=   'test_http_302_doesnt_change_head_to_getz4TestRequests.test_http_302_doesnt_change_head_to_get  v    MM'(E2DI}}###yy6)))yy|''3...yy|''''r?   c                    t        j                   |dd            }|j                  dk(  sJ |j                  j                  dk(  sJ |j
                  d   j                  dk(  sJ |j
                  d   j                  sJ y )Nr   303r   rU   r   /  r   r   s      r=   !test_http_303_changes_post_to_getz.TestRequests.test_http_303_changes_post_to_get&  r   r?   c                 
   t        j                   |dd      d      }|j                  dk(  sJ |j                  j                  dk(  sJ |j
                  d   j                  dk(  sJ |j
                  d   j                  sJ y )	Nr   r   Tr   r   rV   r   r   r   r   s      r=   'test_http_303_doesnt_change_head_to_getz4TestRequests.test_http_303_doesnt_change_head_to_get-  r   r?   c                    d}t        j                         }t        j                  d |d      ddi      }|j                  |      }|j	                  |      }d|_        d|j                  d	<   t        |j                  ||            }|j                  j                  J |D ]  }||j                  j                  vrJ  y )
N)rX   Content-Typer_   r:   r   rN   rh   r   r6   location)r4   r   rM   r   r   r   r[   nextresolve_redirectsrr   rP   	r<   r]   purged_headerssesrQ   r   resp	next_respheaders	            r=   (test_header_and_body_removal_on_redirectz5TestRequests.test_header_and_body_removal_on_redirect4  s    ; vwvff=MN""3'xx~ #(Z  ..tT:;	  %%---$F!2!2!:!:::: %r?   c                 H   d}t        j                         }t        j                  d |d      d t        d      D              }|j	                  |      }d|j
                  v sJ t        j                         }t        j                  d      |_	        ||_
        t        |j                  d	d
        d|_         |d      |j
                  d<   t        |j                  ||            }|j                  j                  J |D ]  }||j                  j
                  vrJ  y )N)Transfer-Encodingr   r_   r:   c              3       K   | ]  }d   yw)   xN ).0xs     r=   	<genexpr>zETestRequests.test_transfer_enc_removal_on_redirect.<locals>.<genexpr>H  s     =UHqdH   r'   rh   r      the contentrelease_connc                      | S rC   r   argss    r=   <lambda>zDTestRequests.test_transfer_enc_removal_on_redirect.<locals>.<lambda>P  s    r?   r   r6   r   )r4   r   rM   ranger   r[   Responser   r   rawrr   setattrr   r   r   rP   r   s	            r=   %test_transfer_enc_removal_on_redirectz2TestRequests.test_transfer_enc_removal_on_redirectE  s   > vwv=UERSH=UV""3'"dll222   "::n-.*<= #*5>Z  ..tT:;	  %%---$F!2!2!:!:::: %r?   c                    d}t        j                   |d      |z         }t        |j                        dkD  sJ |j                  d   j                  j
                   |d      |z   k(  sJ |j
                   |d      |z   k(  sJ y )Nz#view=edit&token=hunter2zredirect-to?url=getr   r6   )r4   r6   r   r   rr   rH   )r<   r]   fragmentrm   s       r=   $test_fragment_maintained_on_redirectz1TestRequests.test_fragment_maintained_on_redirect\  s~    -LL!67(BC199~!!!yy|##''73H+IH+TTTTuu1111r?   c                     ddi}t        j                   |d      |      }|d   |j                  v sJ |j                  dk(  sJ y )N
User-agentMozilla/5.0
user-agentrk   r   )r4   r6   textr   r<   r]   headsrm   s       r=    test_HTTP_200_OK_GET_WITH_PARAMSz-TestRequests.test_HTTP_200_OK_GET_WITH_PARAMSd  sJ    }-LL.>\"aff,,,}}###r?   c                 t    ddi}t        j                   |d      dz   ddi|      }|j                  dk(  sJ y )	Nr  r  r6   z
?test=trueqr   )rx   r[   r   r4   r6   r   r
  s       r=   &test_HTTP_200_OK_GET_WITH_MIXED_PARAMSz3TestRequests.test_HTTP_200_OK_GET_WITH_MIXED_PARAMSl  sB    }-LLEN\)3-
 }}###r?   c                     t        j                         } |d      }|j                  |       |j                  d   dk(  sJ y )Ncookies/set?foo=barfoobarr4   r5   r6   cookiesr<   r]   r   rH   s       r=   test_set_cookie_on_301z#TestRequests.test_set_cookie_on_301t  s=    +,	c
yy5(((r?   c                     t        j                         }|j                   |d             |j                   |d            }d|j                         d   v sJ y )Nr  
redirect/1Cookier[   )r4   r5   r6   r   r<   r]   r   rm   s       r=   test_cookie_sent_on_redirectz)TestRequests.test_cookie_sent_on_redirectz  sN    	g+,-EE','(1668I....r?   c                     t        j                         }|j                   |d             |j                  d   dk(  sJ |j                   |d      ddi       d|j                  vsJ y )Nr  r  r  zresponse-headersz
Set-Cookiez2foo=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMTrw   r  r<   r]   r   s      r=   test_cookie_removed_on_expirez*TestRequests.test_cookie_removed_on_expire  sp    	g+,-yy5(((	&' "VW 	 	
 AII%%%r?   c                     t        j                         }|j                   |d             |j                  d   dk(  sJ y )Nzcookies/set?foo="bar:baz"r  z	"bar:baz"r  r  s      r=   test_cookie_quote_wrappedz&TestRequests.test_cookie_quote_wrapped  s9    	g123yy;...r?   c                     t        j                         }|j                   |d      ddi      }d|j                  j                  d   v sJ d|j
                  d   j                  j                  d   v sJ y )Nr  r  r  r  r  r   )r4   r5   r6   rr   r[   r   r  s       r=   test_cookie_persists_via_apiz)TestRequests.test_cookie_persists_via_api  so    EE','%E@		))(3333		!,,44X>>>>r?   c                     t        j                         }d|j                  d<   |j                   |d      ddi      }|j	                         d   d   dk(  sJ |j                  d   dk(  sJ y )Nr  r  r  bazr$  )r4   r5   r  r6   r   r  s       r=   ,test_request_cookie_overrides_session_cookiez9TestRequests.test_request_cookie_overrides_session_cookie  sn     		%EE')$uenE=vvx	"5)U222yy5(((r?   c                 ~    t        j                         }|j                   |d      ddi       |j                  rJ y )Nr  r  r'  r$  r  r  s      r=   "test_request_cookies_not_persistedz/TestRequests.test_request_cookies_not_persisted  s7    	gi 5%.999}9r?   c                    t        j                         }t        ddi|       t        j                         }||_        |j                   |d            }|j                         d   d   dk(  sJ |j
                  |u sJ y )Nr  r  r  )r   	CookieJarr   r4   r5   r  r6   r   r<   r]   cjr   rm   s        r=   test_generic_cookiejar_worksz)TestRequests.test_generic_cookiejar_works  st      "UENB/	EE')$%vvx	"5)U222yyBr?   c                     t        j                         }t        ddi|       t        j                         }|j                   |d      |      }|j                         d   d   dk(  sJ y )Nr  r  r  r$  )r   r,  r   r4   r5   r6   r   r-  s        r=   test_param_cookiejar_worksz'TestRequests.test_param_cookiejar_works  sa      "UENB/EE')$bE1vvx	"5)U222r?   c                 4   t        ddit        j                               }t        j                         }t        ddi      |_        t        j                  d |d      |      }|j                         }|j                  |      }d|_	         |d	      |j                  d
<   |j                  ||      }t        |      }t        |j                  t        j                        sJ t        |j                  j                  t        j                        sJ t        |j                  j                  t        j
                  j                         rJ i }|j                  j                  D ]  }	|	j"                  ||	j$                  <    |d   dk(  sJ |d   dk(  sJ y)zTests resolve_redirect doesn't fail when merging cookies
        with non-RequestsCookieJar cookiejar.

        See GH #3579
        r  r  cookietastyrU   r[   r$  r   r6   r   N)r   r   r,  r4   r   r  rM   rO   r   r   r[   r   r   r   _cookiesrr   RequestsCookieJarvaluename)
r<   r]   r.  r   rQ   prep_reqr   	redirectsr  cs
             r=   $test_cookielib_cookiejar_on_redirectz1TestRequests.test_cookielib_cookiejar_on_redirect  sZ    !%1D1D1FG'7(;<	 ugi&8"E;;= vvh#*5>Z ''h7	I (++Y-@-@AAA$,,//1D1DEEEdll33X5E5E5W5WXXX&&AggGAFFO 'u~&&&x G+++r?   c                     t        j                   |d            }|j                  D cg c]  }|j                   }}|j                  D cg c]  }|j                  j                   }}||k(  sJ y c c}w c c}w )Nz
redirect/3)r4   r6   r   rH   rr   )r<   r]   r   rm   urlsreq_urlss         r=   +test_requests_in_history_are_not_overriddenz8TestRequests.test_requests_in_history_are_not_overridden  sg    ||GL12#||,|!|,+/<<8<aAIIMM<8x -8s   A4A9c                    t        j                   |d            }t        |j                  t              sJ t        j                   |d            }t        |j                  t              sJ t        |j                  t
              rJ y)zAShow that even with redirects, Response.history is always a list.r6   r  N)r4   r6   r   r   listtuple)r<   r]   r   s      r=   test_history_is_always_a_listz*TestRequests.test_history_is_always_a_list  sf    ||GEN+$,,---||GL12$,,---dllE2222r?   c                     t        j                         }d|j                  d<   t        j                  d |d            }|j	                  |      }d|j                  vsJ y)z8Do not send headers in Session.headers with None values.NAccept-EncodingrU   r6   )r4   r   r[   rM   r   )r<   r]   r   rQ   r   s        r=   .test_headers_on_session_with_None_are_not_sentz;TestRequests.test_headers_on_session_with_None_are_not_sent  sW     )-%&ugen5""3' 444r?   c                    t        j                         }t        j                         |_        d|j                  d<   d|j                  d<   d|j                  d<   t        j                  ddg      }d	|d
<   d|d<   t        j
                  d |d      |      }|j                  |      }t        |j                  j                               }|d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ y)z4Preserve order when headers provided as OrderedDict.identityrF  r   First2Second)Third3)Fourth45Fifth222rU   r6   rk   r   )rF  rI  r'   )rJ  r      )rL  rS        r   )rR  rQ  N)	r4   r   r   r   r[   rM   r   rB  items)r<   r]   r   r[   rQ   r   rW  s          r=   test_headers_preserve_orderz(TestRequests.test_headers_preserve_order  s!    !--/)3%&"G #H))>?*KL!ugengF""3'T\\'')*Qx::::Qx>)))Qx,,,,Qx>)))Qx?***Qx>)))r?   key)r  r  c                 l    |di}t        j                   |d      |      }||   |j                  v sJ y )Nz%Mozilla/5.0 (github.com/psf/requests)r  rk   )r4   r6   r	  )r<   r]   rY  r  rm   s        r=   test_user_agent_transfersz&TestRequests.test_user_agent_transfers   s8    =>LL.>SzQVV###r?   c                 \    t        j                   |d            }|j                  dk(  sJ y )Nr6   r   )r4   r7   r   r   s      r=   test_HTTP_200_OK_HEADz"TestRequests.test_HTTP_200_OK_HEAD  s&    MM'%.)}}###r?   c                 \    t        j                   |d            }|j                  dk(  sJ y )Nr8   r   )r4   r8   r   r   s      r=   test_HTTP_200_OK_PUTz!TestRequests.test_HTTP_200_OK_PUT  s&    LL(}}###r?   c                 2   d} |ddd      }t        j                  ||      }|j                  dk(  sJ t        j                  |      }|j                  dk(  sJ t        j                         }||_        |j                  |      }|j                  dk(  sJ y )Nuserpass
basic-authrb  rc  authr     )r4   r6   r   r5   rf  )r<   r]   rf  rH   rm   r   s         r=   $test_BASICAUTH_TUPLE_HTTP_200_OK_GETz1TestRequests.test_BASICAUTH_TUPLE_HTTP_200_OK_GET  s    lFF3LL4(}}###LL}}###EE#J}}###r?   zusername, passwordra  u   имяu   пароль)*   ri  )NNc                     ||f} |d      }t        j                  d||      }|j                         }|j                  d   t	        ||      k(  sJ y )Nr6   rU   re  Authorization)r4   rM   rO   r[   r   )r<   r]   usernamepasswordrf  rH   rm   ps           r=   test_set_basicauthzTestRequests.test_set_basicauth  sT     (#enUCd3IIKyy)_Xx-PPPPr?   c                     d}t        j                  dd|      }|j                         }|j                  d   dk(  sJ y)zwEnsure b'test' formats as the byte string "test" rather
        than the unicode string "b'test'" in Python 3.
        )s	   ůsernames   testƶrU   zhttp://localhostre  rk  zBasic xa9zZXJuYW1lOnRlc3TGtg==Nrl   )r<   rf  rm   rn  s       r=   #test_basicauth_encodes_byte_stringsz0TestRequests.test_basicauth_encodes_byte_strings0  sA     5U$6TBIIKyy)-MMMMr?   url, exceptionzhttp://doesnotexist.google.comr-   zhttp://fe80::5054:ff:fe5a:fc0c                     t        j                  |      5  t        j                  |d       d d d        y # 1 sw Y   y xY w)Nr'   timeoutrD   )r<   rH   rG   s      r=   test_errorszTestRequests.test_errors:  s*     ]]9%LLa( &%%s	   7A c                     t        j                  t              5  t        j                  dddi       d d d        y # 1 sw Y   y xY w)Nr-   httpznon-resolvable-addressr   )rE   rF   r   r4   r6   r<   s    r=   test_proxy_errorzTestRequests.test_proxy_errorI  s1    ]]:&LL$v7O.P '&&s	   =Ac                 d   t        j                  t              5  t        j                   |       ddi       d d d        t        j                  t              5  t        j                   |       ddi       d d d        t        j                  t              5  t        j                   |       ddi       d d d        t        j                  t              5  t        j                   |       ddi       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   bxY w# 1 sw Y   y xY w)Nhttpszhttp:/badproxyurl:3128ry  rx  zhttp://:8080https://zhttp:///example.com:8080)rE   rF   r   r4   r6   )r<   r]   httpbin_secures      r=   test_proxy_error_on_bad_urlz(TestRequests.test_proxy_error_on_bad_urlP  s    ]]?+LL)G=U3VW , ]]?+LLV^,DE , ]]?+LL)GZ3HI , ]]?+LLV5O,PQ ,+ ,+ ,+ ,+ ,+s/   DDDD&DDD#&D/c                 F   t        t              5  t        j                  t              5  t        j                         }t        j                  d |             }|j                  |j                                d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wN
http_proxyrU   )
r,   INVALID_PROXYrE   rF   r   r4   r   rM   r   rO   )r<   r]   r5   rr   s       r=   4test_respect_proxy_env_on_send_self_prepared_requestzATestRequests.test_respect_proxy_env_on_send_self_prepared_request]  sh    7z*"**,"**5')<W__./ + 87** 87s#   BAB:BB	BB c                 L   t        t              5  t        j                  t              5  t        j                         }t        j                  d |             }|j                  |      }|j                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr  )
r,   r  rE   rF   r   r4   r   rM   r   r   )r<   r]   r5   rr   prepareds        r=   7test_respect_proxy_env_on_send_session_prepared_requestzDTestRequests.test_respect_proxy_env_on_send_session_prepared_requestd  sq    7z*"**,"**5')<"227;X&	 + 87** 87s#   BAB=BB	BB#c                 b   t        t              5  t        j                  t              5  t        j                         } |d      }t        |       t        j                  d|      }|j                  |j                                d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  rU   )r,   r  rE   rF   r   r4   r   r   rM   r   rO   )r<   r]   r5   rH   rr   s        r=   -test_respect_proxy_env_on_send_with_redirectsz:TestRequests.test_respect_proxy_env_on_send_with_redirectsl  sw    7z*"**,l+c
"**5#6W__./ + 87** 87s#   B%ABB%B"	B%%B.c                     t        t              5  t        j                  t              5  t        j                         }|j                   |              d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  )r,   r  rE   rF   r   r4   r   r6   r<   r]   r5   s      r=   test_respect_proxy_env_on_getz*TestRequests.test_respect_proxy_env_on_getu  sO    7z*"**,GI& + 87** 87s"   A3+A'A3'A0	,A33A<c                    t        t              5  t        j                  t              5  t        j                         }|j                  d |              d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  rU   rT   rH   )r,   r  rE   rF   r   r4   r   rr   r  s      r=   !test_respect_proxy_env_on_requestz.TestRequests.test_respect_proxy_env_on_request{  sS    7z*"**,u')< + 87** 87s"   A5-A)A5)A2	.A55A>c                    d}t        j                         }|j                  j                  d|i       |j	                  d |d            }|j                         j                  di       }|j                  d      |k(  sJ y )Nz
Bearer XXXProxy-AuthorizationrU   r6   r  r[   )r4   r   r[   updaterr   r   r6   )r<   r]   proxy_auth_valuer5   r   sent_headerss         r=   -test_proxy_authorization_preserved_on_requestz:TestRequests.test_proxy_authorization_preserved_on_request  sv    '""$ 57GHIe@yy{y"5 56:JJJJr?   zurl,has_proxy_auth))r   T)https://example.comFc                     t        j                         }ddd}t        j                  d|      }|j                         }|j	                  ||       d|j
                  v |u sJ y )Nzhttp://test:pass@localhost:8080zhttp://test:pass@localhost:8090)rx  r}  rU   r  )r4   r   rM   rO   rebuild_proxiesr[   )r<   rH   has_proxy_authr5   r   rQ   r   s          r=   6test_proxy_authorization_not_appended_to_https_requestzCTestRequests.test_proxy_authorization_not_appended_to_https_request  se     ""$56
 uc*{{}g.%5.HHHr?   c                 F   dd} |ddd      }t         j                  j                  }	 fd}|t         j                  _        t        j                  |      }|j                  dk(  sJ t        j                  ||      }|j                  d	k(  sJ t        j
                         }|j                  |      }|j                  dk(  sJ ||_        |j                  |      }|j                  d	k(  sJ 	 |t         j                  _        y # |t         j                  _        w xY w)
Nra  )	wronguser	wrongpassrd  rb  rc  c                     S rC   r   )rH   rf  s    r=   get_netrc_auth_mockzCTestRequests.test_basicauth_with_netrc.<locals>.get_netrc_auth_mock  s    r?   r   re  rg  )r4   sessionsget_netrc_authr6   r   r5   rf  )	r<   r]   
wrong_authrH   old_authr  rm   r   rf  s	           @r=   test_basicauth_with_netrcz&TestRequests.test_basicauth_with_netrc  s   /
lFF3$$33	8 0CH, S!A==C''' Sz2A==C'''  "A c
A==C'''  AFc
A==C'''/7H,xH,s   CD	 	D c           	         | j                   D ]  }t        dd      } |dddd|d      }t        j                  ||      }|j                  dk(  sJ t        j                  |      }|j                  dk(  sJ t        |j                  d	          t        j                         }t        dd      |_        |j                  |      }|j                  dk(  rJ  y )
Nrb  rc  digest-authrf  neverre  r   rg  zWWW-Authenticate)	digest_auth_algor   r4   r6   r   r   r[   r5   rf  r<   r]   authtyperf  rH   rm   r   s          r=   test_DIGEST_HTTP_200_OK_GETz(TestRequests.test_DIGEST_HTTP_200_OK_GET  s    --H!&&1D-7SCSt,A==C'''S!A==C'''!))./0  "A#FF3AFc
A==C''' .r?   c                     | j                   D ]k  } |dddd|      }t        dd      }t        j                  |      }|j                  d   dk(  sJ t        j                  ||      }|j
                  dk(  rkJ  y )	Nr  rf  rb  rc  fake
fake_valuere  r   )r  r   r4   r6   r  r   )r<   r]   r  rH   rf  rm   s         r=   test_DIGEST_AUTH_RETURNS_COOKIEz,TestRequests.test_DIGEST_AUTH_RETURNS_COOKIE  sw    --H-JC!&&1DS!A99V$444St,A==C''' .r?   c                     | j                   D ]U  } |dddd|      }t        dd      }t        j                         }|j	                  ||       |j
                  d   dk(  rUJ  y )Nr  rf  rb  rc  re  r  r  )r  r   r4   r   r6   r  )r<   r]   r  rH   rf  r   s         r=   %test_DIGEST_AUTH_SETS_SESSION_COOKIESz2TestRequests.test_DIGEST_AUTH_SETS_SESSION_COOKIES  se    --H-JC!&&1D  "AEE#DE!99V$444 .r?   c                 2   | j                   D ]  }t        dd      } |dddd|      }t        j                  ||d      }|j                  j                         dk7  sJ t        j                  ||d      }|j                  j                         dk(  rJ  y )	Nrb  rc  r  rf  T)rf  streamr?   F)r  r   r4   r6   r   readr<   r]   r  rf  rH   rm   s         r=   test_DIGEST_STREAMzTestRequests.test_DIGEST_STREAM  s    --H!&&1D-JCStD9A55::<3&&&StE:A55::<3&&& .r?   c                 l   | j                   D ]  }t        dd      } |dddd|      }t        j                  ||      }|j                  dk(  sJ t        j                  |      }|j                  dk(  sJ t        j
                         }||_        |j                  |      }|j                  dk(  rJ  y )Nrb  r  r  rf  rc  re  rg  )r  r   r4   r6   r   r5   rf  r  s          r=   "test_DIGESTAUTH_WRONG_HTTP_401_GETz/TestRequests.test_DIGESTAUTH_WRONG_HTTP_401_GET  s    --H!&+6D-JCSt,A==C'''S!A==C'''  "AAFc
A==C''' .r?   c                     | j                   D ]N  }t        dd      } |dddd|      }t        j                  ||      }d|j                  j
                  d   v rNJ  y )Nrb  rc  r  rf  re  z"auth"rk  )r  r   r4   r6   rr   r[   r  s         r=    test_DIGESTAUTH_QUOTES_QOP_VALUEz-TestRequests.test_DIGESTAUTH_QUOTES_QOP_VALUE   s]    --H!&&1D-JCSt,Aqyy00AAAA .r?   c                     |d      }t        j                  |      j                          t        j                  |ddi      }|j                  dk(  sJ t	        d      5 }t        j                  |d|i      }d d d        j                  dk(  sJ t        j                  |d      }|j                  dk(  sJ t        j                  t              5  t        j                  |d	g       d d d        y # 1 sw Y   }xY w# 1 sw Y   y xY w)
Nr:   somerN   rh   r   requirements-dev.txtfiles[{"some": "json"}]bad file datar4   r:   raise_for_statusr   openrE   rF   
ValueErrorr<   r]   rH   post1fpost2post4s          r=   test_POSTBIN_GET_POST_FILESz(TestRequests.test_POSTBIN_GET_POST_FILES  s    foc++-c(89  C'''()QMM#fa[9E *  C'''c(<=  C''']]:&MM#o%67 '& *) '&s   !C7D7D Dc                      |d      }t        j                  |d dd      }d|j                  j                  vsJ d|j                  j                  v sJ y )Nr:   r'   )zrandom-file-1zrandom-file-2r  s   name="random-file-1"s   name="random-file-2")r4   r:   rr   rP   )r<   r]   rH   r:   s       r=   test_invalid_files_inputz%TestRequests.test_invalid_files_input  sQ    fo}}S$QR(ST&dll.?.????&$,,*;*;;;;r?   c                 r    G d d      } |d      }t        j                   |d      |      }|j                  dk(  sJ |j                         d   dk(  sJ  |d      }|j	                  d       t        j                   |d      |      }|j                  dk(  sJ |j                         d   d	k(  sJ y )
Nc                   .    e Zd Zd Zd ZddZd ZddZy)	HTestRequests.test_POSTBIN_SEEKED_OBJECT_WITH_NO_ITER.<locals>.TestStreamc                 p    |j                         | _        t        | j                        | _        d| _        y Nr   )r   rN   r   lengthindexr<   rN   s     r=   __init__zQTestRequests.test_POSTBIN_SEEKED_OBJECT_WITH_NO_ITER.<locals>.TestStream.__init__!  s%     KKM	!$))n
r?   c                     | j                   S rC   )r  rz  s    r=   __len__zPTestRequests.test_POSTBIN_SEEKED_OBJECT_WITH_NO_ITER.<locals>.TestStream.__len__&  s    {{"r?   Nc                     |r=| j                   | j                  | j                  |z    }| xj                  |z  c_        |S | j                   | j                  d  }| j                  | _        |S rC   )rN   r  r  )r<   sizerets      r=   r  zMTestRequests.test_POSTBIN_SEEKED_OBJECT_WITH_NO_ITER.<locals>.TestStream.read)  s]    ))DJJd1BCCJJ$&J 
 ))DJJL1C!%DJ
r?   c                     | j                   S rC   )r  rz  s    r=   tellzMTestRequests.test_POSTBIN_SEEKED_OBJECT_WITH_NO_ITER.<locals>.TestStream.tell2  s    zz!r?   c                     |dk(  r|| _         y |dk(  r| xj                   |z  c_         y |dk(  r| j                  |z   | _         y y )Nr   r'   rT  )r  r  )r<   offsetwheres      r=   seekzMTestRequests.test_POSTBIN_SEEKED_OBJECT_WITH_NO_ITER.<locals>.TestStream.seek5  sA    A:!'DJaZJJ&(JaZ!%v!5DJ  r?   rC   r   )__name__
__module____qualname__r  r  r  r  r  r   r?   r=   
TestStreamr     s    
#"6r?   r  r   r:   rh   r   rN   rT  st)r4   r:   r   r   r  )r<   r]   r  r   r  r  s         r=   'test_POSTBIN_SEEKED_OBJECT_WITH_NO_ITERz4TestRequests.test_POSTBIN_SEEKED_OBJECT_WITH_NO_ITER  s    	6 	6: &!gfoD9  C'''zz|F#v---&!		!gfoD9  C'''zz|F#t+++r?   c                 $    |d      }t        j                  |      j                          t        j                  |ddi      }|j                  dk(  sJ t	        d      5 }t        j                  |ddid|i      }d d d        j                  dk(  sJ t        j                  |d      }|j                  dk(  sJ t        j                  t              5  t        j                  |d	g
       d d d        y # 1 sw Y   }xY w# 1 sw Y   y xY w)Nr:   r  rN   rh   r   r  rN   r  r  r  r  r  r  s          r=   %test_POSTBIN_GET_POST_FILES_WITH_DATAz2TestRequests.test_POSTBIN_GET_POST_FILES_WITH_DATAH  s    foc++-c(89  C'''()QMM#VV,<VQKPE *  C'''c(<=  C''']]:&MM#o%67 '& *) '&s   !C:D:DDc                      G d dt               } |ddi      } |d      }t        j                  ||      j                         j	                  d      }|ddik(  sJ y )Nc                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)ATestRequests.test_post_with_custom_mapping.<locals>.CustomMappingc                 $    t        |i || _        y rC   )dictrN   r<   r   kwargss      r=   r  zJTestRequests.test_post_with_custom_mapping.<locals>.CustomMapping.__init__[  s     $1&1	r?   c                     | j                   |= y rC   rh   r<   rY  s     r=   __delitem__zMTestRequests.test_post_with_custom_mapping.<locals>.CustomMapping.__delitem__^  s    IIcNr?   c                      | j                   |   S rC   rh   r  s     r=   __getitem__zMTestRequests.test_post_with_custom_mapping.<locals>.CustomMapping.__getitem__a  s    yy~%r?   c                 "    || j                   |<   y rC   rh   )r<   rY  r7  s      r=   __setitem__zMTestRequests.test_post_with_custom_mapping.<locals>.CustomMapping.__setitem__d  s    !&		#r?   c                 ,    t        | j                        S rC   )iterrN   rz  s    r=   __iter__zJTestRequests.test_post_with_custom_mapping.<locals>.CustomMapping.__iter__g  s    DII&r?   c                 ,    t        | j                        S rC   )r   rN   rz  s    r=   r  zITestRequests.test_post_with_custom_mapping.<locals>.CustomMapping.__len__j  s    499~%r?   N)	r  r  r  r  r  r  r  r  r  r   r?   r=   CustomMappingr  Z  s     2#&''&r?   r   r  rN   r:   rh   form)r
   r4   r:   r   r6   )r<   r]   r   rN   rH   
found_jsons         r=   test_post_with_custom_mappingz*TestRequests.test_post_with_custom_mappingY  s_    	&N 	&& ff-.fo]]3T2779==fE
ff----r?   c                      |d      }t        d      5 }t        j                  t              5  t	        j
                  |dd|i       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr:   r  z[{"some": "data"}]r  r  )r  rE   rF   r  r4   r:   )r<   r]   rH   r  s       r=   test_conflicting_post_paramsz)TestRequests.test_conflicting_post_paramsr  sT    fo()Qz*c(<VQKP + *)** *)s"   A&A	A&A#	A&&A/c                 X    t        j                   |dd            }|j                  rJ y )Nr   404)r4   r6   okr   s      r=   test_request_ok_setz TestRequests.test_request_ok_setx  s$    LL51244x4r?   c                 4   t        j                   |dd            }t        j                  t         j                  j
                        5  |j                          d d d        t        j                   |dd            }|j                  rJ y # 1 sw Y   4xY w)Nr   r  500)r4   r6   rE   rF   
exceptions	HTTPErrorr  r  r   s      r=   test_status_raisingz TestRequests.test_status_raising|  sm    LL512]]8..889  : LL51244x4	 :9s   
BBc                 p    t        j                   |d            }|j                  j                  d       y )Ngzipascii)r4   r6   r   r   r   s      r=   test_decompress_gzipz!TestRequests.test_decompress_gzip  s&    LL)			!r?   zurl, paramsz/getr  u   føø   øc                 >    t        j                   ||      |       y )Nrw   r4   r6   )r<   r]   rH   rx   s       r=   test_unicode_getzTestRequests.test_unicode_get  s     	WS\&1r?   c                 D    t        j                   |d      ddid       y )Nr8   r   zapplication/octet-stream   ÿ)r[   rN   )r4   r8   )r<   r]   s     r=   test_unicode_header_namez%TestRequests.test_unicode_header_name  s!    EN#%?@	
r?   c                 @    t        j                   |dd      |       y )Nr   r   verifyr  )r<   r  httpbin_ca_bundles      r=   test_pyopenssl_redirectz$TestRequests.test_pyopenssl_redirect  s    ^He4=NOr?   c                     d}t        j                  t              5 }t        j                   |       |       d d d        t        j                        dj                  |      k(  sJ y # 1 sw Y   3xY w)N/garbager  zECould not find a suitable TLS CA certificate bundle, invalid path: {}rE   rF   IOErrorr4   r6   strr7  formatr<   r  INVALID_PATHr   s       r=    test_invalid_ca_certificate_pathz-TestRequests.test_invalid_ca_certificate_path  sc    !]]7#qLL),? $GG
T[[

 	
 
 $#s   A++A4c                    d}t        j                  t              5 }t        j                   |       |       d d d        t        j                        dj                  |      k(  sJ t        j                  t              5 }t        j                   |       d|f       d d d        t        |j                        d| k(  sJ y # 1 sw Y   xY w# 1 sw Y   3xY w)Nr   certz9Could not find the TLS certificate file, invalid path: {}.z/Could not find the TLS key file, invalid path: r!  r%  s       r=   "test_invalid_ssl_certificate_filesz/TestRequests.test_invalid_ssl_certificate_files  s    !]]7#qLL)= $GG
HOO

 	
 
 ]]7#qLL)l0CD $177|=l^L
 	
 
 $# $#s   CCCCzenv, expectedTREQUESTS_CA_BUNDLE
/some/pathrg   CURL_CA_BUNDLE)r-  r/  z
/curl/pathc                     t        j                         }t        j                  d|      5  |j	                   |d      i ddd       }d d d        d   |k(  sJ y # 1 sw Y   xY w)Nz
os.environr6   FT)rH   r   r  r  r*  r  )r4   r   r   r9   merge_environment_settings)r<   r]   envrz   r   settingss         r=   test_env_cert_bundlesz"TestRequests.test_env_cert_bundles  sh    4 ZZc*33ENBuTPT 4 H + !X---	 +*s   AA$c                 ^    t        j                   |       d      }|j                  dk(  sJ y )Nr+  r)  r   r  r   s      r=   test_http_with_certificatez'TestRequests.test_http_with_certificate  s&    LL-}}###r?   Nz7urllib3 2.0 removed that warning and errors out instead)reasonc                 p   |\  }}}t         st        rd}nd}t        j                         5 }t	        j
                  d       t        j                  d| d|       ddd       D cg c]  }|j                  j                  dk7  r| }}t        d	 |D              }||k(  sJ y# 1 sw Y   KxY wc c}w )
z&warnings are emitted with requests.get)SubjectAltNameWarning)r(   InsecurePlatformWarningr9  alwayszhttps://localhost:/r  NResourceWarningc              3   H   K   | ]  }|j                   j                    y wrC   )categoryr  )r   items     r=   r   z3TestRequests.test_https_warnings.<locals>.<genexpr>  s     !U_T$--"8"8_s    ")HAS_MODERN_SSLHAS_PYOPENSSLrE   warnswarningssimplefilterr4   r6   r?  r  rC  )	r<   nosan_serverhostport	ca_bundlewarnings_expectedwarning_recordsr@  warnings_categorys	            r=   test_https_warningsz TestRequests.test_https_warnings  s     !-dI] :! \\^!!(+LL-dV15iH  (
'}}%%):: ' 	 
 "!U_!UU $5555 ^
s   1B')"B3'B0c                     t        j                  t              5  t        j                   |dd             ddd       y# 1 sw Y   yxY w)zL
        When underlying SSL problems occur, an SSLError is raised.
        r   200N)rE   rF   RequestsSSLErrorr4   r6   )r<   r  s     r=   test_certificate_failurez%TestRequests.test_certificate_failure  s2     ]]+, LL%89 -,,s   A  A	c                     t        j                   |d      dddgi      }|j                  dk(  sJ |j                   |d      k(  sJ y )Nr6   r   r  r'  rw   r   zget?test=foo&test=baz)r4   r6   r   rH   r   s      r=   +test_urlencoded_get_query_multivalued_paramz8TestRequests.test_urlencoded_get_query_multivalued_param  sI    LL%0HI}}###uu 78888r?   c                     t        j                  d |d      t        ddg            }|j                         }|j                  dk(  sJ y )Nr_   r:   r  r'  )r   )rT   rH   rN   ztest=foo&test=baz)r4   rM   r  rO   rP   r<   r]   rm   r   s       r=   0test_form_encoded_post_query_multivalued_elementz=TestRequests.test_form_encoded_post_query_multivalued_element	  sF    wvTu~5N
 yy{yy////r?   c           	          t        t        d      5 }t        j                   |d      dt	        j
                  ddi      iddidd	|fi
      }d d d        j                  dk(  sJ y # 1 sw Y   xY w)Nrbr:   stuffru   {   blahasdf1234filetest_requests.py)rN   rx   r  r   )r  __file__r4   r:   r   dumpsr   )r<   r]   r  rm   s       r=   (test_different_encodings_dont_break_postz5TestRequests.test_different_encodings_dont_break_post  sp    (D!Qtzz3*56
+ 2A67	A " }}### "!s   =A((A1rN   rY  u   ëlïxrelixrs   elixrc                     t        t        d      5 }t        j                   |d      |dd|fi      }d d d        j                  dk(  sJ y # 1 sw Y   xY w)NrX  r:   r]  r^  r  r   )r  r_  r4   r:   r   )r<   r]   rN   r  rm   s        r=   test_unicode_multipart_postz(TestRequests.test_unicode_multipart_post  sX     (D!Q 2A67A " }}### "!   #AAc           	      B   t         j                  j                  t              d   dz   }t	        |d      5 }t        j                  d |d      ddidd	|fi
      }|j                         }d d d        dj                  v sJ d|j                  vsJ y # 1 sw Y   *xY w)Nr   z.pyrX  r_   r:   s   stuffrb  r]  r^  )rT   rH   rN   r  s   name="stuff"s   name="b'stuff'")	osr   splitextr_  r  r4   rM   rO   rP   )r<   r]   filenamer  rm   r   s         r=   &test_unicode_multipart_post_fieldnamesz3TestRequests.test_unicode_multipart_post_fieldnames,  s    77##H-a058(D!Q  FO( 2A67	A 99;D " $))+++#499444 "!s   6BBc                     t        t        d      5 }d|i}t        j                  d |d      |      }d d d        j                  dk(  sJ y # 1 sw Y   xY w)NrX  r]  r_   r:   )rT   rH   r  r   )r  r_  r4   rr   r   )r<   r]   r  r  rm   s        r=   test_unicode_method_namez%TestRequests.test_unicode_method_name:  sV    (D!QQKE  FOA " }}### "!re  c                 z   t        j                         }t        t        d      5 }d|i}t        j                  d |d      |      }|j                  |      }d d d        t        j                  t              sJ |j                  dk(  sJ |j                  |      }|j                  dk(  sJ y # 1 sw Y   YxY w)NrX  r]  r_   r:   r  r   )r4   r   r  r_  rM   r   r   rT   r   r   r   )r<   r]   r   r  r  rQ   r   r   s           r=   ,test_unicode_method_name_with_request_objectz9TestRequests.test_unicode_method_name_with_request_objectD  s    (D!QQKE""676?%HC$$S)D " $++{333{{f$$$vvd|3&&& "!s   4B11B:c                 
   t        j                         }t        j                  dd      }t        j                  t
              5 }|j                  |       d d d        t        j                        dk(  sJ y # 1 sw Y   $xY w)Nr_   r<  z#You can only send PreparedRequests.)	r4   r   rM   rE   rF   r  r   r#  r7  )r<   r   rQ   r   s       r=   test_non_prepared_request_errorz,TestRequests.test_non_prepared_request_errorP  s`    vs+]]:&!FF3K '177|DDDD '&s   A99Bc                 p   t        t        d      5 }t        t        d      5 }dt        j                  ddi      i}d|fd|dfd}t	        j
                   |d	      ||
      }d d d        d d d        j                  dk(  sJ d|j                  j                  v sJ y # 1 sw Y   =xY w# 1 sw Y   AxY w)NrX  rY  ru   rZ  r^  test_requestsztext/py-content-type)file1file2r:   r  r   s   text/py-content-type)	r  r_  r   r`  r4   r:   r   rr   rP   )r<   r]   f1f2rN   r  rm   s          r=   test_custom_content_typez%TestRequests.test_custom_content_typeX  s    (D!Rh%S#J!780"5-r3IJ MM'&/EJ & " }}###&!))..888 &% "!s#   B,AB $B, B)	%B,,B5c                     d }t        j                         }t        j                  d |       d|i      }|j                  |      }|j	                  |       y )Nc                     | J |i k7  sJ y rC   r   r   r  s     r=   hookz?TestRequests.test_hook_receives_request_arguments.<locals>.hooke  s    ###R<<r?   rU   r   hooks)r4   r   rM   r   r   r<   r]   r{  r   rm   r   s         r=   $test_hook_receives_request_argumentsz1TestRequests.test_hook_receives_request_argumentsd  sM    	  UGIj$5GH  #	tr?   c                    d }t        j                         }|j                  d   j                  |       t        j                  d |             }|j                  |      }|j                  d   g k7  sJ |j                  d   |gk(  sJ y )Nc                       y rC   r   r   r  s     r=   r{  zLTestRequests.test_session_hooks_are_used_with_no_request_hooks.<locals>.hooko      r?   r   rU   r4   r   r}  appendrM   r   r~  s         r=   1test_session_hooks_are_used_with_no_request_hooksz>TestRequests.test_session_hooks_are_used_with_no_request_hooksn  s    	 	
""4(UGI.  #zz*%+++zz*%$///r?   c                    d }d }||usJ t        j                         }|j                  d   j                  |       t        j                  d |       d|gi      }|j                  |      }|j                  d   |gk(  sJ y )Nc                       y rC   r   r  s     r=   hook1zNTestRequests.test_session_hooks_are_overridden_by_request_hooks.<locals>.hook1z  r  r?   c                       y rC   r   r  s     r=   hook2zNTestRequests.test_session_hooks_are_overridden_by_request_hooks.<locals>.hook2}  r  r?   r   rU   r|  r  )r<   r]   r  r  r   rm   r   s          r=   2test_session_hooks_are_overridden_by_request_hooksz?TestRequests.test_session_hooks_are_overridden_by_request_hooksy  s    		 E!!!	
""5)UGIj5'5JK  #zz*%%000r?   c                     d }t        j                  d |       d|i      }|j                         }t        j                         }t	               |_        |j                  |      }t        |d      sJ y )Nc                     d| _         | S )NT)hook_workingrz  s     r=   r{  z5TestRequests.test_prepared_request_hook.<locals>.hook  s     $DKr?   rU   r   r|  r  )r4   rM   rO   r   r   r   r   hasattr)r<   r]   r{  rQ   r   r   r   s          r=   test_prepared_request_hookz'TestRequests.test_prepared_request_hook  sc    	 ugi
D7IJ{{}L	vvd|t^,,,r?   c                 X    G d dt         j                  j                        }t        j                  d |d            }|j                  rJ t        j                         } |       |_        |j                  |      }|j                  |      }|j                         d   d   dk(  sJ y )Nc                       e Zd Zd Zy):TestRequests.test_prepared_from_session.<locals>.DummyAuthc                 $    d|j                   d<   |S )Ndummy-auth-test-okDummy-Auth-Testrk   r<   rm   s     r=   __call__zCTestRequests.test_prepared_from_session.<locals>.DummyAuth.__call__  s    /C		+,r?   N)r  r  r  r  r   r?   r=   	DummyAuthr    s    r?   r  rU   r[   r  r  )r4   rf  AuthBaserM   r   r   r   r   )r<   r]   r  rQ   r   r   r   s          r=   test_prepared_from_sessionz'TestRequests.test_prepared_from_session  s    	.. 	
 ugi&8988|  %vvd|yy{9%&78<PPPPr?   c                     t        j                  dd      }t        j                         }|j                  |      }|j                  dk(  sJ y )NrU   s   https://httpbin.org/zhttps://httpbin.org/)r4   rM   r   r   rH   )r<   rQ   r   r   s       r=   (test_prepare_request_with_bytestring_urlz5TestRequests.test_prepare_request_with_bytestring_url  sF    u&=>  %xx1111r?   c                     t        j                         }|j                  d |d      dddi      }|j                  j	                  d      dk(  sJ y )	NrU   zcookies/set?cookie=valueFHosts   httpbin.org)r   r[   r3  r7  )r4   r   rr   r  r6   )r<   r]   r   r   s       r=   !test_request_with_bytestring_hostz.TestRequests.test_request_with_bytestring_host  sY    yy./!^,	  
 ||)W444r?   c                     t        j                         }ddddddddd	d
dddddd|_        |j                  d   d   dk(  sJ y )Nzpublic, max-age=60, s-maxage=60z
keep-aliver  zapplication/json; charset=utf-8zSat, 26 Jan 2013 16:47:56 GMTz""6ff6a73c0e446c1f61614769e3ceb778"zSat, 26 Jan 2013 16:22:39 GMTz<https://api.github.com/users/kennethreitz/repos?page=2&per_page=10>; rel="next", <https://api.github.com/users/kennethreitz/repos?page=7&per_page=10>;  rel="last"z
GitHub.comz200 OKAcceptnosniffzgithub.beta6057)zcache-control
connectioncontent-encodingzcontent-typedateetagzlast-modifiedlinkserverr   varyzx-content-type-optionszx-github-media-typezx-ratelimit-limitzx-ratelimit-remainingr   rel)r4   r   r[   linksr  s     r=   
test_linkszTestRequests.test_links  sg    >& &=38<
 #&/#0!%%))
	, wwvu%///r?   c                 >   d}d}d}d}ddi}t         j                  j                         }|j                  |||||       t	        |      dk(  sJ d|v sJ t        |      d   }|j                  |k(  sJ |j                  |k(  sJ |j                  d   |d   k(  sJ y )	Nsome_cookie
some_valueTztest.comHttpOnly)securedomainrestr'   r   )	r4   r  r6  setr   rB  r  r  _rest)r<   rY  r7  r  r  r  jarr3  s           r=   test_cookie_parametersz#TestRequests.test_cookie_parameters  s    D!002U6&tD3x1}}###c1}}&&&}}&&&||J'4
+;;;;r?   c                    d}d}d}d}t         j                  j                         }|j                  ||       |j                  ||       t	        |      }t	        |j                               }t	        |j                               }t        |      dk(  sJ t        |      dk(  sJ t        |      dk(  sJ t        |      dk(  sJ y )Nr  r  some_cookie1some_value1rT  )r4   r  r6  r  r  	iteritemsrW  r   	r<   rY  r7  key1value1r  d1d2d3s	            r=   test_cookie_as_dict_keeps_lenz*TestRequests.test_cookie_as_dict_keeps_len  s    002Uf#Y#--/"#))+3x1}}2w!||2w!||2w!||r?   c                 N   d}d}d}d}t         j                  j                         }|j                  ||       |j                  ||       t	        |      }t	        |j                               }t	        |j                               }|d   dk(  sJ |d   dk(  sJ |d   dk(  sJ y Nr  r  r  r  )r4   r  r6  r  r  r  rW  r  s	            r=   test_cookie_as_dict_keeps_itemsz,TestRequests.test_cookie_as_dict_keeps_items  s    002Uf#Y#--/"#))+- L000- L000.!]222r?   c                 
   d}d}d}d}t         j                  j                         }|j                  ||       |j                  ||       |j	                         }|t        |      k(  sJ t        |      t        |      k(  sJ y r  )r4   r  r6  r  keysrB  )r<   rY  r7  r  r  r  r  s          r=   test_cookie_as_dict_keysz%TestRequests.test_cookie_as_dict_keys	  sy    002UfxxztDz!!!DzT$Z'''r?   c                 
   d}d}d}d}t         j                  j                         }|j                  ||       |j                  ||       |j	                         }|t        |      k(  sJ t        |      t        |      k(  sJ y r  )r4   r  r6  r  valuesrB  )r<   rY  r7  r  r  r  r  s          r=   test_cookie_as_dict_valuesz'TestRequests.test_cookie_as_dict_values  sy    002Uff%%%F|tF|+++r?   c                 
   d}d}d}d}t         j                  j                         }|j                  ||       |j                  ||       |j	                         }|t        |      k(  sJ t        |      t        |      k(  sJ y r  )r4   r  r6  r  rW  rB  )r<   rY  r7  r  r  r  rW  s          r=   test_cookie_as_dict_itemsz&TestRequests.test_cookie_as_dict_items)  sy    002Uf		U###E{d5k)))r?   c                    d}d}d}d}t         j                  j                         }|j                  |||       |j                  |||       ||v sJ |j	                         }t        |      dk(  sJ t        j                  t         j                  j                        5  |j                  |       d d d        |j                  ||      }||k(  sJ y # 1 sw Y   $xY w)Nr  r  z	test1.comz	test2.com)r  rT  )
r4   r  r6  r  rW  r   rE   rF   CookieConflictErrorr6   )r<   rY  r7  domain1domain2r  rW  r3  s           r=   -test_cookie_duplicate_names_different_domainsz:TestRequests.test_cookie_duplicate_names_different_domains9  s    002U7+U7+czz		5zQ ]]8++??@GGCL A W- A@s   "CC c                 >   d}d}d}t         j                  j                         }|j                  |||       |j                  ||       t	        j
                  t         j                  j                        5  |j                  |       d d d        y # 1 sw Y   y xY w)Nr  r  	some_path)r   )r4   r  r6  r  rE   rF   r  r6   )r<   rY  r7  r   r  s        r=   8test_cookie_duplicate_names_raises_cookie_conflict_errorzETestRequests.test_cookie_duplicate_names_raises_cookie_conflict_errorN  su    002U&U]]8++??@GGCL A@@s   8BBc                      G d dt         j                        }t        j                  j	                         }|j                   |              t        |j                         j                         |      sJ y )Nc                       e Zd Zy)<TestRequests.test_cookie_policy_copy.<locals>.MyCookiePolicyNr  r  r  r   r?   r=   MyCookiePolicyr  Z      r?   r  )	r   DefaultCookiePolicyr4   r  r6  
set_policyr   copy
get_policy)r<   r  r  s      r=   test_cookie_policy_copyz$TestRequests.test_cookie_policy_copyY  sX    	Y:: 	 002~'(#((*//1>BBBr?   c                     t        j                   |d            }|j                  }|j                  |j                  |j
                  dz  dz  z   dz  z   dz  }|dkD  sJ y )Nr6      i  i@B g        )r4   r6   elapsedmicrosecondssecondsdays)r<   r]   rm   tdtotal_secondss        r=   test_time_elapsed_blankz$TestRequests.test_time_elapsed_blanka  s^    LL(YYOOrzzBGGbL4,??5HH s"""r?   c                 H    t        j                         }|j                  J y rC   )r4   r   r   r  s     r=   $test_empty_response_has_content_nonez1TestRequests.test_empty_response_has_content_nonei  s     yy   r?   c                     t        j                         }t        j                  d      }|j                  dfd	}t	        |d|       ||_        t        t        |            sJ  |j                          y )Nabcc                      |       S rC   r   )amtdecode_contentread_s     r=   	read_mockz9TestRequests.test_response_is_iterable.<locals>.read_mockr  s    :r?   r  rC   )	r4   r   r)   r  r   r   r   r  close)r<   rm   r   r  r  s       @r=   test_response_is_iterablez&TestRequests.test_response_is_iterablem  s_    u%	 	FI&DG}}
r?   c                 X   t        j                         }d|_        d|_        d|_        |j                  d      }t        d |D              sJ t        j                         }t        j                  d      |_	        d|_        |j                  d      }t        d |D              sJ y)zeWhen called with decode_unicode, Response.iter_content should always
        return unicode.
        Tr   r  )decode_unicodec              3   <   K   | ]  }t        |t                y wrC   r   r#  r   chunks     r=   r   z<TestRequests.test_response_decode_unicode.<locals>.<genexpr>       >ve:eS)v   c              3   <   K   | ]  }t        |t                y wrC   r  r  s     r=   r   z<TestRequests.test_response_decode_unicode.<locals>.<genexpr>  r  r   N)
r4   r   _content_consumed_contentencodingiter_contentallr   r   r   r<   rm   chunkss      r=   test_response_decode_unicodez)TestRequests.test_response_decode_unicodez  s     "#

t4>v>>>> 

>*
t4>v>>>>r?   c                     t        j                         }d|_        dj                         |_        d|_        d |_        |j                  rJ y )Nzunicode URL   Komponenttia ei löydyi  )r4   r   rH   r   r7  r   r  r  r  s     r=   test_response_reason_unicodez)TestRequests.test_response_reason_unicode  sB    +224
44x4r?   c                 d   t        j                         }d|_        d}|j                  d      |_        d|_        d |_        t        j                  t         j                  j                        5 }|j                          d d d        |j                  j                  d   v sJ y # 1 sw Y   'xY w)Nzsome urlr  zlatin-1  r   )r4   r   rH   r   r7  r   r  rE   rF   r  r  r  r7  r   )r<   rm   r7  r   s       r=   %test_response_reason_unicode_fallbackz2TestRequests.test_response_reason_unicode_fallback  s    )==+
]]8..889Q  :a((( :9s   /B&&B/c                 $   t        j                         }t        j                  d      |_        |j                  d      }t        d |D              sJ t        j                         }t        j                  d      |_        |j                  d      }t        |      dgk(  sJ t        j                         }t        j                  d      |_        t        j                  t              5  |j                  d      }ddd       y# 1 sw Y   yxY w)zeEnsure that chunk_size is passed as None or an integer, otherwise
        raise a TypeError.
        r   r'   c              3   8   K   | ]  }t        |      d k(    yw)r'   Nr   r  s     r=   r   z=TestRequests.test_response_chunk_size_type.<locals>.<genexpr>  s     7u3u:?s   N1024)r4   r   r   r   r   r  r  rB  rE   rF   	TypeErrorr  s      r=   test_response_chunk_size_typez*TestRequests.test_response_chunk_size_type  s     

>*"77777

>*%F|////

>*]]9%^^F+F &%%s   +DDzexception, args, expected)Nrg   rg   c                 "   t        j                         }t        j                         |_         || |j                  j
                  _        t        j                  |      5  t        |j                  d             d d d        y # 1 sw Y   y xY w)Ni   )r4   r   r   Mockr   r  side_effectrE   rF   r   r  )r<   r]   rG   r   rz   rm   s         r=   "test_iter_content_wraps_exceptionsz/TestRequests.test_iter_content_wraps_exceptions  s_     		 $-d#3 ]]8$%& %$$s   !BBc                    t        j                   |d            }t        j                  t        j                  |j
                              sJ t        j                  t        j                  |            }|j
                  j                  |j
                  j                  k(  sJ |j
                  j                  |j
                  j                  k(  sJ y )Nr6   )r4   r6   pickleloadsr`  rr   rH   r[   )r<   r]   rm   rR   s       r=   (test_request_and_response_are_pickleablez5TestRequests.test_request_and_response_are_pickleable  s    LL( ||FLL3444 \\&,,q/*yy}}

...yy  BJJ$6$6666r?   c                    t        j                  d |d            j                         }t        j                  t        j
                  |            }|j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ t        j                         }|j                  |      }|j                  dk(  sJ y r   )r4   rM   rO   r  r  r`  rH   r[   rP   r   r   r   )r<   r]   rn  rm   r   r   s         r=   #test_prepared_request_is_pickleablez0TestRequests.test_prepared_request_is_pickleable  s    UGEN3;;= LLa)uu~~yyAII%%%vv vvay3&&&r?   c                    t        t        d      5 }t        j                  d |d      d|i      }|j	                         }d d d        t        j                  t        j                              }|j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ t        j                         }|j                  |      }|j                  dk(  sJ y # 1 sw Y   xY w)NrX  r_   r:   r]  r  r   )r  r_  r4   rM   rO   r  r  r`  rH   r[   rP   r   r   r   )r<   r]   r  rm   rn  r   r   s          r=   -test_prepared_request_with_file_is_pickleablez:TestRequests.test_prepared_request_with_file_is_pickleable  s    (D!Q  LA		A "
 LLa)uu~~yyAII%%%vv vvay3&&& "!s   1C::Dc                    t        j                  d |d      t                     }|j                         }t	        j
                  t	        j                  |            }|j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ t        j                         }|j                  |      }|j                  dk(  sJ y )NrU   r6   r|  r   )r4   rM   r!   rO   r  r  r`  rH   r[   rP   r}  r   r   r   )r<   r]   rm   rn  r   r   s         r=   -test_prepared_request_with_hook_is_pickleablez:TestRequests.test_prepared_request_with_hook_is_pickleable  s    UGEN-/JIIK LLa)uu~~yyAII%%%vvww!''!!! vvay3&&&r?   c                     t        j                   |             }t        j                  t              5  t        j
                         j                  |       d d d        y # 1 sw Y   y xY w)NrH   )r4   rM   rE   rF   r  r   r   r   s      r=   $test_cannot_send_unprepared_requestsz1TestRequests.test_cannot_send_unprepared_requests  sC    +]]:&##A& '&&s   $A""A+c                 j   t         j                  j                         }|j                  rJ t        j                         }t         j                  j                  |      }|j                  |k(  sJ t         j                  j                  d|      }t        |      dk(  sJ |j                  |k(  sJ y )N)r   message)r4   r  r  r   r   r#  )r<   errorr   s      r=   test_http_errorzTestRequests.test_http_error  s    ##--/>>!!$$&##--x-@~~)))##--i(-K5zY&&&~~)))r?   c                 2   t        j                  d |d            }t        j                         }t        j                  t        j
                  |            }t               |_        |j                  |j                               }|j                  dk(  sJ y r   )r4   rM   r   r  r  r`  r   r   r   rO   r   r   s       r=   test_session_picklingz"TestRequests.test_session_pickling  sk    UGEN3LLa)L	FF199;}}###r?   c                 6   t        j                         }|j                  j                  ddi       |j                  j                  ddi       |j	                   |d            }|j
                  j                  }|d   dk(  sJ |d   dk(  sJ |d   dk(  sJ y)z7Ensure that header updates are done case-insensitively.ACCEPTBOGUSacceptapplication/jsonr6   r  N)r4   r   r[   r  r6   rr   )r<   r]   r   rm   r[   s        r=   test_fixes_1329zTestRequests.test_fixes_1329  s    			(G,-			($678EE'%.!))##x $6666x $6666x $6666r?   c                    t         |d            }d|j                  z   |j                  z   }t        j                   |d      d|i      }|j
                  dk(  sJ |j                  j                         |j                         k(  sJ y )Nhtmlr   r   rH   rw   r   )r   r   r   r4   r6   r   rH   rZ   )r<   r]   r   rH   rm   s        r=   test_uppercase_scheme_redirectz+TestRequests.test_uppercase_scheme_redirect&  sp    )%,,&3LL/E}}###uu{{}		+++r?   c                 
   t        j                         }ddg}|t        |j                        k(  sJ |j	                  dt                      |j	                  dt                      |j	                  dt                      |j	                  dt                      g d}|t        |j                        k(  sJ |j	                  dt                      |j	                  d	t                      |j	                  d
t                      g d}|t        |j                        k(  sJ t        j                         }dt               i|_        |j	                  dt                      d|j                  v sJ d|j                  v sJ y )Nr~  rA   
http://githttp://githubhttp://github.comhttp://github.com/about/)r:  r9  r8  r7  r~  rA   http://gittiphttp://gittip.comhttp://gittip.com/about/)	r:  r=  r9  r<  r8  r;  r7  r~  rA   )r4   r   rB  adaptersmountr   )r<   r   orders2s       r=   test_transport_adapter_orderingz,TestRequests.test_transport_adapter_ordering-  s5   Y'QZZ((((	km,	/	#[]3	*KM:
 QZZ((((	/	#[]3	*KM:

 QZZ(((( +-0
[]+BKK'''R[[(((r?   c                 D   d}|dz   }|dz   }|dz   }d}t        j                         }t               }t               }|j                  ||       |j                  ||       |j	                  |      |u sJ |j	                  |      |u sJ |j	                  |      ||fvsJ y )Nr  r.  z/another/pathz/longer/pathzhttps://another.example.com/r4   r   r   r?  get_adapter)	r<   prefixmore_specific_prefixurl_matching_only_prefix!url_matching_more_specific_prefixurl_not_matching_prefixr   prefix_adaptermore_specific_prefix_adapters	            r=   (test_session_get_adapter_prefix_matchingz5TestRequests.test_session_get_adapter_prefix_matchingS  s    &%4#)O#; ,@>,Q)"@$'2}$	'	$&BC}}56.HHHMM;<+,	
, }}45(>
 
 	
 
r?   c                     d}|dz   }t        j                         }t               }|j                  ||       |j	                  |      |u sJ y )N%hTtPs://eXamPle.CoM/MixEd_CAse_PREfixz	/full_urlrD  )r<   mixed_case_prefixurl_matching_prefixr   
my_adapters        r=   3test_session_get_adapter_prefix_matching_mixed_casez@TestRequests.test_session_get_adapter_prefix_matching_mixed_casek  sO    C/+= ]
	!:.}}01Z???r?   c                     d}d}t        j                         }t               }|j                  ||       |j	                  |      |u sJ y )NrO  z1HtTpS://exaMPLe.cOm/MiXeD_caSE_preFIX/another_urlrD  )r<   rP  'url_matching_prefix_with_different_caser   rR  s        r=   <test_session_get_adapter_prefix_matching_is_case_insensitivezITestRequests.test_session_get_adapter_prefix_matching_is_case_insensitiveu  sN    C? 	0  ]
	!:.}}DESSSr?   c                     t        j                         }d|j                  d<   |j                   |d      dd i      }d|j                  j                  vsJ y )Nr  r  r6   FOOrk   )r4   r   r[   r6   rr   r  s       r=   &test_header_remove_is_case_insensitivez3TestRequests.test_header_remove_is_case_insensitive  sP     		%EE'%.5$-E8AII-----r?   c                     t        j                         }d|j                  d<   |j                   |d      ddi      }|j	                         d   dddk(  sJ y )Nr  r  r6   rX  rw   r   )r  rX  )r4   r   rx   r6   r   r  s       r=   %test_params_are_merged_case_sensitivez2TestRequests.test_params_are_merged_case_sensitive  sU    EE'%.%E8vvx5#????r?   c                     dj                  ddd      }t        j                  d|      j                         }|j                  |k(  sJ y )Nz$http://{}:{}@{}:9000/path?query#fragz$E8A3BE87-9E3F-4620-8858-95478E385B5Bz$EA770032-DA4D-4D84-8CE9-29C6D910BF1Ez?exactly-------------sixty-----------three------------charactersrU   )r$  r4   rM   rO   rH   r<   rH   rm   s      r=   test_long_authinfo_in_urlz&TestRequests.test_long_authinfo_in_url  sH    4;;22M

 UC(002uu||r?   c                     ddd}t        j                  d |d      |      }|j                         }d|j                  j	                         v sJ d|j                  j	                         v sJ y )Nr[  )unicodes   byterU   r6   rk   r`  byte)r4   rM   rO   r[   r  )r<   r]   r[   rm   rn  s        r=   test_header_keys_are_nativez(TestRequests.test_header_keys_are_native  sc    $v6UGENGDIIK AIINN,,,,))))r?   c                     ddddd}t        j                   |d      |      }|j                         D ]#  }||   |j                  j                  |   k(  r#J  y)	zBEnsure prepare_headers regex isn't flagging valid header contents.zbar baz quxs   fbbqrg   r   )r  r  r'  quxr6   rk   N)r4   r6   r  rr   r[   )r<   r]   valid_headersrm   rY  s        r=   test_header_validationz#TestRequests.test_header_validation  sb     !	
 LL? %%'C %):):3)???? (r?   zinvalid_header, keyrU  r  r'  c                     t        j                  t              5 }t        j                   |d      |       ddd       |t        j                        v sJ y# 1 sw Y   #xY w)zgEnsure the header value is of type string or bytes as
        per discussion in GH issue #3386
        r6   rk   N)rE   rF   r   r4   r6   r#  r7  )r<   r]   invalid_headerrY  excinfos        r=   test_header_value_not_strz&TestRequests.test_header_value_not_str  sI     ]]=)WLL@ *c'--(((( *)s   AA#rh  zbar
baz: quxzbar
baz: quxzbar
baz: quxzbarbaz: quxzfoozfo
ozfo
ozfo
oc                     t        j                  t              5  t        j                   |d      |       ddd       y# 1 sw Y   yxY w)zEnsure that a header containing return character sequences raise an
        exception. Otherwise, multiple headers are created from single string.
        r6   rk   NrE   rF   r   r4   r6   r<   r]   rh  s      r=   test_header_no_return_charsz(TestRequests.test_header_no_return_chars  s.    " ]]=)LL@ *))   AA
z fooz	fooz    fooz barz    barz	bar c                     t        j                  t              5  t        j                   |d      |       ddd       y# 1 sw Y   yxY w)zgEnsure headers containing leading whitespace raise
        InvalidHeader Error before sending.
        r6   rk   Nrl  rm  s      r=   test_header_no_leading_spacez)TestRequests.test_header_no_leading_space  s.      ]]=)LL@ *))ro  c                     G d dt               } G d dt              }t        j                   |d       |d      di      }|j                  j
                  d   dk(  sJ t        j                   |d       |d	      d
i      }|j                  j
                  d   d
k(  sJ t        j                   |d       |d       |d
      i      }|j                  j
                  d   d
k(  sJ y)zIf the subclasses does not behave *exactly* like
        the base bytes/str classes, this is not supported.
        This test is for backwards compatibility.
        c                       e Zd Zy)>TestRequests.test_header_with_subclass_types.<locals>.MyStringNr  r   r?   r=   MyStringru    r  r?   rv  c                       e Zd Zy)=TestRequests.test_header_with_subclass_types.<locals>.MyBytesNr  r   r?   r=   MyBytesrx    r  r?   ry  r6   zx-custommyheaderrk   s   x-customs   myheaderN)r#  r   r4   r6   rr   r[   )r<   r]   rv  ry  r_strr_bytesr_mixeds          r=   test_header_with_subclass_typesz,TestRequests.test_header_with_subclass_types  s    	s 		e 	 WU^hz6JJ5WX}}$$Z0J>>>,,ENW[%9;$G
 &&z2kAAA,,ENXj%97;;O$P
 &&z2kAAAr?   r  s   fooc                     ddi}d|i}t        j                  d |d      ||      }|j                         }d|j                  d   v sJ y )	Nru   this is a stringrv   r_   r:   r  multipart/form-datar   rl   )r<   r]   r  rN   rm   rn  s         r=    test_can_send_objects_with_filesz-TestRequests.test_can_send_objects_with_files  sR    '(eVWV_4uMIIK$		.(AAAAr?   c                     t        j                         }d|_        t        j                  d |d      d|i      }|j                         }d|j                  d   v sJ y )NrT  r_   r:   r  r  r  r   )r   r   r8  r4   rM   rO   r[   )r<   r]   r  rm   rn  s        r=   2test_can_send_file_object_with_non_string_filenamez?TestRequests.test_can_send_file_object_with_non_string_filename  sR    JJLVWV_S!HEIIK$		.(AAAAr?   c                     d}d}t        j                  d |d      |      }|j                         }|j                  d   |k(  sJ y )Nr  16r_   r:   rh   rX   rl   r<   r]   rN   r  rQ   rn  s         r=   %test_autoset_header_values_are_nativez2TestRequests.test_autoset_header_values_are_native  sG    !vwvTBKKMyy)*f444r?   c                     d}|j                  d      }t        t        |            }t        j                  d |d      |      }|j                         }|j                  d   |k(  sJ y Nu3   This is a string containing multi-byte UTF-8 ☃️r   r_   r:   rh   rX   )r   r#  r   r4   rM   rO   r[   )r<   r]   rN   encoded_datar  rQ   rn  s          r=   "test_content_length_for_bytes_dataz/TestRequests.test_content_length_for_bytes_data  s_    D{{7+S&'vwv\JKKMyy)*f444r?   c                     d}t        t        |j                  d                  }t        j                  d |d      |      }|j                         }|j                  d   |k(  sJ y r  )r#  r   r   r4   rM   rO   r[   r  s         r=   0test_content_length_for_string_data_counts_bytesz=TestRequests.test_content_length_for_string_data_counts_bytes  sZ    DSW-./vwvTBKKMyy)*f444r?   c                     d}|D ]9  }t        j                  d|      }|j                         }||j                  k(  r9J  y )N)zJdata:image/gif;base64,R0lGODlhAQABAHAAACH5BAUAAAAALAAAAAABAAEAAAICRAEAOw==zfile:///etc/passwdz<magnet:?xt=urn:btih:be08f00302bc2d1d3cfa3af02024fa647a271431rU   ry   )r<   	test_urlstest_urlrQ   preqs        r=   $test_nonhttp_schemes_dont_check_URLsz1TestRequests.test_nonhttp_schemes_dont_check_URLs&  sD    
	
 "H""5(3C;;=Dtxx''' "r?   c                     t        j                   |d      d |d      id|      }|j                  d   j                  j                  d   sJ d|j                  j                  vsJ y )Nr   rH   r6   ra  )rx   rf  r  r   rk  r4   r6   r   rr   r[   )r<   r]   r  r  rm   s        r=   'test_auth_is_stripped_on_http_downgradez4TestRequests.test_auth_is_stripped_on_http_downgrade1  sh     LL=)75>*!$	
 yy|##++O<<<aii&7&7777r?   c                     t        j                   |d      d      }|j                  d   j                  j                  d   }|j                  j                  d   }||k(  sJ y )Nr  ra  re  r   rk  r  )r<   r]   rm   h1h2s        r=   *test_auth_is_retained_for_redirect_on_hostz7TestRequests.test_auth_is_retained_for_redirect_on_host=  sU    LL.5EFYYq\!!))/:YY/Rxxr?   c                 T    t        j                         }|j                  dd      sJ y )Nhttp://example.com/foozhttp://another.example.com/r4   r   should_strip_authr<   r   s     r=   "test_should_strip_auth_host_changez/TestRequests.test_should_strip_auth_host_changeD  s.    ""$&C
 	
 
r?   c                 T    t        j                         }|j                  dd      sJ y )Nhttps://example.com/foohttp://example.com/barr  r  s     r=   %test_should_strip_auth_http_downgradez2TestRequests.test_should_strip_auth_http_downgradeJ  s(    ""#<>VWWWr?   c                     t        j                         }|j                  dd      rJ |j                  dd      rJ |j                  dd      rJ |j                  dd      sJ |j                  dd      sJ y )Nr  https://example.com/barhttp://example.com:80/foohttps://example.com:443/barzhttp://example.com:8080/foozhttps://example.com:8443/barr  r  s     r=   $test_should_strip_auth_https_upgradez1TestRequests.test_should_strip_auth_https_upgradeN  s    &&$&?
 	
 
 &&')B
 	
 
 &&$&C
 	
 
 "")+D
 	
 
 ""$&D
 	
 
r?   c                 T    t        j                         }|j                  dd      sJ y )Nzhttp://example.com:1234/foozhttps://example.com:4321/barr  r  s     r=   "test_should_strip_auth_port_changez/TestRequests.test_should_strip_auth_port_changea  s.    "")+I
 	
 
r?   zold_uri, new_uri))zhttps://example.com:443/foor  )r  r  )r  r  )r  zhttp://example.com:80/barc                 T    t        j                         }|j                  ||      rJ y rC   r  )r<   old_urinew_urir   s       r=   #test_should_strip_auth_default_portz0TestRequests.test_should_strip_auth_default_portg  s+     &&w8888r?   c                 h   t        j                         }|j                   |d      dd      }|j                  sJ |j	                  ||j
                  d      }|j                  d       t        |      }|j                  sJ |j                         D ]  } t        |      }|j                  rJ y )Nz
redirect/2FT)r   r  r     )r4   r   r6   r   r   rr   r  r   )r<   r]   r   r1rgr2_r3s           r=   +test_manual_redirect_with_partial_body_readz8TestRequests.test_manual_redirect_with_partial_body_readt  s    UU7<(%UM~~~  RZZ = 	"X~~~ "A #"X>>!!>r?   c                 p    d}t        j                  dd|      j                         }|j                  J y )N   the datarU   r   rh   )r4   rM   rO   _body_positionr<   rN   r   s      r=   %test_prepare_body_position_non_streamz2TestRequests.test_prepare_body_position_non_stream  s7    ';$GOOQ""***r?   c                    t        j                  d      }t        j                  dd|      j	                         }|j
                  dk(  sJ |j                  j                         dk(  sJ |j                  j                         dk(  sJ t        j                  j                  |       |j                  j                         dk(  sJ y )Nr  rU   r   rh   r   r?   )
r   r   r4   rM   rO   r  rP   r  utilsrewind_bodyr  s      r=   test_rewind_bodyzTestRequests.test_rewind_body  s    zz+&';$GOOQ""a'''yy~~;... yy~~3&&& 	""4(yy~~;...r?   c                    t        j                  d      }|j                  d       t        j                  dd|      j                         }|j                  dk(  sJ |j                  j                         dk(  sJ |j                  j                         dk(  sJ t        j                  j                  |       |j                  j                         dk(  sJ y )Nr  rV  rU   r   rh   s   datar?   )
r   r   r  r4   rM   rO   r  rP   r  r  r  s      r=   test_rewind_partially_read_bodyz,TestRequests.test_rewind_partially_read_body  s    zz+&		!';$GOOQ""a'''yy~~7*** yy~~3&&& 	""4(yy~~7***r?   c                 N    G d d      } |d      }t        j                  dd|      j                         }|j                  dk(  sJ t	        j
                  t              5 }t         j                  j                  |       d d d        dt              v sJ y # 1 sw Y   xY w)	Nc                       e Zd Zd Zd Zd Zy)9TestRequests.test_rewind_body_no_seek.<locals>.BadFileObjc                     || _         y rC   rh   r  s     r=   r  zBTestRequests.test_rewind_body_no_seek.<locals>.BadFileObj.__init__  	     	r?   c                      yr  r   rz  s    r=   r  z>TestRequests.test_rewind_body_no_seek.<locals>.BadFileObj.tell      r?   c                      y rC   r   rz  s    r=   r  zBTestRequests.test_rewind_body_no_seek.<locals>.BadFileObj.__iter__      r?   Nr  r  r  r  r  r  r   r?   r=   
BadFileObjr    s    !r?   r  the datarU   r   rh   r   Unable to rewind request body
r4   rM   rO   r  rE   rF   r    r  r  r#  r<   r  rN   r   r   s        r=   test_rewind_body_no_seekz%TestRequests.test_rewind_body_no_seek  s    	 	 *%';$GOOQ""a''']]01QNN&&t, 2 /#a&888 21   # BB$c                 N    G d d      } |d      }t        j                  dd|      j                         }|j                  dk(  sJ t	        j
                  t              5 }t         j                  j                  |       d d d        dt              v sJ y # 1 sw Y   xY w)	Nc                   &    e Zd Zd Zd ZddZd Zy)=TestRequests.test_rewind_body_failed_seek.<locals>.BadFileObjc                     || _         y rC   rh   r  s     r=   r  zFTestRequests.test_rewind_body_failed_seek.<locals>.BadFileObj.__init__  r  r?   c                      yr  r   rz  s    r=   r  zBTestRequests.test_rewind_body_failed_seek.<locals>.BadFileObj.tell  r  r?   c                     t               rC   OSError)r<   poswhences      r=   r  zBTestRequests.test_rewind_body_failed_seek.<locals>.BadFileObj.seek  	    ir?   c                      y rC   r   rz  s    r=   r  zFTestRequests.test_rewind_body_failed_seek.<locals>.BadFileObj.__iter__  r  r?   Nr  )r  r  r  r  r  r  r  r   r?   r=   r  r    s    ! r?   r  r  rU   r   rh   r   z*error occurred when rewinding request bodyr  r  s        r=   test_rewind_body_failed_seekz)TestRequests.test_rewind_body_failed_seek  s    	 	 *%';$GOOQ""a''']]01QNN&&t, 2 <s1vEEE 21r  c                 H    G d d      } |d      }t        j                  dd|      j                         }|j                  J t	        j
                  t              5 }t         j                  j                  |       d d d        dt              v sJ y # 1 sw Y   xY w)Nc                       e Zd Zd Zd Zd Zy)=TestRequests.test_rewind_body_failed_tell.<locals>.BadFileObjc                     || _         y rC   rh   r  s     r=   r  zFTestRequests.test_rewind_body_failed_tell.<locals>.BadFileObj.__init__  r  r?   c                     t               rC   r  rz  s    r=   r  zBTestRequests.test_rewind_body_failed_tell.<locals>.BadFileObj.tell  r  r?   c                      y rC   r   rz  s    r=   r  zFTestRequests.test_rewind_body_failed_tell.<locals>.BadFileObj.__iter__  r  r?   Nr  r   r?   r=   r  r    s    ! r?   r  r  rU   r   rh   r  r  r  s        r=   test_rewind_body_failed_tellz)TestRequests.test_rewind_body_failed_tell  s    	 	 *%';$GOOQ""...]]01QNN&&t, 2 /#a&888 21s     BB!c                 l     |j                  |      }|j                  d _         fd}||_        y )Nr%  Fc                  p     | i |}j                   s d|j                  j                  d<   d_         |S )Nr  r  T)_patched_responser   r[   )r   r  r   org_build_responser<   s      r=   build_responsezDTestRequests._patch_adapter_gzipped_redirect.<locals>.build_response  s=    %t6v6D))7=  !34)-&Kr?   )rE  r  r  )r<   r5   rH   adapterr  r  s   `    @r=   _patch_adapter_gzipped_redirectz,TestRequests._patch_adapter_gzipped_redirect  s9    %%#%.$33!&	 "0r?   c                     t        j                         } |d      }| j                  ||       |j                  |       y )Nr  )r4   r   r  r6   r  s       r=   'test_redirect_with_wrong_gzipped_headerz4TestRequests.test_redirect_with_wrong_gzipped_header  s5    l#,,Q4	c
r?   zusername, password, auth_str)r   r   zBasic dGVzdDp0ZXN0z"Basic 0LjQvNGPOtC/0LDRgNC+0LvRjA==c                 N    t        ||      }t        |t              sJ ||k(  sJ y rC   )r   r   r   )r<   rl  rm  auth_strr   s        r=   $test_basic_auth_str_is_always_nativez1TestRequests.test_basic_auth_str_is_always_native  s,     Hh/![)))H}}r?   c                     t        j                   |d            }|j                  d   j                  }d}|j                  D ]  }|j                  |d| k(  sJ |dz  } y )Nz
redirect/5r   r'   )r4   r6   r   )r<   r]   rm   totalir@  s         r=   test_requests_history_is_savedz+TestRequests.test_requests_history_is_saved
  s\    LL./		"%%IID<<51:---FA r?   c                     t        j                   |d      ddi      }|j                  dk(  sJ d|j                  j                  d   v sJ ddi|j                         d   k(  sJ y )	Nr:   rK   ri  r   r   r1  r   r   )r4   r:   r   rr   r[   r   r   s      r=   'test_json_param_post_content_type_worksz4TestRequests.test_json_param_post_content_type_works  sf    MM'&/=}}###!QYY%6%6~%FFFF|qvvx////r?   c                     t        j                  d |d      ddiddi      }|j                         }d|j                  k(  sJ y )	Nr_   r:   rY  rb  musicflute)rT   rH   rN   r   zstuff=elixr)r4   rM   rO   rP   rU  s       r=   3test_json_param_post_should_not_override_data_paramz@TestRequests.test_json_param_post_should_not_override_data_param  sK    7#7#	
 yy{		)))r?   c                     t        j                   |d      d      }|j                  dk(  sJ |j                         }t	        |       t        t        |            dk(  sJ y )Nstream/4Tr  r   rU  )r4   r6   r   
iter_linesr   r   rB  )r<   r]   rm   its       r=   test_response_iter_linesz%TestRequests.test_response_iter_lines"  sQ    LL,T:}}###\\^R48}!!!r?   c                     t        j                   |d      d      5 }t        |t         j                        sJ 	 d d d        j                  j
                  sJ y # 1 sw Y   "xY w)Nr  Tr  )r4   r6   r   r   r   closed)r<   r]   r   s      r=   test_response_context_managerz*TestRequests.test_response_context_manager*  sP    \\'*-d;xh(9(9::: < ||"""" <;s   AA&c                     t        j                         }t        j                  |j	                   |d      d            5 }	 d d d        j
                  du sJ |j                  j                  sJ y # 1 sw Y   2xY w)Nr  Tr  F)r4   r5   
contextlibclosingr6   r  r   r  )r<   r]   r   r   s       r=   2test_unconsumed_session_response_closes_connectionz?TestRequests.test_unconsumed_session_response_closes_connection0  sn    gj&9$ GHH I ))U222||""""	 IHs   A44A=c                     t        j                   |d      d      }|j                  dk(  sJ t        |j	                                t        t        |j	                                     dk(  sJ y)z+Response.iter_lines() is not reentrant safer  Tr  r   rU  N)r4   r6   r   r   r  r   rB  r   s      r=   "test_response_iter_lines_reentrantz/TestRequests.test_response_iter_lines_reentrant9  sW     LL,T:}}###Q\\^4'(A---r?   c                    t        j                         t        j                         d}t        j                         }t         j                  j                  |j                  d   j                  |      5  |j                          |d   j                  j                          |d   j                  j                          d d d        y # 1 sw Y   y xY w)N)onetworA   r  r  )r   r  r4   r   r9   r  r>  proxy_managerr  clearassert_called_once_with)r<   r   r5   s      r=   test_session_close_proxy_clearz+TestRequests.test_session_close_proxy_clearB  s    99;99;
 ""$ZZ__W--i8FFPMMOEN  88:EN  88: QPPs   5AC		Cc                 L    t               }|j                  d      }|ddik(  sJ y )Nzhttp://user:pass@httpbin.orgr  zBasic dXNlcjpwYXNzr   proxy_headersr<   r  r[   s      r=   test_proxy_authzTestRequests.test_proxy_authM  s/    -''(FG02FGGGGr?   c                 L    t               }|j                  d      }|ddik(  sJ y )Nzhttp://user:@httpbin.orgr  zBasic dXNlcjo=r  r  s      r=   test_proxy_auth_empty_passz'TestRequests.test_proxy_auth_empty_passR  s/    -''(BC02BCCCCr?   c                     t        j                   |d            }d|_        d|_        d|_        |j
                  J t        j                  t              5  |j                          d d d        y # 1 sw Y   y xY w)Nz/status/204r   F)
r4   r6   r   r  r  r   rE   rF   r  r   r   s      r=   'test_response_json_when_content_is_Nonez4TestRequests.test_response_json_when_content_is_NoneW  s\    LL/0
#yy   ]]:&FFH '&&s   A22A;c                     t        j                         }t        j                  d      |_        |j                  j                  rJ |j                          |j                  j                  sJ y)zTest `close` call for non-urllib3-like raw objects.
        Should work when `release_conn` attr doesn't exist on `response.raw`.
        r   N)r4   r   r)   r   r  r  )r<   r   s     r=   "test_response_without_release_connz/TestRequests.test_response_without_release_connb  sN       "$$V,88??""

xxr?   c                     d} |d      }t        j                  d      }t        j                  d|||      }|j	                         }d|j
                  v sJ d|j
                  vsJ y)	zwEnsure that a byte stream with size 0 will not set both a Content-Length
        and Transfer-Encoding header.
        ra  r:   r?   r_   rf  rN   r   rX   Nr   r   r4   rM   rO   r[   r<   r]   rf  rH   file_objrm   prepared_requests          r=   >test_empty_stream_with_auth_does_not_set_content_length_headerzKTestRequests.test_empty_stream_with_auth_does_not_set_content_length_headerl  sk      fo::c?VSt(C99;"&6&>&>>>>'7'?'????r?   c                     d} |d      }t        j                  d      }t        j                  d|||      }|j	                         }d|j
                  vsJ d|j
                  v sJ y)	zyEnsure that a byte stream with size > 0 will not set both a Content-Length
        and Transfer-Encoding header.
        ra  r:   s	   test datar_   r"  r   rX   Nr#  r$  s          r=   ;test_stream_with_auth_does_not_set_transfer_encoding_headerzHTestRequests.test_stream_with_auth_does_not_set_transfer_encoding_headerx  sl      fo::l+VSt(C99;"*:*B*BBBB#3#;#;;;;r?   c                     d dD        } |d      }t        j                  d||      }|j                         }d|j                  v sJ d|j                  vsJ y)	zEnsure that requests with a generator body stream using
        Transfer-Encoding: chunked, not a Content-Length header.
        c              3       K   | ]  }|  y wrC   r   r   r  s     r=   r   zVTestRequests.test_chunked_upload_does_not_set_content_length_header.<locals>.<genexpr>  s     .-a-r   )   a   b   cr:   r_   rh   r   rX   Nrl   )r<   r]   rN   rH   rm   r&  s         r=   6test_chunked_upload_does_not_set_content_length_headerzCTestRequests.test_chunked_upload_does_not_set_content_length_header  sb     /-.foVSt499;"&6&>&>>>>'7'?'????r?   c                 H    |d      }t        d|i      } |d|z        }t        d|i      } |d|z        }|||g} G d dt        j                        } |       }	|	j                  |d         }
t	        |
j
                        d	k(  sJ |
j                  d
k(  sJ |
j
                  d   j                  dk(  sJ |
j
                  d   j                  sJ |
j
                  d   j                  d
k(  sJ |
j
                  d   j                  rJ |
j                  |d	   k(  sJ y)a  Tests a custom mixin to overwrite ``get_redirect_target``.

        Ensures a subclassed ``requests.Session`` can handle a certain type of
        malformed redirect responses.

        1. original request receives a proper response: 302 redirect
        2. following the redirect, a malformed response is given:
            status code = HTTP 200
            location = alternate url
        3. the custom session catches the edge case and follows the redirect
        r4  r   zresponse-headers?%srH   zredirect-to?%sc                       e Zd Zd Zy)FTestRequests.test_custom_redirect_mixin.<locals>.CustomRedirectSessionc                     |j                   r|j                  d   S |j                  j                  d      }|r||j                  k7  r|S y )Nr   )r   r[   r6   rH   )r<   r   r   s      r=   get_redirect_targetzZTestRequests.test_custom_redirect_mixin.<locals>.CustomRedirectSession.get_redirect_target  sD    ##<<
33<<++J7TXX!5#Or?   N)r  r  r  r5  r   r?   r=   CustomRedirectSessionr3    s    r?   r6  r   rT  r   r   r'   N)	r#   r4   r   r6   r   r   r   r   rH   )r<   r]   	url_finalquerystring_malformedurl_redirect_malformedquerystring_redirecturl_redirect	urls_testr6  r5   rm   s              r=   test_custom_redirect_mixinz'TestRequests.test_custom_redirect_mixin  s3    FO	 ):y*A B!()>AV)V!W(%1G)HI/2FFG"
			H$4$4 		 ()KK	!%199~"""}}###yy|''3...yy|''''yy|''3...99Q<++++uu	!$$$r?   )r  r  r  r  r>   rE   markparametrizer   r   r   rI   rS   r^   re   ri   rn   rs   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r   r"  r%  r(  r*  r/  r1  r<  r@  rD  rG  rX  r[  r]  r_  rh  r   ro  rq  r   rv  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r'  r,  r4  r6  skipifr(   rM  rQ  rS  rV  ra  rd  rj  rl  rn  rp  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  urllib3r  ProtocolErrorrC  r   DecodeErrorr   ReadTimeoutErrorr   rP  r  r  r  r!  r#  r&  r*  r,  r2  r5  rB  rM  rS  rV  rY  r[  r^  rb  rf  rj  rn  rr  r~  	bytearrayr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  xfailr  r  r  r  r  r   r'  r)  r0  r=  r   r?   r=   r0   r0   P   sg	   4
F [[/0,-9:./#././	
$ [[X73 83 [[X'JK4 L4 [[X'JK4 L496
 [[		
''	A=/4
 [[X'STC UC$(	*
<	V((((((;";.2$$)/&/
?)	3,@ 35*( [[U$@A$ B$$$$ [[__ 5 5 78		
QQN [[ .?!?3,j9	

)
)R0'0'=K [[	
II!8F("(5	'( B8"<',R8".2Q" [[eW%&gw'(gw'(eU^$E5>"	
	2	2
P

  [[J"L1<@"B'.-|<#T*$&"=tD +7&2  +-&2 	
2.32.$ [[T!H  6	62:9
0$ [[i i&&()gh		
$$5$
'E
9	01-Q"2504<$(3&( , * *	C#!?&
),& [[#--uw8LM++UW6JK00./R((%'3CD		
''
7'' ' '
*$	7,$)L
0@
T.@*
@ [[QZeU^$e,eU^$e,	
)) [[%&%&O$O$ee		
AA [[UOeFOIG%L	
AAB2 [[Wufi6G&HIB JBB555	(
8
X
&
 [[	
99"&+
/+9(F.9(0 [[&2!%%'4	



0*"## [[. .	;H
D
	
@
<	@*%r?   r0   c            	           e Zd Zej                  j                  d eddd       eddg       edd      f      d        Zd	 Zd
 Z	d Z
d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestCaseInsensitiveDictcidr  r  FooBAr)rK  r  )rL  r  )rX  rL  c                 <    t        |      dk(  sJ d|v sJ d|v sJ y )NrT  r  r  r  r<   rI  s     r=   	test_initz!TestCaseInsensitiveDict.test_init  s,     3x1}}||||r?   c                 X    t               }d|d<   |d   dk(  sJ t        |      dgk(  sJ y )Nr1  r  aCCEPT)r&   rB  rN  s     r=   test_docstring_examplez.TestCaseInsensitiveDict.test_docstring_example  s:    !#*H8} 2222CyXJ&&&r?   c                 J    t        ddd      }d|d<   t        |      dk(  sJ y )Nru   rv   ru   rv   ArT  r&   r   rN  s     r=   test_lenz TestCaseInsensitiveDict.test_len  s*    !#"67C3x1}}r?   c                 F    t        ddi      }|d   dk(  sJ |d   dk(  sJ y )NSpambluevalspamSPAMr%   rN  s     r=   test_getitemz$TestCaseInsensitiveDict.test_getitem  s5    !69"566{i'''6{i'''r?   c                     t               }d|d<   d|d<   d|d<   d|d<   |d   dk(  sJ |d   dk(  sJ t        |j                               dgk(  sJ y	)
z-__setitem__ should behave case-insensitively.onevalr[  twovalrY  redvalsPAMrZ  r\  N)r&   rB  r  rN  s     r=   test_fixes_649z&TestCaseInsensitiveDict.test_fixes_649  sm    !#FFFF6{i'''6{i'''CHHJF8+++r?   c                 T    t               }d|d<   |d= d|vsJ t        |      dk(  sJ y )NsomevalrY  sPamr[  r   rV  rN  s     r=   test_delitemz$TestCaseInsensitiveDict.test_delitem  s8    !#FKS   3x1}}r?   c                 ^    t               }d|d<   d|v sJ d|v sJ d|v sJ d|v sJ d|vsJ y )Nre  rY  r[  r\  rf  notspamr%   rN  s     r=   test_containsz%TestCaseInsensitiveDict.test_contains  sQ    !#F}}}}}}}}###r?   c                     t               }d|d<   d|d<   |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  dd      dk(  sJ y )Nr_  r[  rZ  r\  rf  ri  default)r&   r6   rN  s     r=   test_getz TestCaseInsensitiveDict.test_get  sw    !#FFwwv)+++wwv)+++wwv)+++wwy),	999r?   c                     t               }d|d<   |j                  ddi       |d   dk(  sJ t        ddd      }|j                  dd	d
       t        |      dk(  sJ |d   dk(  sJ |d   d	k(  sJ y )NrZ  r[  rf  
notbluevalr  r  rJ  
anotherfoo
anotherbar)fOObARrT  )r&   r  r   rN  s     r=   test_updatez#TestCaseInsensitiveDict.test_update  s    !#F

FL)*6{l***!%">?

<=>3x1}}5z\)))5z\)))r?   c                 Z    t        ddd      }|j                  ddi       |d   dk(  sJ y )Nr  r  )r  r  newfoo)r&   r  rN  s     r=   test_update_retains_unchangedz5TestCaseInsensitiveDict.test_update_retains_unchanged		  s4    !%">?

E8$%5zU"""r?   c                 l    t        ddd      }t        ddg      }t        t        |            |k(  sJ y )Nr[  eggs)rY  EggsrY  rz  )r&   	frozensetr  )r<   rI  r  s      r=   	test_iterz!TestCaseInsensitiveDict.test_iter	  s7    !66"BC&&)*c#t+++r?   c                     t        ddd      }t        ddd      }||k(  sJ |d= ||k7  sJ |dddk(  sJ |t               k7  sJ y )NrZ  ra  )r\  rz  )r[  ry  r[  )r&   object)r<   rI  othercids      r=   test_equalityz%TestCaseInsensitiveDict.test_equality	  sa    !9h"GH&	8'LMhVhy(;;;;fhr?   c                 z    t        ddi      }|j                  dd      dk(  sJ |j                  dd      dk(  sJ y )NrY  rZ  r[  ro  ri  )r&   
setdefaultrN  s     r=   test_setdefaultz'TestCaseInsensitiveDict.test_setdefault	  sC    !69"56~~fl3y@@@~~i6,FFFr?   c                     t        ddd      }t        d |j                         D              }t        ddg      }||k(  sJ y )Nr1  r4   r  
user-Agentc              3   &   K   | ]	  \  }}|  y wrC   r   )r   lowerkeyvs      r=   r   z;TestCaseInsensitiveDict.test_lower_items.<locals>.<genexpr>(	  s     I7H!87H   r0  r  )r&   r{  lower_items)r<   rI  keysetlowerkeysets       r=   test_lower_itemsz(TestCaseInsensitiveDict.test_lower_items!	  sM    !,(
 Is7HII< 89$$$r?   c                     t        ddd      }t        ddg      }t        d |j                         D              |k(  sJ t        |j                               |k(  sJ t        |      |k(  sJ y )Nr1  r4   r  r  r  c              3   &   K   | ]	  }|d      ywr   Nr   r,  s     r=   r   zATestCaseInsensitiveDict.test_preserve_key_case.<locals>.<genexpr>4	       3{!1{r  )r&   r{  rW  r  r<   rI  r  s      r=   test_preserve_key_casez.TestCaseInsensitiveDict.test_preserve_key_case,	  sr    !,(
 Hl343syy{33v===$...~'''r?   c                    t        ddd      }|j                  ddi       d|d<   t        ddg      }t        d |j                         D              |k(  sJ t        |j	                               |k(  sJ t        |      |k(  sJ y )Nr1  r4   r  r.  z
USER-AGENTc              3   &   K   | ]	  }|d      ywr  r   r,  s     r=   r   zFTestCaseInsensitiveDict.test_preserve_last_key_case.<locals>.<genexpr>B	  r  r  )r&   r  r{  rW  r  r  s      r=   test_preserve_last_key_casez3TestCaseInsensitiveDict.test_preserve_last_key_case8	  s    !,(
 	

H012&LHl343syy{33v===$...~'''r?   c                 f    t        ddd      }|j                         }||k(  sJ d|d<   ||k7  sJ y )Nr1  r4   r  Tchanged)r&   r  )r<   rI  cid_copys      r=   	test_copyz!TestCaseInsensitiveDict.test_copyF	  sE    !,(
 88:hIhr?   N)r  r  r  rE   r>  r?  r&   rO  rR  rW  r]  rc  rg  rj  rm  rt  rw  r|  r  r  r  r  r  r  r   r?   r=   rH  rH    s    [[e <= @AEu5	

'
(
	,$:	*#
,
G
	%
((
r?   rH  c                   l    e Zd ZdZd Zej                  j                  ddefde	ff      d        Z
d Zy)	TestMorselToCookieExpiresz8Tests for morsel_to_cookie when morsel contains expires.c                 Z    t               }d|d<   t        |      }|j                  dk(  sJ y)z4Test case where we convert expires from string time.zThu, 01-Jan-1970 00:00:01 GMTexpiresr'   Nr	   r   r  r<   morselr3  s      r=   test_expires_valid_strz0TestMorselToCookieExpires.test_expires_valid_strV	  s1     ;y!&)~~"""r?   zvalue, exceptiond   woopsc                     t               }||d<   t        j                  |      5  t        |       ddd       y# 1 sw Y   yxY w)z6Test case where an invalid type is passed for expires.r  N)r	   rE   rF   r   )r<   r7  rG   r  s       r=   test_expires_invalid_intz2TestMorselToCookieExpires.test_expires_invalid_int^	  s5     !y]]9%V$ &%%s	   :Ac                 T    t               }d|d<   t        |      }|j                  J y)z Test case where expires is None.Nr  r  r  s      r=   test_expires_nonez+TestMorselToCookieExpires.test_expires_nonel	  s/      y!&)~~%%%r?   N)r  r  r  __doc__r  rE   r>  r?  r  r  r  r  r   r?   r=   r  r  S	  sJ    B# [[)j!	
%%&r?   r  c                       e Zd ZdZd Zd Zy)TestMorselToCookieMaxAgez8Tests for morsel_to_cookie when morsel contains max-age.c                 p    t               }d|d<   t        |      }t        |j                  t              sJ y)z5Test case where a valid max age in seconds is passed.<   max-ageN)r	   r   r   r  intr  s      r=   test_max_age_valid_intz/TestMorselToCookieMaxAge.test_max_age_valid_inty	  s3     y!&)&..#...r?   c                     t               }d|d<   t        j                  t              5  t	        |       ddd       y# 1 sw Y   yxY w)z,Test case where a invalid max age is passed.r  r  N)r	   rE   rF   r  r   )r<   r  s     r=   test_max_age_invalid_strz1TestMorselToCookieMaxAge.test_max_age_invalid_str	  s5     #y]]9%V$ &%%s	   >AN)r  r  r  r  r  r  r   r?   r=   r  r  u	  s    B/%r?   r  c                      e Zd Zd Zej
                  j                  dd      d        Zej
                  j                  dd edd      f      d        Z	ej
                  j                  dd	 edd
      f      d        Z
ej
                  j                  dd ed
d      f      d        Zej
                  j                  dd ed
d
      f      d        Zd Zy)TestTimeoutc                     	 t        j                   |d      d       y # t         j                  j                  $ r*}d|j                  d   j                  d   v sJ Y d }~y d }~ww xY w)Ndelay/10g       @rt  zRead timed outr   )r4   r6   r  r   r   )r<   r]   r   s      r=   test_stream_timeoutzTestTimeout.test_stream_timeout	  sU    	9LL,c:""** 	9#qvvay~~a'8888	9s     A' A""A'ztimeout, error_text)))rU  rV  r   z(connect, read))r  zmust be an int, float or Nonec                     t        j                  t              5 }t        j                   |d      |       d d d        |t              v sJ y # 1 sw Y   xY w)Nr6   rt  )rE   rF   r  r4   r6   r#  )r<   r]   ru  
error_textr   s        r=   test_invalid_timeoutz TestTimeout.test_invalid_timeout	  sD     ]]:&!LL9 'SV### '&s   AAru  N)connectr  c                 `    t        j                   |d      |      }|j                  dk(  sJ y)a  Check that you can set None as a valid timeout value.

        To actually test this behavior, we'd want to check that setting the
        timeout to None actually lets the request block past the system default
        timeout. However, this would make the test suite unbearably slow.
        Instead we verify that setting the timeout to None does not prevent the
        request from succeeding.
        r6   rt  r   Nr  )r<   r]   ru  rm   s       r=   test_none_timeoutzTestTimeout.test_none_timeout	  s*     LL9}}###r?   )N皙?r  c                     	 t        j                   |d      |       t        j                  d       y # t        $ r Y y w xY w)Nr  rt  z#The recv() request should time out.)r4   r6   rE   r   r   )r<   r]   ru  s      r=   test_read_timeoutzTestTimeout.test_read_timeout	  s9    	LL,g>KK=> 		s   25 	A A)r  Nc                     	 t        j                  t        |       t        j                  d       y # t
        $ r.}t        |t              sJ t        |t              sJ Y d }~y d }~ww xY wNrt  z&The connect() request should time out.)	r4   r6   TARPITrE   r   r   r   r   r   )r<   ru  r   s      r=   test_connect_timeoutz TestTimeout.test_connect_timeout	  sR    	*LL1KK@A 	*a111a)))	*s   03 	A*$A%%A*)r  r  c                     	 t        j                  t        |       t        j                  d       y # t
        $ r Y y w xY wr  )r4   r6   r  rE   r   r   )r<   ru  s     r=   test_total_timeout_connectz&TestTimeout.test_total_timeout_connect	  s4    	LL1KK@A 		s   03 	??c                 X    t        j                  d |d            }|j                  sJ y)z0See: https://github.com/psf/requests/issues/2316s   GETr6   N)r4   rr   r  r   s      r=   test_encoded_methodsz TestTimeout.test_encoded_methods	  s#    VWU^4tttr?   )r  r  r  r  rE   r>  r?  r  Urllib3Timeoutr  r  r  r  r  r   r?   r=   r  r  	  s   9 [[	
$$
 [[Y~dQU/V(WX
$ Y
$ [[K3!GH [[K$!GH** [[Js EFr?   r  SendCallr  c                   $    e Zd Zd Zd Zd Zd Zy)RedirectSessionc                 J    || _         g | _        d| _        i | _        d| _        y )Nr   F)r:  callsr   r  	trust_env)r<   order_of_redirectss     r=   r  zRedirectSession.__init__	  s&    +
r?   c                 l    | j                   j                  t        ||             | j                         S rC   )r  r  r  r  r  s      r=   r   zRedirectSession.send	  s*    

(401""$$r?   c                 B   | j                   d   j                  d   }t        j                         }	 t	        | j
                  j                  d            |_        t        ddi      |_
        | j                         |_        ||_        |S # t        $ r
 d|_        Y Bw xY w)Nr  r   r   Locationr<  )r  r   r4   r   r  r:  popr   
IndexErrorr&   r[   
_build_rawr   rr   )r<   rr   rm   s      r=   r  zRedirectSession.build_response	  s    **R.%%a(	  2 21 56AM (S(9:	!	  	 AM	 s   )B BBc                 L    t        j                   d      }t        |dd        |S )Nrg   r   c                      | S rC   r   r   s    r=   r   z,RedirectSession._build_raw.<locals>.<lambda>	  s    dr?   )r)   r   )r<   strings     r=   r  zRedirectSession._build_raw	  s$    ""2&(:;r?   N)r  r  r  r  r   r  r  r   r?   r=   r  r  	  s    %r?   r  c                      ddi} t               }|j                  dd|        t        |j                  t              sJ y )NrY  r7  rU   zhttps://www.example.com/)rT   rH   r   )r"   rO   r   rP   r   )rP   rn  s     r=   test_json_encodes_as_bytesr  	  s;    7DAIIU :IFaffe$$$r?   c                    t        ddg      }t        j                  d | d            j                         }|j	                  |      }|j
                  j                  dk(  sJ |j                  d   t        |j
                  fi       k(  sJ |j                  ||      }ddd d di d}|D ]H  }|j
                  j                  d	k(  sJ t        |j
                  f|      }|j                  d   |k(  rHJ  y )
Nr   r   r_   r:   r  FT)r  r  r*  ru  r   r   rU   )
r  r4   rM   rO   r   rr   rT   r  r  r   )r]   r5   r   r0redirect_generatordefault_keyword_argsr   	send_calls           r=   #test_requests_are_updated_each_timer  	  s    sCj)GFGFO4<<>D	d	B::&&&=="** ;;;; 222t<  '&&%///h..02FG	}}R I--- 'r?   zvar,url,proxy))r  r   socks5://proxy.com:9876)https_proxyr  r  )	all_proxyr   r  )r  r  r  c                    t        j                         }t               }|j                  d|       | |i}t	        |      j
                  }t        di |5  |j                  |i       }||v sJ ||   |k(  sJ 	 d d d        y # 1 sw Y   y xY w)NrU   r  r   )r4   r   r"   rO   r   r   r,   r  )varrH   proxyr5   r   r  r   r   s           r=   $test_proxy_env_vars_override_defaultr  
  s      GDLL3L'5\Fc]!!F		#F	#))$3   v%''' 
$	#	#s   #BBrN   ))rT  r;  r   )r  rT  )rT  r  )r   r  c                     t               }|j                  dd| t                      |j                  t	        |       k(  sJ y)z^Ensure that the data argument will accept tuples of strings
    and properly encode them.
    rU   http://www.example.comrT   rH   rN   r}  N)r"   rO   r!   rP   r#   )rN   rn  s     r=   !test_data_argument_accepts_tuplesr  %
  sA     	AII2]_   66Yt_$$$r?   r  rU   r  zfoo=barr  r  r  )rT   rH   rN   r}  r  u$   http://www.example.com/üniçø∂ér  c                     t               }| r |j                  di |  |j                         }dD ]  }t        ||      t        ||      k(  rJ  y )N)rT   rH   r[   r5  rP   r}  r   )r"   rO   r  getattr)r  rn  r  attrs       r=   test_prepared_copyr  8
  sR    * 	A		F668DIq$74#6666 Jr?   c           	         ddl m} t        j                         }|j	                  dt         |ddg                   t        j                  t              5  |j                   | d             d d d        y # 1 sw Y   y xY w)	Nr   )RetryrA   rT  r  )r  status_forcelist)max_retriesz
status/500)
urllib3.utilr  r4   r   r?  r   rE   rF   r   r6   )r]   r  r   s      r=   test_urllib3_retriesr  U
  sY    "AGGI{u1PSu/UVW	z	"	gl#$ 
#	"	"s   A::Bc                     t        j                         }|j                  dt        dd             	 |j	                   | d             y # t
        $ r}dt        |      v sJ Y d }~y d }~ww xY w)NrA   r   )pool_connectionspool_maxsizez
status/200zPool is closed.)r4   r   r?  r   r6   r   r#  )r]   r   r   s      r=   #test_urllib3_pool_connection_closedr  _
  s]    AGGI{AAFG+	gl#$ + CF***+s   A 	A-A((A-c                   <   e Zd Zej                  j                  dddddj                         dfddj                         d	fd
dj                         dfdddf      d        Zej                  j                  dd      d        Zej                  j                  dde	ff      d        Z
ej                  j                  dd      d        Zej                  j                  ddddidfdddidfd ddid!fd!ddid!ff      d"        Zd# Zd$ Zd% Zd& Zd' Zd( Zd) Zd* Zy+),TestPreparingURLszurl,expected)zhttp://google.comzhttp://google.com/)"   http://ジェーピーニック.jphttp://xn--hckqz9bzb1cyrb.jp/)http://xn--n3h.net/r  r  r   )   http://straße.de/straße#http://xn--strae-oqa.de/stra%C3%9Fer  r  )"   http://Königsgäßchen.de/straße,http://xn--knigsgchen-b4a3dun.de/stra%C3%9Fer  r  )s   http://xn--n3h.net/r  )s7   http://[1200:0000:ab00:1234:0000:2552:7777:1313]:12345/7http://[1200:0000:ab00:1234:0000:2552:7777:1313]:12345/)r  r  c                     d }t        j                  d|      }|j                         } ||j                        |k(  sJ y )Nc                 |    t        j                  d|       D ]"  }| j                  ||j                               } $ | S )Nz%[a-fA-F0-9]{2})refindallreplaceupper)r   r;  s     r=   normalize_percent_encodezFTestPreparingURLs.test_preparing_url.<locals>.normalize_percent_encode
  s5     ZZ 2A6IIa+ 7Hr?   rU   r%  ry   )r<   rH   rz   r  rm   rn  s         r=   test_preparing_urlz$TestPreparingURLs.test_preparing_urlj
  s>    @	 U,IIK'.(:::r?   rH   )s   http://*.google.coms   http://*zhttp://*.google.comzhttp://*u   http://☃.net/c                     t        j                  d|      }t        j                  t         j                  j
                        5  |j                          d d d        y # 1 sw Y   y xY w)NrU   r%  )r4   rM   rE   rF   r  r   rO   r]  s      r=   test_preparing_bad_urlz(TestPreparingURLs.test_preparing_bad_url
  sC     U,]]8..99:IIK ;::s   AA(rr  z	http://:1c                     t        j                  |      5  t        j                   |d      d|i       d d d        y # 1 sw Y   y xY w)Nr   rH   rw   rD   )r<   r]   rH   rG   s       r=   test_redirecting_to_bad_urlz-TestPreparingURLs.test_redirecting_to_bad_url
  s1    ]]9%LL/E &%%s	    ?Azinput, expected))s)   http+unix://%2Fvar%2Frun%2Fsocket/path%7E'http+unix://%2Fvar%2Frun%2Fsocket/path~)z)http+unix://%2Fvar%2Frun%2Fsocket/path%7Er  )   mailto:user@example.orgmailto:user@example.org)r  r  )s   data:SSDimaUgUHl0aG9uIQ==zdata:SSDimaUgUHl0aG9uIQ==c                 t    t        j                  d|      }|j                         }|j                  |k(  sJ y)a%  
        This test validates that we correctly exclude some URLs from
        preparation, and that we handle others. Specifically, it tests that
        any URL whose scheme doesn't begin with "http" is left alone, and
        those whose scheme *does* begin with "http" are mutated.
        rU   r%  Nry   )r<   inputrz   rm   rn  s        r=   test_url_mutationz#TestPreparingURLs.test_url_mutation
  s4    @ U.IIKuu   r?   zinput, params, expecteds&   http+unix://%2Fvar%2Frun%2Fsocket/pathrY  r7  z0http+unix://%2Fvar%2Frun%2Fsocket/path?key=valuez&http+unix://%2Fvar%2Frun%2Fsocket/pathr  r  c                 v    t        j                  d||      }|j                         }|j                  |k(  sJ y)z
        Setting parameters for nonstandard schemes is allowed if those schemes
        begin with "http", and is forbidden otherwise.
        rU   )rH   rx   Nry   )r<   r  rx   rz   rm   rn  s         r=   'test_parameters_for_nonstandard_schemesz9TestPreparingURLs.test_parameters_for_nonstandard_schemes
  s5    < Uf=IIKuu   r?   c                     dt        d      i}t        j                  t        j                  j
                        5  t        j                   |d      |       d d d        y # 1 sw Y   y xY w)Nr  nanr:   r  )floatrE   rF   r4   r  InvalidJSONErrorr:   )r<   r]   rN   s      r=   test_post_json_nanz$TestPreparingURLs.test_post_json_nan
  sG    uU|$]]8..??@MM'&/5 A@@s   A""A+c                    t        j                   |d            }t        j                  t         j                  j
                        5 }|j                          d d d        t        j                  t              sJ t        |j                  t
              sJ |j                  t        |j                        vsJ y # 1 sw Y   exY wNzbytes/20)r4   r6   rE   rF   r  r   r   r   r7  r   r	  r#  r<   r]   rm   ri  s       r=   test_json_decode_compatibilityz0TestPreparingURLs.test_json_decode_compatibility
  s    LL,-]]8..>>?7FFH @'--)9:::'--999vvS////	 @?s   	B>>Cc                 (   t        j                   |d            }t        j                  t         j                  j
                        5 }|j                          d d d        j                  j                  |j                  k(  sJ y # 1 sw Y   /xY wr!  )
r4   r6   rE   rF   r  r   r   r7  docr	  r"  s       r=   "test_json_decode_persists_doc_attrz4TestPreparingURLs.test_json_decode_persists_doc_attr
  sd    LL,-]]8..>>?7FFH @}}  AFF*** @?s   	BBc                    t         j                  j                  d      }t         j                  j                  d      }t         j                  j                  d      }t         j                  j                  d      }t         j                  j                  d      }t         j                  j                  d      }|dk(  sJ |dk(  sJ |dk(  sJ |dk(  sJ |dk(  sJ |dk(  sJ y )N	TOO_EARLY	too_early	UNORDERED	unorderedUNORDERED_COLLECTIONunordered_collectioni  )r4   codesr6   )r<   r  r  r  r4r5r6s          r=   test_status_code_425z&TestPreparingURLs.test_status_code_425  s    ^^,^^,^^,^^,^^ 67^^ 67SyySyySyySyySyySyyr?   c                 .   d }t        j                         }t        j                         }t	        ||ddd      }|5 \  }}d| d| }|j                  |d	      }|j                  d
k(  sJ t        j                  t         j                  j                        5  |j                  |       d d d        |j                          d d d        dt        |j                  d   j                  j                        k(  sJ y # 1 sw Y   SxY w# 1 sw Y   GxY w)Nc                 @    t        | d       | j                  d       y Ng      ?rt  s;   HTTP/1.1 200 OK
Content-Length: 18

{ " K0" = " 0" 
r+   r   socks    r=   response_handlerzgTestPreparingURLs.test_different_connection_pool_for_tls_settings_verify_True.<locals>.response_handler      "45IIEr?   rU  %tests/certs/expired/server/server.pem%tests/certs/expired/server/server.keyhandlerwait_to_close_eventrequests_to_handle
cert_chainkeyfiler~  :Fr  r   rT  r4   r   	threadingEventr*   r6   r   rE   rF   r  r   r  r   r>  poolmanagerpools	r<   r9  r   close_serverr  rG  rH  rH   r  s	            r=   ;test_different_connection_pool_for_tls_settings_verify_TruezMTestPreparingURLs.test_different_connection_pool_for_tls_settings_verify_True  s    	  ($ , >;
 |dTF!D6*Cs5)B>>S((( x22;;<c
 =   C

:.::@@AAAA	 =< Vs$   ADC?-D?D	DDc                 2   d }t        j                         }t        j                         }t	        ||ddd      }|5 \  }}d| d| }|j                  |d	      }|j                  d
k(  sJ t        j                  t         j                  j                        5  |j                  |d	       d d d        |j                          d d d        dt        |j                  d   j                  j                        k(  sJ y # 1 sw Y   SxY w# 1 sw Y   GxY w)Nc                 @    t        | d       | j                  d       y r5  r6  r7  s    r=   r9  zvTestPreparingURLs.test_different_connection_pool_for_tls_settings_verify_bundle_expired_cert.<locals>.response_handler3  r:  r?   rU  r;  r<  r=  r~  rC  Fr  r   tests/certs/expired/ca/ca.crtrT  rD  rI  s	            r=   Jtest_different_connection_pool_for_tls_settings_verify_bundle_expired_certz\TestPreparingURLs.test_different_connection_pool_for_tls_settings_verify_bundle_expired_cert0  s    	  ($ , >;
 |dTF!D6*Cs5)B>>S((( x22;;<c"AB =   C

:.::@@AAAA	 =< Vs$   ADD/DD
	DDc                    d }t        j                         }t        j                         }t	        ||ddd      }|5 \  }}d| d| }|j                  |d	      }|j                  d
k(  sJ |j                  |d	      }	|	j                  d
k(  sJ |j                          d d d        dt        |j                  d   j                  j                        k(  sJ y # 1 sw Y   ;xY w)Nc                 @    t        | d       | j                  d       y r5  r6  r7  s    r=   r9  zxTestPreparingURLs.test_different_connection_pool_for_tls_settings_verify_bundle_unexpired_cert.<locals>.response_handlerT  r:  r?   rU  z#tests/certs/valid/server/server.pemz#tests/certs/valid/server/server.keyr=  r~  rC  Fr  r   ztests/certs/valid/ca/ca.crtrT  )r4   r   rE  rF  r*   r6   r   r  r   r>  rG  rH  )
r<   r9  r   rJ  r  rG  rH  rH   r  r  s
             r=   Ltest_different_connection_pool_for_tls_settings_verify_bundle_unexpired_certz^TestPreparingURLs.test_different_connection_pool_for_tls_settings_verify_bundle_unexpired_certQ  s    	  ($ , <9
 |dTF!D6*Cs5)B>>S(((s#@AB>>S(((  C

:.::@@AAAA Vs   A$CC%c           	        
 d 

fd}t        j                         }t        j                         }t	        ||ddddd      }d}|5 \  }}d	| d
| }|j                  |d|      }	|	j                  dk(  sJ t        j                  t         j                  j                        5  |j                  ||       d d d        |j                          d d d        
J y # 1 sw Y   &xY w# 1 sw Y   xY w)Nc                 b    | j                         t        | d       | j                  d       y r5  )getpeercertr+   r   )r8  client_certs    r=   r9  z\TestPreparingURLs.test_different_connection_pool_for_mtls_settings.<locals>.response_handlert  s-    **,K"45IIEr?   rT  r;  r<  TrN  )r>  r?  r@  rA  rB  
mutual_tlscacert)z"tests/certs/mtls/client/client.pemz"tests/certs/mtls/client/client.keyr~  rC  F)r  r*  r   r)  )r4   r   rE  rF  r*   r6   r   rE   rF   r  r   r  )r<   r9  r   rJ  r  r*  rG  rH  rH   r  rV  s             @r=   0test_different_connection_pool_for_mtls_settingszBTestPreparingURLs.test_different_connection_pool_for_mtls_settingsq  s    	  ($ , >;2

 |dTF!D6*Cs5t4B>>S(((x22;;<c% =  &&&	 =<	 Vs%   AC*%C9C*C'	#C**C3N)r  r  r  rE   r>  r?  r   r  r  r   r  r  r  r  r#  r&  r2  rK  rO  rR  rY  r   r?   r=   r  r  i
  s   [[7S:188:<[\P+2245
 5;;=> </	
>
;?>
; [[	
		
 [[-j0I/KLF MF [[	
2	!32	! [[! : B 9 B + ) * )!	
2!32!6
0+B>BBB@%'r?   r  c                      t         j                  j                  ddd      } t        j                  t        j
                  |             }t        |       t        |      k(  sJ y )Nz
Extra datazH{"responseCode":["706"],"data":null}{"responseCode":["706"],"data":null}$   )r4   r  r   r  r  r`  repr)json_decode_errordeserialized_errors     r=   7test_json_decode_errors_are_serializable_deserializabler_    sW     ++;;R

  fll3D&EF!"d+=&>>>>r?   )br  r   r
  r   r   rg  r  r	  rE  rD  unittestr   rE   rA  r  r   r  r4   requests.adaptersr   requests.authr   r   requests.compatr   r	   r
   r   r   r   r   requests.cookiesr   r   requests.exceptionsr   r   r   r   r   r   r   r   r   r   r   r   r   r   rP  r   r    requests.hooksr!   requests.modelsr"   r#   requests.sessionsr$   requests.structuresr&   rg   r(   compatr)   testserver.serverr*   r+   r  r,   r  r  sslr.   rA  ImportError	pyopensslrB  AttributeErrorr0   rH  r  r  r  
namedtupler  r  r  r  r>  r?  r  r  r  r  r  r  r_  r   r?   r=   <module>rq     s(      	  	  	      2  ) 9   C    = P P ( 6 2 3   @ # 
 %NM
i!% i!%XCT Tn& &D% %*B BJ ";!!*.@A* @%.* 
(
( 
%% +"_		
 +"_u~	
 !GH(7)(7%+m' m'`	?gZ  N  Ms$   	G G$ G! G!$G/.G/