
    8'hE                       d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d dlmZ d dlmZ d dlZd dlZd dlZd d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d Z 	 ddede
e   ddddfdZ!d Z"d Z#d Z$d Z%ejL                  jO                  d d! eejP                  d"#       eejP                  d"d$%      f ejR                  d&       ejR                  d&      fg      d'        Z*ejL                  jO                  d d( ejR                  d)      f ejR                  d)      d(fg      d*        Z+d+ Z,ejL                  jO                  d d! eejP                  d"#       eejP                  d"d$%      f ejR                  d&       ejR                  d&      fg      d,        Z-ejL                  jO                  d d! eejP                  d"#       eejP                  d"d$%      f ejR                  d&       ejR                  d&      fg      d-        Z.d. Z/ejL                  jO                  d/ejP                  d0fi ejP                  d0fi d1fejP                  d0fi ejP                  d2fi d3fejP                  d0fi ej`                  d0fi d3fejP                  d0fd4d1iejP                  d0fi d1fg      d5        Z1d6 Z2d7 Z3d8 Z4d9 Z5d: Z6d; Z7d< Z8d= Z9d> Z:d? Z;d@ Z<dA Z=dB Z>dC Z?dD Z@dE ZAdF ZBdG ZCdH ZDdI ZEdJ ZFdK ZGdL ZHdM ZIdN ZJdO ZKdP ZLdQ ZM G dR dS      ZNdT ZOdU ZPej                  dV        ZRej                  dW        ZSejL                  j                  dXdY       G dZ d[             ZUd\ ZVd] ZWd^ ZXd_ ZYd` ZZda Z[ejL                  jO                  dbdc      ejL                  jO                  dddc      de               Z\df Z]dg Z^dh Z_di Z`dj Zadk Zbdl Zcdm Zddn Zedo Zfdp Zgdq Zhdr Zids Zjdt Zkdu Zldv Zmdw Zndx Zody Zpdz Zqd{ Zrd| Zsd} Ztd~ Zud Zvd Zw G d d      Zxd Zyd ZzejL                  jO                  dd      d        Z{d Z|ejL                  jO                  dd      d        Z}d Z~d Zd Zd Zd ZejL                  jO                  dejP                  dd#dfej`                  dddddfej                  dddddiddiddfg      d        Zd ZejL                  jO                  dg d      d        Zd Zd ZejL                  j                  d        Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Zd Zd Z G d d      Zd Zy)    N)BufferedReader)BytesIO)Any)List)Optional)Mock)patch)ChunkedEncodingError)ConnectionError)	HTTPError)
RetryError)RetryBaseResponse)Call)CallbackResponse)PassthroughResponse)Response)matchers)
registriesc                      t        t        j                  j                               dk(  sJ t        t        j                        dk(  sJ y )Nr   )len	responsesmock
registeredcalls     Z/var/www/html/trade_iq/venv/lib/python3.12/site-packages/responses/tests/test_responses.pyassert_resetr        s9    y~~((*+q000y1$$$r   respbodycontent_typezOptional[str]returnc                     | j                   dk(  sJ | j                  dk(  sJ || j                  d   |k(  sJ d| j                  vsJ | j                  |k(  sJ y )N   OKContent-Type)status_codereasonheaderstext)r!   r"   r#   s      r   assert_responser-   %   sk     s""";;$||N+|;;;T\\11199r   c                     t        | d      sJ d       t        | j                  d      sJ d       t        | j                  d      |k(  sJ d       y )NrequestzMissing requestparamsz3Missing params on request that responses should addzIncorrect parameters)hasattrr/   getattr)r!   expecteds     r   assert_paramsr4   1   s\    4#6%66#h =<=  4<<*h6N8NN6r   c                  R    t         j                  d        }  |         t                y )Nc                     t        j                  t         j                  dd       t        j                  d      } t        | d       t        t         j                        dk(  sJ t         j                  d   j                  j                  dk(  sJ t         j                  d   j                  j                  dk(  sJ t        j                  d      } t        | d       t        t         j                        d	k(  sJ t         j                  d   j                  j                  d
k(  sJ t         j                  d   j                  j                  dk(  sJ y Nhttp://example.com   testr"   test   r   http://example.com/http://example.com?foo=bar   http://example.com/?foo=bar)r   addGETrequestsgetr-   r   r   r/   urlresponsecontentr!   s    r   runztest_response.<locals>.run:   s   imm%9H||01f%9??#q(((q!))--1FFFFq!**22g===||89f%9??#q(((q!))--1NNNNq!**22g===r   r   activater    rI   s    r   test_responserM   9   s&    > > ENr   c                  R    t         j                  d        }  |         t                y )Nc                      d} t        j                  t         j                  | dd       t        j                  |       }t        |d       y )Nz,http://example.org/foo.bar%3D%2F%28%29%5B%5Dzit worksr&   r"   statusr   rA   rB   rC   rD   r-   rE   r!   s     r   rI   z"test_response_encoded.<locals>.runN   s7     =immSz#F||C j)r   rJ   rL   s    r   test_response_encodedrT   M   s&    * * ENr   c                  R    t         j                  d        }  |         t                y )Nc                      t        j                  t        j                  t         j                  d             t	        j
                  d      } t        | d       t        t         j                        dk(  sJ t         j                  d   j                  j                  dk(  sJ t	        j
                  d      } t        | d       t        t         j                        dk(  sJ t         j                  d   j                  j                  d	k(  sJ y )
Nr8   methodrE    r<   r   r=   r>   r?   r@   )r   rA   r   rB   rC   rD   r-   r   r   r/   rE   rH   s    r   rI   z(test_response_with_instance.<locals>.run[   s    imm9MN	
 ||01b!9??#q(((q!))--1FFFF||89b!9??#q(((q!))--1NNNNr   rJ   rL   s    r   test_response_with_instancerZ   Z   s(    O O ENr   zoriginal,replacement)http://example.com/twor[   r[   rW   testtworX   rE   r"   zhttp://example\.com/twoc                 \     t         j                   fd       } |        t                y )Nc                     t        j                  t         j                  dd       t        t              rt        j                         n&t        j                  t         j                  d       t        j                  t         j                  dd       t        j                  t         j                  t        j                  d      d       t        t              rt        j                         n&t        j                  t         j                  d       t        j                  d	      } t        | d       y )
Nhttp://example.com/onetest1r:   test2http://example.com/threetest3http://example\.com/fourr\   r[   )r   rA   rB   
isinstancer   recompilereplacerC   rD   r-   r!   originalreplacements    r   rI   ztest_replace.<locals>.run   s    imm%=GLh-MM(#MM)--@imm%?gNMM2::&AB	
 k<0k*imm[yI||45i(r   rJ   rk   rl   rI   s   `` r   test_replacern   n   s)    " ) )* ENr   r`   zhttp://example\.com/onec                 \     t         j                   fd       } |        t                y )Nc                  *   t        j                  t         j                         t        j                  t
              5 } t        j                  t         j                         d d d        dz  t         j                        v sJ y # 1 sw Y   &xY w)Nz%Response is not registered for URL %s)	r   rA   rB   pytestraises
ValueErrorri   strvalue)excinfork   rl   s    r   rI   ztest_replace_error.<locals>.run   sr    immX.]]:& 	:'imm[9	:6DMMI
 
 	
 
	: 	:s   %B		BrJ   rm   s   `` r   test_replace_errorrw      s)     
 
 ENr   c                  R    t         j                  d        }  |         t                y )Nc                  J   t        j                  t        t         j                  d             t	        j
                  t              5 } t        j                  t        t         j                  d             d d d        dt         j                        v sJ y # 1 sw Y   #xY w)Nr`   rW   r[   z9Response is not registered for URL http://example.com/two)
r   rA   r   rB   rq   rr   rs   ri   rt   ru   rv   s    r   rI   z/test_replace_response_object_error.<locals>.run   s~    himm9QRS]]:& 	'	3KL	 KcMMO
 
 	
 
		 	s   /BB"rJ   rL   s    r   "test_replace_response_object_errorr{      s&    
 
 ENr   c                 \     t         j                   fd       } |        t                y )Nc                     t        j                  t         j                  dd       t        t              rt        j                         n&t        j                  t         j                  d       t        t              rt        j
                         n&t        j
                  t         j                  d       t        j                  d      } t        | d       y )Nr`   ra   r:   rb   r\   r[   	r   rA   rB   rf   r   upsertrC   rD   r-   rj   s    r   rI   z test_upsert_replace.<locals>.run   s    imm%=GLh-MM(#MM)--@k<0[)Y]]KiH||45i(r   rJ   rm   s   `` r   test_upsert_replacer      s)    " ) )  ENr   c                 X    t         j                  fd       } |        t                y )Nc                  ,   t        j                  t         j                  dd       t        t              rt        j
                         n&t        j
                  t         j                  d       t        j                  d      } t        | d       y )Nr`   ra   r:   r\   r[   r~   )r!   rl   s    r   rI   ztest_upsert_add.<locals>.run   s_    imm%=GLk<0[)Y]]KiH||45i(r   rJ   rm   s    ` r   test_upsert_addr      s)    " 	) 	) ENr   c                  R    t         j                  d        }  |         t                y )Nc                     t        j                  t         j                  d       t        j                  t         j                  d       t        j                  t         j                  d       t        j                  t         j                  t        j                  d             t        j                  t         j                  t        j                  d             t        j
                          t        j                  t         j                  d       t        j                  t        t         j                  d             t        j                  t         j                  t        j                  d             t        j                  t              5  t        j                  d       d d d        t        j                  d       t        j                  t              5  t        j                  d       d d d        t        j                  d       t        j                  t              5  t        j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   bxY w# 1 sw Y   y xY w)	Nzhttp://example.com/zeror`   r[   zhttp://example\.com/threere   rW   rc   zhttp://example.com/four)r   rA   rB   rg   rh   purgeremover   rq   rr   r   rC   rD   r   r   r   rI   ztest_remove.<locals>.run  sr   imm%>?imm%=>imm%=>immRZZ0L%MNimmRZZ0K%LM

(@A<UVW

3N(OP]]?+ 	4LL23	4-.]]?+ 	3LL12	3/0]]?+ 	4LL23	4 	4	4 	4	3 	3	4 	4s$   II)I II I)rJ   rL   s    r   test_remover     s&    4 4( ENr   z$args1,kwargs1,args2,kwargs2,expectedaTbFmatch_querystringc                 T    t        | i |}t        |i |}||k(  |u sJ ||k7  |usJ y Nr   )args1kwargs1args2kwargs2r3   o1o2s          r   test_response_equalityr     sF      
u	(	(B	u	(	(B"H!!!"HX%%%r   c                  b    t        t        j                  d      } d}| |k(  du sJ | |k7  du sJ y )Nr   rW   rt   FT)r   r   rB   )r   r   s     r   (test_response_equality_different_objectsr   5  s;    	Y]]	4B	B"H"Hr   c                  R    t         j                  d        }  |         t                y )Nc                     t        j                  t         j                  d       t        j                  t
              5  t        j                  d       d d d        t        t         j                        dk(  sJ t         j                  d   j                  j                  dk(  sJ t        t         j                  d   j                        t
        u sJ t         j                  d   j                  j                  sJ y # 1 sw Y   xY w)Nr8   zhttp://example.com/foor<   r   )r   rA   rB   rq   rr   r   rC   rD   r   r   r/   rE   typerF   r   r   r   rI   z"test_connection_error.<locals>.run=  s    imm%9:]]?+ 	3LL12	3 9??#q(((q!))--1IIIIIOOA&//0OCCCq!**2222	3 	3s   C>>DrJ   rL   s    r   test_connection_errorr   <  s&    	3 	3 ENr   c                  R    t         j                  d        }  |         t                y )Nc                     d} t        j                  t         j                  | dd       t        j                  d      }t        |d       t        j                  d      }t        |d       t        j                  d      }t        |d       y )Nz!http://example.com?test=1&foo=barTr9   )r   r"   r;   z!http://example.com?foo=bar&test=1z"http://example.com/?foo=bar&test=1rR   rS   s     r   rI   z#test_match_querystring.<locals>.runN  sh    1immSDwO||?@f%||?@f%||@Af%r   rJ   rL   s    r   test_match_querystringr   M  s&    & & ENr   c                  R    t         j                  d        }  |         t                y )Nc                  \   t        j                  t         j                  ddd       t        j                  d      } t        | d       t        j                  d      } t        | d       t        j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY w)Nr8   r9   Tr"   r   r;   r=   zhttp://example.com?query=foo	r   rA   rB   rC   rD   r-   rq   rr   r   rH   s    r   rI   z)test_match_querystring_empty.<locals>.run^  s    MM/gQU	
 ||01f%||12f%]]?+ 	9LL78	9 	9 	9s   B""B+rJ   rL   s    r   test_match_querystring_emptyr   ]  s&    	9 	9 ENr   c                  R    t         j                  d        }  |         t                y )Nc                      t        j                  t         j                  dd       t        j                  t
              5  t        j                  d       d d d        y # 1 sw Y   y xY w)Nzhttp://example.com/?test=1Tr   http://example.com/foo/?test=2r   rA   rB   rq   rr   r   rC   rD   r   r   r   rI   z)test_match_querystring_error.<locals>.runo  sJ    MM74	
 ]]?+ 	;LL9:	; 	; 	;s    AA(rJ   rL   s    r   test_match_querystring_errorr   n  s&    ; ; ENr   c                  R    t         j                  d        }  |         t                y )Nc                  p   t        j                  t         j                  t        j                  d      dd       t        j                  d      } t        | d       t        j                  t         j                  t        j                  d      dd       t        j                  d	      } t        | d       y
)^Note that `match_querystring` value shouldn't matter when passing a
        regular expression http://example\.com/foo/\?test=1ra   Tr   zhttp://example.com/foo/?test=1 http://example\.com/foo/\?test=2rb   Fr   N)r   rA   rB   rg   rh   rC   rD   r-   rH   s    r   rI   z)test_match_querystring_regex.<locals>.run}  s    
 	MMJJ:;"		
 ||<=g&MMJJ:;#		
 ||<=g&r   rJ   rL   s    r   test_match_querystring_regexr   |  s&    ' '0 ENr   c                  R    t         j                  d        }  |         t                y )Nc                     t        j                  t         j                  t        j                  d      d       t        j                  t              5  t        j                  d       ddd       t        j                  t         j                  t        j                  d      d       t        j                  t              5  t        j                  d       ddd       y# 1 sw Y   zxY w# 1 sw Y   yxY w)	r   r   Tr   zhttp://example.com/foo/?test=3Nr   Fzhttp://example.com/foo/?test=4)
r   rA   rB   rg   rh   rq   rr   r   rC   rD   r   r   r   rI   z/test_match_querystring_error_regex.<locals>.run  s    
 	MMJJ:;"	
 ]]?+ 	;LL9:	; 	MMJJ:;#	
 ]]?+ 	;LL9:	; 	;	; 	;	; 	;s   C"C."C+.C7rJ   rL   s    r   "test_match_querystring_error_regexr     s&    ; ;, ENr   c                  R    t         j                  d        }  |         t                y )Nc                     t        j                  t         j                  dd       t        j                  d      } t        | d       t        j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY w)Nzhttp://example.com?test=1r9   r:   r;   zhttp://example.com/?test=2r   rH   s    r   rI   z2test_match_querystring_auto_activates.<locals>.run  s^    imm%@wO||78f%]]?+ 	7LL56	7 	7 	7s   !B  B	rJ   rL   s    r   %test_match_querystring_auto_activatesr     s&    7 7 ENr   c                  R    t         j                  d        }  |         t                y )Nc                  \   t        j                  t         j                  dd       t        j                  t
              5  t        j                  d       d d d        t        j                  t
              5  t        j                  d       d d d        y # 1 sw Y   AxY w# 1 sw Y   y xY w)Nzhttp://example.com?foo=1&bar=2r9   r:   zhttp://example.com/?foo=1&baz=2zhttp://example.com/?bar=2&fez=1r   r   r   r   rI   z/test_match_querystring_missing_key.<locals>.run  sz    imm%EGT]]?+ 	<LL:;	< ]]?+ 	<LL:;	< 	<	< 	<	< 	<s    B7B"B"B+rJ   rL   s    r   "test_match_querystring_missing_keyr     s&    < < ENr   c                  R    t         j                  d        }  |         t                y )Nc                      d} t        j                  t         j                  | d       t        j                  |       }t        |d       y )Nr=   r;   r:   rR   rS   s     r   rI   z$test_accept_string_body.<locals>.run  s3    #immSv6||C f%r   rJ   rL   s    r   test_accept_string_bodyr     s&    & & ENr   c                  R    t         j                  d        }  |         t                y )Nc                  4   d} d}t        j                  t         j                  |ddi       t        j                  |      }t        |d|        d}t        j                  t         j                  |g        t        j                  |      }t        |d|        y )	Napplication/jsonr=   messagesuccessjson{"message": "success"}http://example.com/1/[]rR   r#   rE   r!   s      r   rI   z"test_accept_json_body.<locals>.run  ss    )#immS	9/EF||C 6E%immSr2||C dL1r   rJ   rL   s    r   test_accept_json_bodyr     s&    2 2 ENr   c                  R    t         j                  d        }  |         t                y )Nc                      d} t        j                  t         j                  | dd        t        j                  |       }t        |dd        y )Nr=   r;   )r"   r#   r#   rR   rS   s     r   rI   z!test_no_content_type.<locals>.run  s7    #immSvDI||C f48r   rJ   rL   s    r   test_no_content_typer     s&    9 9 ENr   c                  R    t         j                  d        }  |         t                y )Nc                      d} t        j                  t         j                  | dd       t        j                  |       }|j
                  dk(  sJ |j                  J y )Nr=   r;   i  rP   )r   rA   rB   rC   rD   r)   r*   rS   s     r   rI   z'test_arbitrary_status_code.<locals>.run  sO    #immSvcB||C 3&&&{{"""r   rJ   rL   s    r   test_arbitrary_status_coder     s&    # # ENr   c                  R    t         j                  d        }  |         t                y )Nc                  "   d} t        d      }t        j                  t        j                  | |       t	        j
                  t               5 }t        j                  |        d d d        t        j                        dk(  sJ y # 1 sw Y   $xY w)Nr8   z
HTTP Error)
r   r   rA   rB   rq   rr   rC   rD   rt   ru   )rE   	exceptionHEs      r   rI   z1test_throw_connection_error_explicit.<locals>.run
  sl    "l+	immS)4]]9% 	LL	 288},,,	 	s   BBrJ   rL   s    r   $test_throw_connection_error_explicitr   	  s&    - - ENr   c                      ddddddddfd	t         j                  fd
       }  |         t                y )N   test callback  Bad Requestbarr   13)foor(   Content-Lengthr=   c                     fS r   r   _requestr"   r+   rQ   s    r   request_callbackz'test_callback.<locals>.request_callback$      w$$r   c                     t        j                  t         j                         t        j                        } | j
                  dk(  sJ | j                  k(  sJ | j                  k(  sJ d| j                  j	                  d      k(  sJ d| j                  j	                  d      k(  sJ d| j                  j	                  d      k(  sJ y )Ntest callbackr   r   r   r(   r   r   	r   add_callbackrB   rC   rD   r,   r)   r*   r+   r!   r*   r   rQ   rE   s    r   rI   ztest_callback.<locals>.run'  s    y}}c3CD||C yyO+++6))){{f$$$((////!T\\%5%5n%EEEEt||''(89999r   rJ   rI   r"   r+   r*   r   rQ   rE   s    @@@@@@r   test_callbackr     sT    DFF*G
  C% : : ENr   c                  Z   t        j                         5  t        j                   ddd       t        j                         5  t        j                   ddd       t        j                         5  t        j
                   ddd       y# 1 sw Y   dxY w# 1 sw Y   CxY w# 1 sw Y   yxY w)zPValidates that deprecation warning is raised when package attributes are called.N)rq   deprecated_callr   assert_all_requests_are_firedpassthru_prefixestargetr   r   r   "test_deprecated_package_attributesr   6  s     
			! 0//0 
			! $##$ 
			!  0 0$ $ s#   B	B/B!	BB!B*c                      t        j                         5  t        t        j                  dd d       d d d        y # 1 sw Y   y xY w)NrE   c                     | S r   r   xs    r   <lambda>z:test_callback_deprecated_stream_argument.<locals>.<lambda>E       r   Fstreamrq   r   r   r   rB   r   r   r   (test_callback_deprecated_stream_argumentr   C  s9    				! J{5IJ J J	   =Ac                      t        j                         5  t        t        j                  dd d       d d d        y # 1 sw Y   y xY w)NrE   c                     | S r   r   r   s    r   r   zEtest_callback_deprecated_match_querystring_argument.<locals>.<lambda>J  r   r   Fr   r   r   r   r   3test_callback_deprecated_match_querystring_argumentr   H  s9    				! U{eTU U Ur   c                  $   dddddddidfd	t         j                  fd
       } t        j                         5  t        j                  d        |         ddd       t                y# 1 sw Y   t                yxY w)z
    Test to ensure that by default 'match_querystring' in 'add_callback' is set to False
    and does not raise deprecation
    see: https://github.com/getsentry/responses/issues/464 and related PR
    r   r&   worldz
a big test)hellozI amr   r   r=   c                     fS r   r   r   s    r   r   zGtest_callback_match_querystring_default_false.<locals>.request_callbackY  r   r   c                      t        j                  t         j                  d        t        j                        } | j
                  dk(  sJ | j                  k(  sJ d| j                  v sJ y )Nr   r0   r   r   )r   r   rB   rC   rD   r,   r)   r+   )r!   r0   r   rQ   rE   s    r   rI   z:test_callback_match_querystring_default_false.<locals>.run\  se    y}}c3CRVW||C/yyO+++6)))$$$r   errorN)r   rK   warningscatch_warningssimplefilterr    )rI   r"   r+   r0   r   rQ   rE   s    @@@@@@r   -test_callback_match_querystring_default_falser  M  s     DF5FenG
C% % % 
	 	 	" g& N	 Ns   A<<Bc                      t               dfdt        j                  fd       }  |         t                y )Nr=   c                     S r   r   )r   results    r   r   z8test_callback_exception_result.<locals>.request_callbacko  s    r   c                      t        j                  t         j                         t        j                  t
              5 } t        j                         d d d         j                  u sJ y # 1 sw Y   xY wr   	r   r   rB   rq   rr   	ExceptionrC   rD   ru   )er   r  rE   s    r   rI   z+test_callback_exception_result.<locals>.runr  s]    y}}c3CD]]9% 	LL	 ww&   	 	    A//A8r  r   rK   r    )rI   r   r  rE   s    @@@r   test_callback_exception_resultr  k  s:    [F
C ! ! ENr   c                      t               dfdt        j                  fd       }  |         t                y )Nr=   c                     di fS )Nr&   r   )r   r"   s    r   r   z6test_callback_exception_body.<locals>.request_callback  s    B}r   c                      t        j                  t         j                         t        j                  t
              5 } t        j                         d d d         j                  u sJ y # 1 sw Y   xY wr   r
  )r  r"   r   rE   s    r   rI   z)test_callback_exception_body.<locals>.run  s[    y}}c3CD]]9% 	LL	 ww$	 	r  r  )rI   r"   r   rE   s    @@@r   test_callback_exception_bodyr    s:    ;D
C   ENr   c                      dddddidfdt         j                  fd       }  |         t                y )	Nr   r   r   r   r   r=   c                     fS r   r   r   s    r   r   z7test_callback_no_content_type.<locals>.request_callback  r   r   c                  $   t        j                  t         j                  d        t        j                        } | j
                  dk(  sJ | j                  k(  sJ | j                  k(  sJ d| j                  v sJ d| j                  vsJ y )Nr   r   r   r(   r   r   s    r   rI   z*test_callback_no_content_type.<locals>.run  s    y}}c3CRVW||C yyO+++6))){{f$$$$$$T\\111r   rJ   r   s    @@@@@@r   test_callback_no_content_typer    sK    DFFenG
C% 2 2 ENr   c                  ^    d t         j                  fd       }  |         t                y )Nc                     dddidfS Nr&   r(   r      foor   r   s    r   r   z9test_callback_content_type_dict.<locals>.request_callback      /0
 	
r   c                      t        j                  dd       t        j                  d      } | j                  dk(  sJ | j
                  d   dk(  sJ y NrB   zhttp://mockhost/.foo)callbackr   content-typer   r   r   rC   rD   r,   r+   r!   r   s    r   rI   z,test_callback_content_type_dict.<locals>.run  P    u&<GWX||23yyE!!!||N+/AAAAr   rJ   rI   r   s    @r   test_callback_content_type_dictr&    0    
 B B ENr   c                  ^    d t         j                  fd       }  |         t                y )Nc                     dddidfS r  r   r  s    r   r   z0test_callback_matchers.<locals>.request_callback  r  r   c                     ddd} ddi}t        j                  t         j                  dt        j                  ||       g       t        j                  d| |	      }|j                  d
k(  sJ |j                  d   dk(  sJ y )Notherfieldssomedata	file_name
   Old World!http://httpbin.org/postr/  rE   matchr   r/  filesr   r!  r   )	r   r   POSTr   multipart_matcherrC   postr,   r+   )req_data	req_filesr!   r   s      r   rI   z#test_callback_matchers.<locals>.run  s    #X6 -0	NN)--ihGH%		
 }}6XYWyyE!!!||N+/AAAAr   rJ   r%  s    @r   test_callback_matchersr=    s0    
 B B ENr   c                  R    t         j                  d        }  |         t                y )Nc                  V   ddd} ddi}t        j                  t         j                  dt        j                  ||       gd 	       t        j                  t              5 }t        j                  ddd
d|       d d d        dt        j                        v sJ y # 1 sw Y   #xY w)Nr+  r,  r-  r0  r1  r2  r3  c                     dddidfS )Nr   r   rY   r   r   s    r   r   z:test_callback_matchers_fail.<locals>.run.<locals>.<lambda>  s    b	  r   r4  wrongr6  z"multipart/form-data doesn't match.)r   r   r8  r   r9  rq   rr   r   rC   r:  rt   ru   )r;  r<  excs      r   rI   z(test_callback_matchers_fail.<locals>.run  s    #X6 -0	NN)--ihGH			
 ]]?+ 	sMM)%w7	 4s399~EEE	 	s   !BB(rJ   rL   s    r   test_callback_matchers_failrC    s(    F F. ENr   c                  ^    d t         j                  fd       }  |         t                y )Nc                     ddgdfS )Nr&   )r(   r   r  r   r  s    r   r   z:test_callback_content_type_tuple.<locals>.request_callback  s    12
 	
r   c                      t        j                  dd       t        j                  d      } | j                  dk(  sJ | j
                  d   dk(  sJ y r  r"  r#  s    r   rI   z-test_callback_content_type_tuple.<locals>.run  r$  r   rJ   r%  s    @r    test_callback_content_type_tuplerG    r'  r   c                  R    t         j                  d        }  |         t                y )Nc                     t        j                  d      } t        j                  t        j                  | d       t        j                  d      }t        |d       t        j                  d      }t        |d       t        j                  d      }t        |d       t        j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY w)	Nzhttps?://(.*\.)?example.comr9   r:   r8   r;   https://example.comzhttps://uk.example.comzhttps://uk.exaaample.com)rg   rh   r   rA   rB   rC   rD   r-   rq   rr   r   rS   s     r   rI   z(test_regular_expression_url.<locals>.run
  s    jj78immSw7||01f%||12f%||45f%]]?+ 	5LL34	5 	5 	5s   8CC rJ   rL   s    r   test_regular_expression_urlrK  	  s&    5 5  ENr   c                      t        dd      } t        j                  t              5  | j	                  t        j                                d d d        y # 1 sw Y   y xY w)NrB   z.com)r   rq   rr   NotImplementedErrorget_responserC   PreparedRequestrH   s    r   test_base_response_get_responserP    sG    v&D	*	+ 6(22456 6 6s   $AAc                      e Zd Z G d dej                  j
                        Z G d dej                  j
                        Z G d dej                  j
                        Ze	j                  j                  deeef      d        Zy	)
TestAdaptersc                   "     e Zd ZdZ fdZ xZS )TestAdapters.CustomAdapterzClassic custom adapter.c                 "    t        |   |i |S r   supersend)selfr   k	__class__s      r   rX  zTestAdapters.CustomAdapter.send)  s    7<(a((r   __name__
__module____qualname____doc__rX  __classcell__r[  s   @r   CustomAdapterrT  &  s    %	) 	)r   rc  c                   .     e Zd ZdZ	 	 	 	 	 d fd	Z xZS )"TestAdapters.PositionalArgsAdapterzCustom adapter that sends only positional args.
        See https://github.com/getsentry/responses/issues/642 for more into.
        c                 ,    t         |   ||||||      S r   rV  rY  r/   r   timeoutverifycertproxiesr[  s          r   rX  z'TestAdapters.PositionalArgsAdapter.send1  s     7<&$PPr   FNTNNr\  rb  s   @r   PositionalArgsAdapterre  ,  s%    	 		Q 		Qr   rm  c                   .     e Zd ZdZ	 	 	 	 	 d fd	Z xZS ),TestAdapters.PositionalArgsIncompleteAdapterzCustom adapter that sends only positional args.
        Not all arguments are forwarded to the send method.
                    See https://github.com/getsentry/responses/issues/642 for more into.
        c                 (    t         |   ||||      S r   rV  rg  s          r   rX  z1TestAdapters.PositionalArgsIncompleteAdapter.sendB  s     7<&AAr   rl  r\  rb  s   @r   PositionalArgsIncompleteAdapterro  <  s%    	 
	B 
	Br   rq  adapter_classc                 D    t         j                  fd       } |        y)zMTest basic adapter implementation and that responses can patch them properly.c                  ~   d} t        j                  t         j                  | d       t        j                         }        }|j                  d|       t        j                  |d|j                        5 }|j                  | d      }d d d        j                  d	k(  sJ t        d
       y # 1 sw Y   'xY w)Nr8   s   test adapterr:   zhttp://rX  )side_effectFallow_redirectsr<   ztest adapter)r   rA   rB   rC   Sessionmountr	   objectrX  rD   
call_countr-   )rE   sessionadapter	mock_sendr!   rr  s        r   rI   z-TestAdapters.test_custom_adapter.<locals>.runU  s    &CMM)--?C &&(G#oGMM)W-gv7<<H ?I{{3{>? ''1,,,D.1	? ?s   9B33B<N)r   rK   )rY  rr  rI   s    ` r   test_custom_adapterz TestAdapters.test_custom_adapterN  s$     
			2 
	2 	r   N)r]  r^  r_  rC   adaptersHTTPAdapterrc  rm  rq  rq   markparametrizer  r   r   r   rR  rR  %  s    )))55 )Q 1 1 = = Q B(*;*;*G*G B$ [[	-/NO	r   rR  c                  ,    d }  |         t                y )Nc                     t         j                  5  t        j                  t         j                  dd       t	        j
                  d      } t        | d       t        t         j                        dk(  sJ t         j                  d   j                  j                  dk(  sJ t         j                  d   j                  j                  dk(  sJ t	        j
                  d      } t        | d       t        t         j                        d	k(  sJ t         j                  d   j                  j                  d
k(  sJ t         j                  d   j                  j                  dk(  sJ 	 d d d        y # 1 sw Y   y xY wr7   )r   r   rA   rB   rC   rD   r-   r   r   r/   rE   rF   rG   rH   s    r   rI   z.test_responses_as_context_manager.<locals>.runh  s%   ^^ 	BMM)--)=GL<< 45DD&)y'1,,,??1%--115JJJJ??1%..66'AAA<< <=DD&)y'1,,,??1%--115RRRR??1%..66'AAA	B 	B 	Bs   EE00E9r    rL   s    r   !test_responses_as_context_managerr  g  s    B ENr   c                      dd} t        j                  |       }t        j                  |       t        j                  |      k(  sJ  |dd       | dd      k(  sJ  |d       | d      k(  sJ y )Nc                 
    | |fS r   r   r   r   s     r   test_functionz<test_activate_doesnt_change_signature.<locals>.test_function|      !tr   r<   r?      r   )r   rK   inspect	signaturer  decorated_test_functions     r   %test_activate_doesnt_change_signaturer  {  s}     (00?]+w/@/@0    #1a(M!Q,????"1%q)9999r   c                       yNappler   r   r   r   my_fruitr    s    r   c                 
    d| gS )Nbananar   )r  s    r   fruit_basketr    s    hr   r  r  c                   :    e Zd ZdZd Z ej                  e      Zy)TestFixtureszG
    Test that pytest fixtures work well with 'activate' decorator
    c                     ||v sJ |dk(  sJ y r  r   )rY  r  r  s      r   r  zTestFixtures.test_function  s    <'''7"""r   N)r]  r^  r_  r`  r  r   rK   test_function_decoratedr   r   r   r  r    s!    # 1i00?r   r  c                     t        d      d        } t        j                  |       }t        j                  |       t        j                  |      k(  sJ  |        }t        |t              sJ  |       }t        |t              sJ y )Nz
sys.stdoutc                     | S r   r   )mock_stdouts    r   r  z5test_activate_mock_interaction.<locals>.test_function  s    r   )r	   r   rK   r  r  rf   r   )r  r  ru   s      r   test_activate_mock_interactionr    s    
<  (00?]+w/@/@0    OEeT"""#%EeT"""r   c                  ,   dd} t         | j                  d<   t         | j                  d<   t        j                  |       }t	        j
                  |       t	        j
                  |      k(  sJ  |dd       | dd      k(  sJ  |d       | d      k(  sJ y )Nc                 
    | |fS r   r   r  s     r   r  zMtest_activate_doesnt_change_signature_with_return_type.<locals>.test_function  r  r   r$   r   r<   r?   r  r   )r   __annotations__r   rK   r  r  r  s     r   6test_activate_doesnt_change_signature_with_return_typer    s    
 /3M!!(+)-M!!#&'00?]+w/@/@0    #1a(M!Q,????"1%q)9999r   c                       G d d      }  |        }|j                  dd      |j                  dd      k(  sJ |j                  d      |j                  d      k(  sJ y )Nc                   8    e Zd ZddZ ej
                  e      Zy)Btest_activate_doesnt_change_signature_for_method.<locals>.TestCaseNc                     | ||fS r   r   )rY  r   r   s      r   r  zPtest_activate_doesnt_change_signature_for_method.<locals>.TestCase.test_function  s    A:r   r   )r]  r^  r_  r  r   rK   r  r   r   r   TestCaser    s    	 #5)"4"4]"Cr   r  r<   r?   r  )r  r  )r  	test_cases     r   0test_activate_doesnt_change_signature_for_methodr    sd    D D 
I,,Q2i6M6MaQR6SSSS,,Q/93J3J13MMMMr   c                      ddddidfdt         j                  fd       }  |         t                y )Nr   r&   
set-cookiezsession_id=12345; a=b; c=dr=   c                     fS r   r   r   s    r   r   z/test_response_cookies.<locals>.request_callback  r   r   c                  X   t        j                  t         j                         t        j                        } | j
                  dk(  sJ | j                  k(  sJ d| j                  v sJ | j                  d   dk(  sJ t        | j                  j                               dhk(  sJ y Nr   
session_id12345
r   r   rB   rC   rD   r,   r)   cookiessetkeysr!   r   rQ   rE   s    r   rI   z"test_response_cookies.<locals>.run      y}}c3CD||C yyO+++6)))t||+++||L)W4444<<$$&'L>999r   rJ   rI   r"   r+   r   rQ   rE   s    @@@@@r   test_response_cookiesr    sH    DF9:G
C% : : ENr   c                      ddddidfdt         j                  fd       }  |         t                y )Nr   r&   r  z"session_id=12345; a=b; c=d; securer=   c                     fS r   r   r   s    r   r   z6test_response_cookies_secure.<locals>.request_callback  r   r   c                  X   t        j                  t         j                         t        j                        } | j
                  dk(  sJ | j                  k(  sJ d| j                  v sJ | j                  d   dk(  sJ t        | j                  j                               dhk(  sJ y r  r  r  s    r   rI   z)test_response_cookies_secure.<locals>.run  r  r   rJ   r  s    @@@@@r   test_response_cookies_securer    sH    DFABG
C% : : ENr   c                      ddddgdfdt         j                  fd       }  |         t                y )Nr   r&   )r  z;1P_JAR=2019-12-31-23; path=/; domain=.example.com; HttpOnly)r  z3NID=some=value; path=/; domain=.example.com; securer=   c                     fS r   r   r   s    r   r   z8test_response_cookies_multiple.<locals>.request_callback  r   r   c                  b   t        j                  t         j                         t        j                        } | j
                  dk(  sJ | j                  k(  sJ t        | j                  j                               ddhk(  sJ | j                  d   dk(  sJ | j                  d   dk(  sJ y )Nr   1P_JARNIDz2019-12-31-23z
some=value)
r   r   rB   rC   rD   r,   r)   r  r  r  r  s    r   rI   z+test_response_cookies_multiple.<locals>.run  s    y}}c3CD||C yyO+++6)))4<<$$&'He+<<<<||H%888||E"l222r   rJ   r  s    @@@@@r   test_response_cookies_multipler    sL    DFUMG  C% 3 3 ENr   request_streamTFNresponses_streamc                 \     t         j                   fd       } |        t                y )Nc                  "   d} t        j                  t         j                  | dgd       t        j                         }|j                  |       }|j                  dk(  sJ |j                  dk(  sJ d|j                  v sJ |j                  d   dk(  sJ t        |j                  j                               dhk(  sJ d|j                  v sJ |j                  d   dk(  sJ t        |j                  j                               dhk(  sJ y )	Nzhttps://example.com/path)z
Set-cookiez"mycookie=cookieval; path=/; secureok)r+   r"   r   r   r&   mycookie	cookieval)r   rA   rB   rC   r|  rD   r,   r)   r  r  r  )rE   r|  r!   r  r  s      r   rI   z*test_response_cookies_session.<locals>.run  s   (MMD #	
 ""${{3~{6yyD   3&&&T\\)))||J';6664<<$$&'J<777W__,,,z*k9997??'')*zl:::r   rJ   )r  r  rI   s   `` r   test_response_cookies_sessionr    s)     ; ;0 ENr   c                  ,    d }  |         t                y)z8adds a callback to decorate the response, then checks itc                  .   d } t        j                  |       5 }|j                  t         j                  dd       t	        j
                  d      }|j                  dk(  sJ t        |d      sJ t        |d      du sJ 	 d d d        y # 1 sw Y   y xY w)	Nc                     d| _         | S )NT)
_is_mocked)rF   s    r   response_callbackz>test_response_callback.<locals>.run.<locals>.response_callback:  s    "&HOr   )r  r8   r9   r:   r;   r  T)	r   RequestsMockrA   rB   rC   rD   r,   r1   r2   )r  mr!   s      r   rI   z#test_response_callback.<locals>.run9  s    	 ##6GH 	7AEE)--!5GED<< 45D99&&&4...4.$666	7 	7 	7s   A'BBNr  rL   s    r   test_response_callbackr  6  s    
7 ENr   c                  ,    d }  |         t                y)z>Adds the possibility to use actual (binary) files as responsesc                     t         j                  j                  t              } t	        j
                         5 }t        | d      5 }|j                  t        j                  d|j                         d       t        j                  dd      }d d d        t        | d      5 }j                  |j                         k(  sJ 	 d d d        d d d        y # 1 sw Y   HxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nzutf-8)encodingr8   Tr"   r   r   )ospathabspath__file__r   r  openrA   rB   readrC   rD   r,   )current_filer  outr!   s       r   rI   z#test_response_filebody.<locals>.runL  s    wwx0##% 	/lW5 Gimm%9
SWX||$8FG lW5 /yyCHHJ.../		/ 	/G G/ /		/ 	/s<   C.A	CC.$ C"C.C	C."C+	'C..C7Nr  rL   s    r   test_response_filebodyr  I  s    / ENr   c                  R    t         j                  d        }  |         t                y )Nc                      d} t        j                  t         j                  | dd       t        j                  | d      }|j
                  j                         dk(  sJ y )Nr8   s   42Tr  r   )r   rA   rB   rC   rD   rawr  rS   s     r   rI   z3test_use_stream_twice_to_double_raw_io.<locals>.runZ  sE    "immSuTB||C-xx}}%'''r   rJ   rL   s    r   &test_use_stream_twice_to_double_raw_ior  Y  s&    ( ( ENr   c                  8    d fd}  |         t                y )Nc                     t               r   )BaseExceptionr  s    r   r   z<test_assert_all_requests_are_fired.<locals>.request_callbackf  s
    or   c                     t        j                  t              5 } t        j                  d      5 }|j                  t        j                  dd       d d d        d d d        dt         j                        v sJ t        j                  t        | j                        v sJ t        j                  t              5  t        j                         5 }|j                  t        j                  dd       d d d        d d d        t        j                  t              5  t        j                         5 }|j                  t        j                  dd       t               # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   nxY w	 d d d        n# 1 sw Y   nxY wt        j                  d      5 }|j                  t        j                  dd       t        |j                               dk(  sJ t        j                  d       t        |j                               dk(  sJ 	 d d d        n# 1 sw Y   nxY wt        j                  d      5 }|j                  t        j                  dt                      t        |j                               dk(  sJ t        j                  t              5  t        j                  d       d d d        n# 1 sw Y   nxY wt        |j                               dk(  sJ 	 d d d        n# 1 sw Y   nxY wt        j                  d      5 }|j                  t        j                  d       t        |j                               dk(  sJ t        j                  t               5  t        j                  d       d d d        n# 1 sw Y   nxY wt        |j                               dk(  sJ 	 d d d        y # 1 sw Y   y xY w)NTr   r8   r9   r:   r<   )rq   rr   AssertionErrorr   r  rA   rB   rt   ru   rs   r   r   rC   rD   r  r   r  )rv   r  r   s     r   rI   z/test_assert_all_requests_are_fired.<locals>.runi  s"   ]]>* 	Ig''dK Iqimm%9HI	I $s7=='9999}}GMM 2222 ]]>* 	I'') IQimm%9HI	I
 ]]:& 	#'') #Qimm%9H l"I I	I 	II I	I 	I# # #	# 	# 	# ##$G 	,1EE)--!5GEDq||~&!+++LL-.q||~&!+++		, 	, 	, ##$G 	,1EE)--!5IKEHq||~&!+++y) 3123 3 3q||~&!+++	, 	, 	, ##$G 	,1NN9==*>@PQq||~&!+++}- 3123 3 3q||~&!+++	, 	, 	,s   E.#E!E.>F#E;6FF)4-F!E+	&E..E8;F	 FFF	F))F2A4I		I+A"L K,#	L ,K5	1%L  L)AO.N:1	O.:O	?%O..O7r  r%  s    @r   "test_assert_all_requests_are_firedr  e  s    &,P ENr   c                     t        j                  d      d        } t        j                  d      d        }t        j                  t              5   |         d d d        t                 |        t                y # 1 sw Y   %xY w)NTr  c                      t        j                  t         j                  di        t        j                  t         j                  di        t        j                  d       y )Nzhttp://other_urlr   http://some_apir   rA   rB   rC   rD   r   r   r   test_some_functionzCtest_assert_all_requests_fired_multiple.<locals>.test_some_function  s;     	imm%7bAimm%6R@&'r   c                  z    t        j                  t         j                  di        t        j                  d       y )Nr  r   r  r   r   r   test_some_second_functionzJtest_assert_all_requests_fired_multiple.<locals>.test_some_second_function  s&     	imm%6R@&'r   )r   rK   rq   rr   r  r    )r  r  s     r   'test_assert_all_requests_fired_multipler    sw    d;( <( d;( <(
 
~	& NN s   A>>Bc                      dd  t        j                  d      fdfd}  |         t                y )Nr8   z/1z^http://example.com(/)?(\d+)?$c                     | j                   j                        ry| j                   j                  d      rd}nd}dd|i}d|d fS )N)r&   r   r9   z/0r<   r   location/-  )rE   endswith)r/   nredirect_headersfinal_url_paths      r   r   z7test_allow_redirects_samehost.<locals>.request_callback  sU    ;;/# {{##D) *auI6($..r   c                     t         j                  5  t        j                  t         j                         t	        j
                  d      } | j                  dk(  sJ t        t         j                        dk(  sJ t         j                  d   d   j                  dk(  sJ 	 d d d        t                t         j                  5  t        j                  t         j                         t	        j
                  d      }t        t         j                        dk(  sJ t        |j                        dk(  sJ |j                  d	k(  sJ |j                  k(  sJ t         j                  D cg c]  }|d   j                   }}|g d
k(  sJ 	 d d d        t                y # 1 sw Y   xY wc c}w # 1 sw Y   t                y xY w)NFrv  r  r<   r   Tr  r?   r&   )r  r  r&   )r   r   r   rB   rC   rD   r)   r   r   r    historyrE   )resp_no_redirectsresp_yes_redirectscallstatus_codes	final_urlredirecting_urlr   url_res       r   rI   z*test_allow_redirects_samehost.<locals>.run  sv   ^^ 	<""9==&:JK (_e T$00C777y'1,,,??1%a(44;;;	< 	^^ 	3""9==&:JK!)ot!Ty'1,,,)112a777%11S888 2 6 6666<EOOLDDG//LLL?222	3 	#	< 	< M	3 	s+   BF$B)F6/F1F6$F.1F66G	)rg   rh   r    )rI   r  r  r  r   r  s    @@@@@r   test_allow_redirects_samehostr	    sB    *ON"#N#34IZZ9:F/* ENr   c                  R    t         j                  d        }  |         t                y)aO  Test that path segment after ``;`` is preserved.

    Validate compliance with RFC 3986.
    The path is terminated by the first question mark ("?") or
    number sign ("#") character, or by the end of the URI.
    See more about how path should be treated under:
    https://datatracker.ietf.org/doc/html/rfc3986.html#section-3.3
    c                      t        j                  t         j                  dd       t        j                  t         j                  dd       t        j                  d      } | j
                  dk(  sJ y )Nzhttp://example.com/here/wei  rQ   zhttp://example.com/here/we;go	  )r   rA   rB   rC   rD   r)   rH   s    r   rI   ztest_path_segments.<locals>.run  sO    imm%A#Nimm%DSQ||;<3&&&r   NrJ   rL   s    r   test_path_segmentsr    s(     ' ' ENr   c                  \    dt         j                  fd       }  |         t                y )Nu3   http://example.com/test?type=2&ie=utf8&query=汉字c                      t        j                  t         j                  dd       t        j                        } t        | d       y )Nr;   Tr   rR   r!   rE   s    r   rI   z-test_handles_unicode_querystring.<locals>.run  s1    immSvN||C f%r   rJ   rI   rE   s    @r    test_handles_unicode_querystringr    s,    
?C& & ENr   c                  \    dt         j                  fd       }  |         t                y )NuS   http://www.संजाल.भारत/hi/वेबसाइट-डिजाइनc                      t        j                  t         j                  d       t        j                        } t        | d       y )Nr;   r:   rR   r  s    r   rI   z%test_handles_unicode_url.<locals>.run   s/    immSv6||C f%r   rJ   r  s    @r   test_handles_unicode_urlr    s,    
_C& & ENr   c                  \    dt         j                  fd       }  |         t                y )Nhttp://example.com/testc                      t        j                  t         j                  d       t        j                        } t        | dd       y )N   михољско летоr:   text/plain; charset=utf-8r   rR   r  s    r   rI   z&test_handles_unicode_body.<locals>.run  s4    immS/JK||C 9Hcdr   rJ   r  s    @r   test_handles_unicode_bodyr    s.    
#Ce e ENr   c                  \    dt         j                  fd       }  |         t                y )Nr  c            	          t        j                  t         j                  t        t	        d                   t        j                        } t        | d       y )Nr9   r:   r;   )r   rA   rB   r   r   rC   rD   r-   r  s    r   rI   z.test_handles_buffered_reader_body.<locals>.run  s9    immS~gg>N/OP||C f%r   rJ   r  s    @r   !test_handles_buffered_reader_bodyr    s,    
#C& & ENr   c                  R    t         j                  d        }  |         t                y )Nc                      t        j                  t         j                  ddddi       t        j                  d      } | j
                  d   dk(  sJ y )Nr8   rY   X-Testr   r"   r+   r   rA   rB   rC   rD   r+   rH   s    r   rI   ztest_headers.<locals>.run+  sI    MM/b8UBS	
 ||01||H%...r   rJ   rL   s    r   test_headersr%  *  s&    / / ENr   c                  R    t         j                  d        }  |         t                y)zTest to ensure that we do not have two values for `content-type`.

    For more details see https://github.com/getsentry/responses/issues/644
    c                      t        j                  di ddi       t        j                          t        j                  d      } | j                  d   dk(  sJ y )Nzhttps://example.org/r(   r   )r   r+   )r   rD   startrC   r+   rH   s    r   rI   z3test_headers_deduplicated_content_type.<locals>.run=  sP    "#%78	

 	||23||N+/AAAAr   NrJ   rL   s    r   &test_headers_deduplicated_content_typer)  7  s*     
B 
B ENr   c                     t         j                  d        }t        t        j                  d      fd}| j                  t        j                  d|        |        t                y)at  
    Currently 'requests' does not enforce content length validation,
    (validation that body length matches header). However, this could
    be expected in next major version, see
    https://github.com/psf/requests/pull/3563

    Now user can manually patch URL3 lib to achieve the same

    See discussion in
    https://github.com/getsentry/responses/issues/394
    c                     t        j                  t         j                  dddiddi       t        j                  t
              5 } t        j                  d       d d d        dt         j                        v sJ y # 1 sw Y   #xY w)Nzhttp://example.com/api/123r   zthis body is too largecontent-length2)r   adding_headersIncompleteRead)
r   rA   rB   rq   rr   r
   rC   rD   rt   ru   )rB  s    r   rI   z&test_content_length_error.<locals>.run[  st    MM(56,c2		
 ]]/0 	7CLL56	7  3syy>111	7 	7s   A==B__init__c                 (    d|d<    | g|i | y )NTenforce_content_lengthr   )rY  argskwargsoriginal_inits      r   patched_initz/test_content_length_error.<locals>.patched_initm  s     +/'(d,T,V,r   N)r   rK   r2   urllib3HTTPResponsesetattrr    )monkeypatchrI   r6  r5  s      @r   test_content_length_errorr;  N  sZ     
2 
2 G00*=M- ,,j,GENr   c                  R    t         j                  d        }  |         t                y)zQ
    See discussion in
    https://github.com/getsentry/responses/issues/438
    c                      t        j                  t         j                  ddddd       t        j                  dd      } | j                  d       D ]	  }|dk(  r	J  y )	NrJ  r&   zapplication/octet-streams   This is testT)rQ   r#   r"   auto_calculate_content_lengthr   )
chunk_size)r   rA   rB   rC   rD   iter_content)reschunks     r   rI   z-test_stream_with_none_chunk_size.<locals>.run}  sb    MM!3 *.	
 ll0>%%%6 	,EO+++	,r   NrJ   rL   s    r    test_stream_with_none_chunk_sizerC  w  s(     , , ENr   c                  R    t         j                  d        }  |         t                y )Nc                      t        j                  t         j                  ddddi       t        j                  d      } | j
                  d   dk(  sJ y )Nr8   rY   r"  r   )r"   r.  r$  rH   s    r   rI   z'test_legacy_adding_headers.<locals>.run  sK    MM $e,		
 ||01||H%...r   rJ   rL   s    r   test_legacy_adding_headersrF    s&    / / ENr   c                  R    t         j                  d        }  |         t                y )Nc            	          t        j                  t              5 } t        j                  t        j
                  dddddi       d d d        dt         j                        v sJ y # 1 sw Y   #xY w)Nr8   r;   	text/htmlr(   ztext/html; charset=utf-8)r"   r#   r.  zAYou cannot define both `content_type` and `headers[Content-Type]`)rq   rr   RuntimeErrorr   rA   rB   rt   ru   rz   s    r   rI   z9test_legacy_adding_headers_with_content_type.<locals>.run  sk    ]]<( 	GMM$( .0JK	 P7==!"	
"	 	s   +A''A0rJ   rL   s    r   ,test_legacy_adding_headers_with_content_typerK    s&    
 
 ENr   c                  R    t         j                  d        }  |         t                y )Nc                      d} t        j                  t         j                  | dd       t        j                  |       }t        |d       |j                  d   dk(  sJ y )Nr=   r;   Tr"   r>  r   4r   rA   rB   rC   rD   r-   r+   rS   s     r   rI   z;test_auto_calculate_content_length_string_body.<locals>.run  sR    #MM3V4	
 ||C f%||,-444r   rJ   rL   s    r   .test_auto_calculate_content_length_string_bodyrQ    s&    5 5 ENr   c                  R    t         j                  d        }  |         t                y )Nc                      d} t        j                  t         j                  | dd       t        j                  |       }t        |d       |j                  d   dk(  sJ y )Nr=   s
   test bytesTrN  z
test bytesr   10rP  rS   s     r   rI   z:test_auto_calculate_content_length_bytes_body.<locals>.run  sS    #MM3]RV	
 ||C l+||,-555r   rJ   rL   s    r   -test_auto_calculate_content_length_bytes_bodyrU    &    6 6 ENr   c                  R    t         j                  d        }  |         t                y )Nc                     d} d}t        j                  t         j                  |ddid       t        j                  |      }t        |d|        |j                  d   d	k(  sJ d
}t        j                  t         j                  |g d       t        j                  |      }t        |d|        |j                  d   dk(  sJ y )Nr   r=   r   r   T)r   r>  r   r   22r   r   r-  rP  r   s      r   rI   z9test_auto_calculate_content_length_json_body.<locals>.run  s    )#MMY'*.		
 ||C 6E||,-555%immSrQUV||C dL1||,-444r   rJ   rL   s    r   ,test_auto_calculate_content_length_json_bodyrZ    s&    5 5( ENr   c                  R    t         j                  d        }  |         t                y )Nc                      d} t        j                  t         j                  | dd       t        j                  |       }t        |dd       |j                  d   dk(  sJ y )	Nr  r  TrN  r  r   r   25rP  rS   s     r   rI   z<test_auto_calculate_content_length_unicode_body.<locals>.run  sX    'MM3%@`d	
 ||C 9Hcd||,-555r   rJ   rL   s    r   /test_auto_calculate_content_length_unicode_bodyr^    rV  r   c                  R    t         j                  d        }  |         t                y )Nc            	          d} t        j                  t         j                  | t        t	        d            d       t        j                  |       }t        |d       d|j                  vsJ y )Nr  s   testingTrN  testingr   )	r   rA   rB   r   r   rC   rD   r-   r+   rS   s     r   rI   zTtest_auto_calculate_content_length_doesnt_work_for_buffered_reader_body.<locals>.run  sY    'MM
 34*.		
 ||C i(t||333r   rJ   rL   s    r   Gtest_auto_calculate_content_length_doesnt_work_for_buffered_reader_bodyrb    s&    
4 
4 ENr   c                  R    t         j                  d        }  |         t                y )Nc                     d} t        j                  t         j                  | dddid       t        j                  dk  r6t        j                  |       }t        |d       |j                  d   dk(  sJ y t        j                  t              5 }t        j                  |        d d d        dt        j                        v sJ y # 1 sw Y   #xY w)Nr=   r;   r   r-  T)r"   r+   r>  z.IncompleteRead(4 bytes read, -2 more expected))r   rA   rB   r7  __version__rC   rD   r-   r+   rq   rr   r
   rt   ru   )rE   r!   rv   s      r   rI   zNtest_auto_calculate_content_length_doesnt_override_existing_value.<locals>.run  s    #MM%s+*.	
 $<<$DD&)<< 01S88834 "S!"CsH   " "s   CCrJ   rL   s    r   Atest_auto_calculate_content_length_doesnt_override_existing_valuerf    s&     * ENr   c                  R    t         j                  d        }  |         t                y )Nc                  ~   t        j                  t         j                  dd       t        j                  t         j                  dd       t        j                  t         j                  dd       t        j                  t         j                  dd       t        j                  d      } t        | d       t        j                  d      } t        | d       t        j                  d      } t        | d       t        j                  d      } t        | d       t        j                  d      } t        | d       y )Nr8   r;   r:   restfestbestrR   rH   s    r   rI   z$test_multiple_responses.<locals>.run(  s    imm%9Gimm%9Gimm%9Gimm%9G||01f%||01f%||01f%||01f% ||01f%r   rJ   rL   s    r   test_multiple_responsesrl  '  s&    & &, ENr   c                  R    t         j                  d        }  |         t                y )Nc                     t        j                  t         j                  dd       t        j                  d      } t        | d       t        j                  t         j                  dd       t        j                  d      } t        | d       t        j                  t         j                  dd       t        j                  d      } t        | d       t        j                  d      } t        | d       y )Nr8   r;   r:   ri  rk  rR   rH   s    r   rI   z/test_multiple_responses_intermixed.<locals>.runD  s    imm%9G||01f%imm%9G||01f%imm%9G||01f% ||01f%r   rJ   rL   s    r   "test_multiple_responses_intermixedro  C  s&    & &" ENr   c                  R    t         j                  d        }  |         t                y )Nc                      t        j                  t         j                  dd       t        j                  t         j                  dd       t        j                  d      } t        | d       t        j                  d      } t        | d       y )Nr`   oner:   r[   tworR   rH   s    r   rI   ztest_multiple_urls.<locals>.run[  s^    imm%=EJimm%=EJ||45e$||45e$r   rJ   rL   s    r   test_multiple_urlsrt  Z  s&    % % ENr   c                  R    t         j                  d        }  |         t                y )Nc                      t        j                  t         j                  dd       t        j                  t         j                  dd       t	        j
                  d      } t        | d       t	        j                  d      } t        | d       y )Nr`   gotchar:   posted)r   rA   rB   r8  rC   rD   r-   r:  rH   s    r   rI   z"test_multiple_methods.<locals>.runj  s^    imm%=HMinn&>XN||45h'}}56h'r   rJ   rL   s    r   test_multiple_methodsry  i  s&    ( ( ENr   c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestPassthruc                 \   |j                  d      j                  dd       |j                  d      t        t        j
                  d      t        j                  fd       }t        j                  fd       } |        t                d	_         |        t                y )
Nr  r'   
text/plainr   MOCKr:   c                  r    t        j                         t        j                        } t	        | d       y Nr'   r   rA   rC   rD   r-   r!   rF   rE   s    r   run_passthroughz;TestPassthru.test_passthrough_flag.<locals>.run_passthrough  s'    MM(#<<$DD$'r   c                  r    t        j                         t        j                        } t	        | d       y )Nr~  r  r  s    r   
run_mockedz6TestPassthru.test_passthrough_flag.<locals>.run_mocked  s'    MM(#<<$DD&)r   T)	expect_requestrespond_with_dataurl_forr   r   rB   rK   r    passthrough)rY  
httpserverr  r  rF   rE   s       @@r   test_passthrough_flagz"TestPassthru.test_passthrough_flagy  s    !!#&88| 	9 	
   %IMM3V<				( 
	(
 
			* 
	*
 	#r   c                     |j                  d      j                  dd       |j                  d      fdt        j                  fd       }t        j                  fd       } |        t                 |        t                y )Nr  r'   r}  r   c                 6    t        j                  d|        y )Nr~  )r"   r  )r   rD   )r  rE   s    r   configure_responsez?TestPassthru.test_passthrough_kwarg.<locals>.configure_response  s    MM#FDr   c                  Z     d       t        j                        } t        | d       y )NTr  r'   rC   rD   r-   r!   r  rE   s    r   r  z<TestPassthru.test_passthrough_kwarg.<locals>.run_passthrough  s#    40<<$DD$'r   c                  Z     d       t        j                        } t        | d       y )NFr  r~  r  r  s    r   r  z7TestPassthru.test_passthrough_kwarg.<locals>.run_mocked  s#    51<<$DD&)r   r  r  r  r   rK   r    )rY  r  r  r  r  rE   s       @@r   test_passthrough_kwargz#TestPassthru.test_passthrough_kwarg  s    !!#&88| 	9 	
   %	E 
			( 
	(
 
			* 
	*
 	r   c                     |j                  d      j                  dd       |j                  d      t        j                  fd       } |        t                y )Nr  r'   r}  r   c                  2   t        j                  t        t         j                               t        j                  t         j                   dd       t        j                  t         j                  dd       t	        j
                  d      } t        | d       t	        j
                   d      } t        | d       t	        j
                        } t        | d       t        t         j                        dk(  sJ t        j                  d       y )	N/onerr  r:   r[   rs  r'   r  r<   )
r   rA   r   rB   rC   rD   r-   r   r   assert_call_countr  s    r   rI   z3TestPassthru.test_passthrough_response.<locals>.run  s    MM-immSABMM)--C5EBMM)--)AN<< 89DD%(<<3%t-DD%(<<$DD$'y'1,,,''Q/r   r  rY  r  rI   rE   s      @r   test_passthrough_responsez&TestPassthru.test_passthrough_response  s\    !!#&88| 	9 	
   %				0 
	0 	r   c                     j                  d      j                  dd       t        j                  fd       } |        t	                y )Nr  r'   r}  r   c                  Z   j                  d      } t        j                  t        t        j                  |              t        j                  |       j                  }t        j                  | d      5 }|j                  j                         }d d d        |k(  sJ y # 1 sw Y   xY w)Nr  Tr   )
r  r   rA   r   rB   rC   rD   rG   r  r  )rE   	content_1r!   	content_2r  s       r   rI   z:TestPassthru.test_passthrough_response_stream.<locals>.run  s    $$S)CMM-immSAB S)11Ic$/ ,4 HHMMO	,	))), ,s   6B!!B*)r  r  r   rK   r    )rY  r  rI   s    ` r    test_passthrough_response_streamz-TestPassthru.test_passthrough_response_stream  sL    !!#&88| 	9 	
 
			* 
	* 	r   c                    |j                  d      j                  dd       |j                  d      t        j                  fd       }t        j                  fd       } |        t                 |        t                y )Nr  r'   r}  r   c                      t        j                  f      5  t        j                        } t	        | d       d d d        y # 1 sw Y   y xY w)N)r   r'   )r   r  rC   rD   r-   r  s    r   run_constructor_argumentzETestPassthru.test_passthru_prefixes.<locals>.run_constructor_argument  s@    ''3&A ,||C(d+, , ,s   "AAc                      t        j                         5 } t        g      | _        t	        j
                        }t        |d       d d d        y # 1 sw Y   y xY wr  )r   r  tupler   rC   rD   r-   )r  r!   rE   s     r   run_property_setterz@TestPassthru.test_passthru_prefixes.<locals>.run_property_setter  sL    '') ,Q&+SEl#||C(d+, , ,s   3AAr  )rY  r  r  r  rE   s       @r   test_passthru_prefixesz#TestPassthru.test_passthru_prefixes  s    !!#&88| 	9 	
   %				, 
	,
 
			, 
	, 	!"r   c                     |j                  d      j                  dd       |j                  d      t        j                  fd       } |        t                y )Nr  r'   r}  r   c                     t        j                         t        j                  t         j                   dd       t        j                  t         j                  dd       t	        j
                  d      } t        | d       t	        j
                   d      } t        | d       t	        j
                        } t        | d       y )Nr  rr  r:   r[   rs  r'   )r   add_passthrurA   rB   rC   rD   r-   r  s    r   rI   z'TestPassthru.test_passthru.<locals>.run  s    ""3'MM)--C5EBMM)--)AN<< 89DD%(<<3%t-DD%(<<$DD$'r   r  r  s      @r   test_passthruzTestPassthru.test_passthru  s\    !!#&88| 	9 	
   %			
	( 

	( 	r   c                     |j                  t        j                  d            j                  dd       |j	                  d      t
        j                  fd       } |        t                y )Nz^/\w+r'   r}  r   r  c                     t        j                  t        j                   d             t        j                  t         j
                   dd       t        j                  t         j
                  dd       t        j                  d      } t        | d       t        j                   d      } t        | d       t        j                   d      } t        | d       t        j                   d	      } t        | d       y )
Nz/\w+r  rr  r:   r[   rs  z/twor'   z/three)	r   r  rg   rh   rA   rB   rC   rD   r-   r  s    r   rI   z-TestPassthru.test_passthru_regex.<locals>.run  s    ""2::Um#<=MM)--C5EBMM)--)AN<< 89DD%(<<3%t-DD%(<<3%t-DD$'<<3%v/DD$'r   )r  rg   rh   r  r  r   rK   r    r  s      @r   test_passthru_regexz TestPassthru.test_passthru_regex  sf    !!"**X"67II| 	J 	
   %				( 
	( 	r   c                     j                  d      j                  ddd       t        j                  fd       }t        j                  d        } |         |        y)	z
        passthru should be erased on exit from context manager
        see:
        https://github.com/getsentry/responses/issues/322
        r  mocked server  r}  )rQ   r#   c                     t         j                  j                  rJ t        j                  t	        j
                  d             j                  d      } t        j                  |       }|j                  dk(  sJ |j                  dk(  sJ y )Nz.*r  r  r  )r   r   r   r  rg   rh   r  rC   rD   r)   r,   )rE   rF   r  s     r   with_a_passthruzQTestPassthru.test_passthru_does_not_persist_across_tests.<locals>.with_a_passthru)  sq     ~~7777""2::d#34$$S)C||C(H''3...==O333r   c                      t         j                  j                  rJ t        j                  t
        j                  j                        5  t        j                  d       d d d        y # 1 sw Y   y xY w)NrJ  )	r   r   r   rq   rr   rC   
exceptionsr   rD   r   r   r   without_a_passthruzTTestPassthru.test_passthru_does_not_persist_across_tests.<locals>.without_a_passthru3  sO     ~~7777x22BBC 4234 4 4s   
A))A2N)r  r  r   rK   )rY  r  r  r  s    `  r   +test_passthru_does_not_persist_across_testsz8TestPassthru.test_passthru_does_not_persist_across_tests  sl     	!!#&88Cl 	9 	
 
			4 
	4 
			4 
	4
 	r   c                 R    t         j                  d        } |        t                y )Nc                      t        j                         5 } d}d}| j                  |       | j                  d   |k(  sJ 	 d d d        y # 1 sw Y   y xY w)Nu5   http://موقع.وزارة-الاتصالات.مصر/z8http://xn--4gbrim.xn----ymcbaaajlc6dj7bxne2c.xn--wgbh1c/r   )r   r  r  r   )r  rE   	clean_urls      r   rI   z/TestPassthru.test_passthru_unicode.<locals>.run=  sT    '') ;QMV	s#**1-:::	; ; ;s   *A		ArJ   rY  rI   s     r   test_passthru_unicodez"TestPassthru.test_passthru_unicode<  s&    				; 
	; 	r   c                 ,    d } |        t                y )Nc                     t        j                  d      } | j                  dd       t        j                  d| j                               5 }|j	                  d       |j                  t         j                  dd       t        j                  d      }|j                  dk(  sJ t        j                  d      }|j                  dk(  sJ 	 d d d        y # 1 sw Y   y xY w)	NTr  z$http://send-this-request-through.com  r  )r   real_adapter_sendzhttps://example.orgr&   )	r   r  r:  unbound_on_sendr  rA   r8  rC   r)   )mock_to_catch_real_sendr_mockrF   s      r   rI   z1TestPassthru.test_real_send_argument.<locals>.runI  s     '0&<&<.2'# $((6s )  ''.2"9"I"I"K 3 ##$JK

9>>+@
M#==)>?++s222#==)OP++s2223 3 3s   B CC"r  r  s     r   test_real_send_argumentz$TestPassthru.test_real_send_argumentH  s    	30 	r   N)r]  r^  r_  r  r  r  r  r  r  r  r  r  r  r   r   r   r{  r{  x  s4    662"0,0:
r   r{  c                  R    t         j                  d        }  |         t                y )Nc                      t        j                  t         j                  dd       t        j                  d      } t        | d       y )Nr8   r'   r]   rR   rH   s    r   rI   z$test_method_named_param.<locals>.runf  s0    Y]]0D4P||01d#r   rJ   rL   s    r   test_method_named_paramr  e  s&    $ $
 ENr   c                 4   t        j                  d      }t         j                  j                         }|j                  }| j                  t         d|       |j                          t        |j                        dk(  sJ |j                  d   d   dk(  sJ y )Nzsomething.else)r   std_mockr<   r   )
r   r  r  	MagicMockr	   r9  r(  r   call_args_list	call_args)r:  requests_mockstd_mock_mock
patch_mocks       r   test_custom_targetr  p  s    **2BCM&&002M$$J	:}=z(()Q..."8,0@@@@r   rE   )r8   zhttp://example.com/some/pathzhttp://example.com/other/path/c                 X     t         j                   fd       } |        t                y )Nc                     ddd} t        j                  t         j                   ddd       t        j                  |       }t        |d       t        ||        t        j                        }t        |d       t        |i        y )	Nr   r0   )r   examplez?hello=worldr;   F)rX   rE   r"   r   r   r   rA   rB   rC   rD   r-   r4   )r0   r!   rE   s     r   rI   ztest_request_param.<locals>.run  sx    "x8==%|$#		
 ||C/f%dF#||C f%dBr   rJ   rE   rI   s   ` r   test_request_paramr  z  s)          ENr   c                  R    t         j                  d        }  |         t                y )Nc                      d} ddgdd}t        j                  t         j                  | d       t        j                  | |      }t        |d       t        ||       y )	Nr8   rr  rs  three)key1key2r;   r]   r   r  )rE   r0   r!   s      r   rI   zEtest_request_param_with_multiple_values_for_the_same_key.<locals>.run  sT    " %.':==	

 ||C/f%dF#r   rJ   rL   s    r   8test_request_param_with_multiple_values_for_the_same_keyr    s&    
$ 
$ ENr   )r8   zhttp://example.com?hello=worldc                 X     t         j                   fd       } |        t                y )Nc                  b   t        j                  t         j                         t        j                  t         j                  d       t        j                  d      du sJ t	        j
                  t              5 } t        j                  d       d d d        dj                        t         j                        v sJ t        j                         t        j                  d      du sJ t        j                  d       t        j                  d      du sJ t        j                         t	        j
                  t              5 } t        j                  d       d d d        dj                        t        | j                        v sJ y # 1 sw Y   xY w# 1 sw Y   ?xY w)	Nhttp://example1.comr   Tr?   z7Expected URL '{}' to be called 2 times. Called 0 times.r<   r  z7Expected URL '{}' to be called 3 times. Called 2 times.)r   rA   rB   r  rq   rr   r  formatrt   ru   rC   rD   )rv   rE   s    r   rI   z#test_assert_call_count.<locals>.run  s^   immS)imm%:;**32d:::]]>* 	0g''Q/	0HOO
  	    	S**32d:::*+**32d:::S]]>* 	0g''Q/	0HOO
  	   	0 	0	0 	0s   =FF%F"%F.rJ   r  s   ` r   test_assert_call_countr    s)        2 ENr   c                  R    t         j                  d        }  |         t                y )Nc                  "   t        j                  t         j                  dt        j                  i       f      } t        j                  t         j                  dt        j                  ddi      fd      }t        j                  d       t        j                  d      }t        j                  d       t        j                  d      }|j                  dk(  sJ |j                  dk(  sJ | j                  d	k(  sJ |j                  d	k(  sJ y )
Nhttp://www.example.com)r5  r   r   r  )r5  rQ   "http://www.example.com?hello=worldr&   r?   )	r   rA   rB   r   query_param_matcherrC   rD   r)   r{  )rsprsp2resp1resp2s       r   rI   z)test_call_count_with_matcher.<locals>.run  s    mmMM$//35

 }}MM$//'0BCE	
 	-.569:AB  C'''  C'''~~"""!###r   rJ   rL   s    r   test_call_count_with_matcherr    s&    $ $. ENr   c                  R    t         j                  d        }  |         t                y )Nc                     t        j                  t         j                  d      } t        j                  d       t        j                  d       t        j                  d       t        j                  d       | j
                  dk(  sJ y )Nr  r     )r   rA   rB   rC   rD   r{  )r  s    r   rI   z,test_call_count_without_matcher.<locals>.run  s]    mmIMM+CD-.-.9:9:~~"""r   rJ   rL   s    r   test_call_count_without_matcherr    s&    # # ENr   c                  R    t         j                  d        }  |         t                y )Nc                  
   t        j                  t         j                  d       t        j                  t         j                  d       t        j                  t         j                  d       t        j                  d       t        j                  d       t        j                  d       t        j                  d       t        j                  d       t         j
                  d   } t         j
                  dd }| j                  j                  dk(  sJ |t         j
                  d   t         j
                  d   t         j
                  d	   gk(  sJ |D cg c]  }|j                  j                   c}g d
k(  sJ y c c}w )Nr  http://www.example.com/1http://www.example.com/2r   r<   zhttp://www.example.com/r?   r  )r  r  r  )r   rA   rB   rC   rD   r   r/   rE   )individual_call
call_slicecs      r   rI   z5test_response_calls_indexing_and_slicing.<locals>.run  s!   imm%=>imm%?@imm%?@-./0/0/0-. !* 2!*2!6
&&**.GGGGOOAOOAOOA
 
 	
 

 (22!		2 7
 
 	
 
2s   F rJ   rL   s    r   (test_response_calls_indexing_and_slicingr    s&    
 
8 ENr   c                  R    t         j                  d        }  |         t                y )Nc                     t        j                  t         j                  d      } t        j                  t         j                  d      }t        j                  t         j                  d      }t        j                  d       t        j                  d       t        j                  d       t        t         j                        t        | j                        t        |j                        z   t        |j                        z   k(  sJ | j                  dk(  sJ t        | j                        dk(  sJ | j                  d   t         j                  d   u sJ | j                  d   t         j                  d   u sJ |j                  dk(  sJ t        |j                        dk(  sJ |j                  d   t         j                  d   u sJ |j                  dk(  sJ t        |j                        dk(  sJ y )Nr  r  r  r?   r   r<   )r   rA   rB   rC   rD   r   r   r{  )rsp1r  rsp3s      r   rI   z=test_response_calls_and_registry_calls_are_equal.<locals>.run  s   }}Y]],DE}}Y]],FG}}MM5
 	-./0-.9??#s4::TZZ'H3JJL
 (
 
 	
 
 !###4::!###zz!}	 2222zz!}	 2222!###4::!###zz!}	 2222!###4::!###r   rJ   rL   s    r   0test_response_calls_and_registry_calls_are_equalr    s&    $ $0 ENr   c                  ,    d }  |         t                y)za
    Validate that exception is raised if request URL/Method/kwargs don't match
    :return:
    c                     t        j                  d      5 } | j                  dd       | j                  dd       | j                  d       t	        j
                  t              5 }t        j                  ddd	i
       d d d        t        j                        }d|v sJ d|v sJ d|v sJ 	 d d d        y # 1 sw Y   :xY w# 1 sw Y   y xY w)NFr  r8  r  rB   r8   zhttp://other.example.comidbadr3  z.- POST http://example1.com/ URL does not matchz/- GET http://example.com/ Method does not matchz-Passthru prefixes:
- http://other.example.com)r   r  rA   r  rq   rr   r   rC   r:  rt   ru   )rspsrv   msgs      r   rI   z$test_fail_request_error.<locals>.run>  s    ##%H 	KDHHV23HHU0189/ H72$GH gmm$CCsJJJDKKKCsJJJ	K 	K
H H	K 	Ks$   AC&B9 /C9C	>CCNr  rL   s    r   test_fail_request_errorr  8  s    K ENr   z(response_params, expected_representationr=   zY<Response(url='http://example.com/' status=200 content_type='text/plain' headers='null')>zhttp://another-domain.com/r     )rX   rE   r#   rQ   zf<Response(url='http://another-domain.com/' status=404 content_type='application/json' headers='null')>zhttp://abcd.com/rI  r  r"  r   
it_wont_be
considered)rX   rE   r#   rQ   r+   r"   zb<Response(url='http://abcd.com/' status=500 content_type='text/html' headers='{"X-Test": "foo"}')>c                 Z    t        di | }t        |      |k(  sJ t        |      |k(  sJ y )Nr   )r   rt   repr)response_paramsexpected_representationrF   s      r   test_response_representationsr  P  s8    N */*Hx=3333>4444r   c                  R    t         j                  d        }  |         t                y )Nc                     t        t        j                  ddddid      } t        t        j                  ddddi      }t        t        j                  d      }t        j                  |        t        j                  |       t        j                  |       t        j
                         }|t        j                  j                         k(  sJ || ||gk(  sJ y )	Nr=   rY   r"  r   r  )r"   r+   rQ   r#  zhttp://anotherdomain.com/)r   r   rB   r8  rA   r   r   )first_responsesecond_responsethird_response
mocks_lists       r   rI   z2test_mocked_responses_list_registered.<locals>.run~  s    !MM!u%
 #MM0rHeCT
 "NN'
 	n%o&n%))+
Y^^668888no~NNNNr   rJ   rL   s    r   %test_mocked_responses_list_registeredr  }  s(    O O0 ENr   zurl,other_url))zhttp://service-A/foo?q=fizzzhttp://service-a/foo?q=fizz)zhttp://service-a/foozhttp://service-A/foo)zhttp://someHost-AwAy/zhttp://somehost-away/)http://fizzbuzz/foor  c                 \     t         j                   fd       } |        t                y )Nc                      t        j                  t         j                         t        j                  d      } t        | d       y )NrW   rB   rY   )r   rA   rB   rC   r/   r-   )r!   	other_urlrE   s    r   rI   z test_rfc_compliance.<locals>.run  s1    Y]]4y1b!r   rJ   )rE   r  rI   s   `` r   test_rfc_compliancer    s)     " "
 ENr   c                  R    t         j                  d        }  |         t                y )Nc                  T   t        j                  t         j                  dddi       t        j                  d      j
                  dk(  sJ t        j                  d      j
                  dk(  sJ t        j                  d      j
                  dk(  sJ t        j                  t         j                  dddi       t        j                  d      j
                  dk(  sJ t        j                  d      j
                  dk(  sJ t        j                  d      j
                  dk(  sJ y )Nzhttps://example.com/rF   oldr   s   {"response": "old"}news   {"response": "new"}r   rA   rB   rC   rD   rG   r   r   r   rI   z&test_requests_between_add.<locals>.run  s    imm%;:uBUV||23;;?UUUU||23;;?UUUU||23;;?UUUUimm%;:uBUV||23;;?UUUU||23;;?UUUU||23;;?UUUUr   rJ   rL   s    r   test_requests_between_addr    s(    
V 
V ENr   c                  R    t         j                  d        }  |         t                y )Nc                  Z   d} t        j                  d| dd      }t        j                  t         j                  | dd       t        j                  |       t        j                  |       t        j                  |       t        j                  t         j                  | dd       t        j                  t         j                  | d	d
       t	        j
                  |       }|j                  dk(  sJ t        d      D ](  }t	        j
                  |       }|j                  dk(  r(J  y )Nzhttps://someapi.com/rB   failr  )rX   rE   r"   rQ   r   r&   r  rY   i.  s   successr  s   fail)r   r   rA   rB   rC   rD   rG   range)rE   fail_responserF   _s       r   rI   z!test_responses_reuse.<locals>.run  s    $!**cs
 	immS)C@m$m$m$immS)C@immS"S9<<$:---q 	/A||C(H##w...	/r   rJ   rL   s    r   test_responses_reuser%    s&    / /& ENr   c                  n   K   t         j                  d        }  |         d {    t                y 7 w)Nc                    K   t        j                  t         j                  dddid       t        j                  d      } | j                         ddik(  sJ t         j                  d   j                  j                  dk(  sJ y w)Nzhttp://twitter.com/api/1/foobarr  z	not foundr  )r   rQ   r   )	r   rA   rB   rC   rD   r   r   r/   rE   rH   s    r   rI   ztest_async_calls.<locals>.run  su     MM-;'		
 ||=>yy{w4444q!))--1RRRRs   BBrJ   rL   s    r   test_async_callsr(    s5     
S 
S %KKN s   !535c                   V    e Zd Zd Zej
                  j                  dd      d        Zy)TestStrictWrapperc                 X   t        j                  d      d        }t        j                  d      d        }t         j                  d        }t        j                  t              5 } |        ddd       dt        j                        v sJ  |         |        y# 1 sw Y   1xY w)	zJTest that assert_all_requests_are_fired could be applied to the decorator.Tr  c                      t        j                  t         j                  dd       t        j                  t         j                  dd       t        j                  d       t         j
                  j                  sJ y )Nzhttps://someapi1.com/r   https://notcalled1.com/r   rA   rB   rC   rD   r   r   r   r   r   
run_strictz9TestStrictWrapper.test_strict_wrapper.<locals>.run_strict  sL    MM)--)@)LMM)--)BINLL01>>????r   Fc                      t        j                  t         j                  dd       t        j                  t         j                  dd       t        j                  d       t         j
                  j                  rJ y )Nzhttps://someapi2.com/r   https://notcalled2.com/r.  r   r   r   run_not_strictz=TestStrictWrapper.test_strict_wrapper.<locals>.run_not_strict  O    MM)--)@)LMM)--)BINLL01 ~~CCCCCr   c                      t        j                  t         j                  dd       t        j                  t         j                  dd       t        j                  d       t         j
                  j                  rJ y )Nzhttps://someapi3.com/r   zhttps://notcalled3.com/r.  r   r   r   run_classicz:TestStrictWrapper.test_strict_wrapper.<locals>.run_classic  r3  r   Nr-  r   rK   rq   rr   r  rt   ru   )rY  r/  r2  r5  exc_infos        r   test_strict_wrapperz%TestStrictWrapper.test_strict_wrapper  s     
		$	?	@ 
@	@ 
		%	@	D 
A	D 
			D 
	D ]]>* 	hL	 )C,????	 	s   (B  B)assert_firedr  c                 ^   t        j                  |      d        t        j                  |       fd       }|r\t        j                  t              5 } |        ddd       dt        j                        v sJ dt        |j                        v sJ y |        y# 1 sw Y   DxY w)a"  Validate if assert_all_requests_are_fired is applied from the correct function.

        assert_all_requests_are_fired must be applied from the function
        where call to 'requests' is done.
        Test matrix of True/False/None values applied to validate different scenarios.
        r  c                      t        j                  t         j                  dd       t        j                  t         j                  dd       dt        j                  d      j
                  k(  sJ y )Nr-  r   http://example.com/1Hello 1r:      Hello 1r  r   r   r   wrappedz9TestStrictWrapper.test_nested_decorators.<locals>.wrapped	  sJ    MM)--)BINMM)--)?iP.D!E!M!MMMMr   c                  ^    t        j                  t         j                  dd                 y )Nr1  r   )r   rA   rB   )r?  s   r   call_another_wrapped_functionzOTestStrictWrapper.test_nested_decorators.<locals>.call_another_wrapped_function	  s    MM)--)BINIr   Nr-  r1  r6  )rY  r9  rA  r7  r?  s       @r   test_nested_decoratorsz(TestStrictWrapper.test_nested_decorators	  s     
		,	G	N 
H	N
 
		l:J	K	 
L	 ~. 0(-/0 -HNN0CCCC,HNN0CCCC)+0 0s   B##B,N)r]  r^  r_  r8  rq   r  r  rB  r   r   r   r*  r*    s/     D [[^-@A, B,r   r*  c                   ^    e Zd ZdZej
                  d        Zej
                  d        Zd Zy)TestMultipleWrappersaW  Test to validate that multiple decorators could be applied.

    Ensures that we can call one function that is wrapped with
    ``responses.activate`` decorator from within another wrapped function.

    Validates that mock patch is not leaked to other tests.
    For more detail refer to https://github.com/getsentry/responses/issues/481
    c                     t        j                  t         j                  dd       dt        j                  d      j
                  k(  sJ y )Nr<  r=  r:   r>  r  rY  s    r   test_wrappedz!TestMultipleWrappers.test_wrapped8	  s5    imm%;)LX\\*@AIIIIIr   c                 $    | j                          y r   )rG  rF  s    r   "test_call_another_wrapped_functionz7TestMultipleWrappers.test_call_another_wrapped_function=	  s    r   c                     |j                  d      j                  ddd       |j                  d      }t        j                  |      }|j
                  dk(  sJ y)z
        Validate that ``responses.activate`` does not leak to unpatched test.

        Parameters
        ----------
        httpserver : ContentServer
            Mock real HTTP server

        r  r'   r}  r  )r#   rQ   N)r  r  r  rC   rD   r)   )rY  r  rE   rF   s       r   test_mock_not_leakedz)TestMultipleWrappers.test_mock_not_leakedA	  s]     	!!#&88|C 	9 	
   %<<$##s***r   N)	r]  r^  r_  r`  r   rK   rG  rI  rK  r   r   r   rD  rD  .	  sB     J J  +r   rD  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestShortcutsc                 R    t         j                  d        } |        t                y )Nc                  ~    t        j                  dd       t        j                  d      } | j                  dk(  sJ y Nr<  ix  r  )r   deleterC   r)   rH   s    r   rI   z&TestShortcuts.test_delete.<locals>.runV	  s6    3C@??#9:D##s***r   rJ   r  s     r   test_deletezTestShortcuts.test_deleteU	  &    				+ 
	+
 	r   c                 R    t         j                  d        } |        t                y )Nc                  ~    t        j                  dd       t        j                  d      } | j                  dk(  sJ y rP  )r   rD   rC   r)   rH   s    r   rI   z#TestShortcuts.test_get.<locals>.run`	  4    MM0=<< 67D##s***r   rJ   r  s     r   test_getzTestShortcuts.test_get_	  rS  r   c                 R    t         j                  d        } |        t                y )Nc                  ~    t        j                  dd       t        j                  d      } | j                  dk(  sJ y rP  )r   headrC   r)   rH   s    r   rI   z$TestShortcuts.test_head.<locals>.runj	  4    NN1#>==!78D##s***r   rJ   r  s     r   	test_headzTestShortcuts.test_headi	  rS  r   c                 R    t         j                  d        } |        t                y )Nc                      ddi} t        j                  dd|        t        j                  d      }|j                  dk(  sJ |j                  d   dk(  sJ y )Nr,  1000r<  r&   rQ   r+   r   )r   rZ  rC   r)   r+   )r+   r!   s     r   rI   z8TestShortcuts.test_head_with_content_length.<locals>.runt	  sX    '0GNN1#wO==!78D##s***<< 01V;;;r   rJ   r  s     r   test_head_with_content_lengthz+TestShortcuts.test_head_with_content_lengths	  s&    				< 
	< 	r   c                 R    t         j                  d        } |        t                y )Nc                  ~    t        j                  dd       t        j                  d      } | j                  dk(  sJ y rP  )r   optionsrC   r)   rH   s    r   rI   z'TestShortcuts.test_options.<locals>.run	  s8    4SA##$:;D##s***r   rJ   r  s     r   test_optionszTestShortcuts.test_options	  rS  r   c                 R    t         j                  d        } |        t                y )Nc                  ~    t        j                  dd       t        j                  d      } | j                  dk(  sJ y rP  )r   r	   rC   r)   rH   s    r   rI   z%TestShortcuts.test_patch.<locals>.run	  s4    OO23?>>"89D##s***r   rJ   r  s     r   
test_patchzTestShortcuts.test_patch	  rS  r   c                 R    t         j                  d        } |        t                y )Nc                  ~    t        j                  dd       t        j                  d      } | j                  dk(  sJ y rP  )r   r:  rC   r)   rH   s    r   rI   z$TestShortcuts.test_post.<locals>.run	  r[  r   rJ   r  s     r   	test_postzTestShortcuts.test_post	  rS  r   c                 R    t         j                  d        } |        t                y )Nc                  ~    t        j                  dd       t        j                  d      } | j                  dk(  sJ y rP  )r   putrC   r)   rH   s    r   rI   z#TestShortcuts.test_put.<locals>.run	  rV  r   rJ   r  s     r   test_putzTestShortcuts.test_put	  rS  r   N)r]  r^  r_  rR  rW  r\  ra  re  rh  rk  ro  r   r   r   rM  rM  T	  s*    
r   rM  c                   "    e Zd ZdZd Zd Zd Zy)TestUnitTestPatchSetupzzValidates that ``RequestsMock`` could be used as ``mock.patch``.

    This class is present as example in README.rst

    c                     t        j                  d      | _        | j                  j                          | j                  j	                  dd       | j                  j                  dd       y )NTr  rJ    r    r   r  r  r(  rD   rn  rF  s    r   setup_methodz#TestUnitTestPatchSetup.setup_method	  sN    ,,4P-c:-c:r   c                     | j                   j                          | j                   j                          t                y r   )r  stopresetr    rF  s    r   teardown_methodz&TestUnitTestPatchSetup.teardown_method	  s'    r   c                     t        j                  d      }|j                  dk(  sJ t        j                  d      }|j                  dk(  sJ y )NrJ  rs  rt  )rC   rD   r)   rn  rY  r!   s     r   r  z$TestUnitTestPatchSetup.test_function	  sH    ||123&&&||123&&&r   Nr]  r^  r_  r`  rv  rz  r  r   r   r   rq  rq  	  s    ;'r   rq  c                   "    e Zd ZdZd Zd Zd Zy)TestUnitTestPatchSetupRaiseszrValidate that teardown raises if not all requests were executed.

    Similar to ``TestUnitTestPatchSetup``.

    c                     t        j                         | _        | j                  j                          | j                  j	                  dd       | j                  j                  dd       y )NrJ  rs  r  rt  ru  rF  s    r   rv  z)TestUnitTestPatchSetupRaises.setup_method	  sL    ,,.-c:-c:r   c                    t        j                  t              5 }| j                  j	                          d d d        | j                  j                          dt        j                        v sJ t                y # 1 sw Y   GxY w)Nz![('PUT', 'https://example.com/')])	rq   rr   r  r  rx  ry  rt   ru   r    )rY  rB  s     r   rz  z,TestUnitTestPatchSetupRaises.teardown_method	  s`    ]]>* 	cKK	2c#))nDDD	 	s   A;;Bc                 P    t        j                  d      }|j                  dk(  sJ y )NrJ  rs  )rC   rD   r)   r|  s     r   r  z*TestUnitTestPatchSetupRaises.test_function	  s%    ||123&&&r   Nr}  r   r   r   r  r  	  s    ;'r   r  c                  R    t         j                  d        }  |         t                y )Nc                     t        j                         5 } | j                          d d d        t        j                  t         j                  dd       t        j                  dd      }|j                  dk(  sJ y # 1 sw Y   WxY w)Nzhttps://example.invalidr&   r  rB   )r   r  ry  rA   rB   rC   r/   r)   )rsps2r!   s     r   rI   z%test_reset_in_the_middle.<locals>.run	  sj    ##% 	KKM	imm%>sK'@A3&&&		 	s   A<<BrJ   rL   s    r   test_reset_in_the_middler  	  s&    ' ' ENr   c                  R    t         j                  d        }  |         t                y )Nc                     t        j                  t         j                  ddddi      } t        j                  t         j                  ddddi      }t        j                  t         j                  dd      }t        j                  |        t        j                  |       t        j                  |       t	        j
                  d      }t         j                  j                          t	        j                  d	      }||_	        ||_
        t        j                  t        j                        5 }t	        j
                  d       d d d        j                  j                  d
   d	k(  sJ | j                  |j                  j                  j                   d
   j                  v sJ |j                  |j                  j                  j                   d   j                  v sJ y # 1 sw Y   xY w)Nr<  r  Locationzhttp://example.com/2r`  zhttp://example.com/3r&   r  zcustom errorr   r<   )r   r   rB   rA   rC   rD   r   ry  r   rF   r"   rq   rr   ru   r3  rE   r  )r  r  r  r  my_errorr7  s         r   rI   ztest_redirect.<locals>.run	  s    !!MM"!78	
 !!MM"!78	
 !!)--1GPST 	ddd ll12 ++N; 	]]8334 	1LL/0	1 ~~""1%777xx8>>22::1=AAAAAxx8>>22::1=AAAAA	1 	1s   1G$$G-rJ   rL   s    r   test_redirectr  	  s)    &B &BP ENr   c                   j    e Zd Zd	dZd Zej                  j                  dd      d        Zd Z	d Z
y)
TestMaxRetryc           	          t        j                         }t         j                  j                  t	        |ddgg d|            }|j                  d|       |S )Ng?r  )rB   r8  PATCH)totalbackoff_factorstatus_forcelistallowed_methodsraise_on_status)max_retrieszhttps://)rC   rx  r  r  r   ry  )rY  r  r  r|  r}  s        r   set_sessionzTestMaxRetry.set_session
  sY    ""$##//""% 8 / 0 
 	j'*r   c                      t        j                  t        j                         fd       } |        t	                y)z%This example is present in README.rstregistryc                     d} t        j                  | dd      }t        j                  | dd      }t        j                  | dd      }t        j                  | dd      }j                         }|j                  |       }|j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ y )NrJ  Errorr  rP   r'   r&   r<   )r   rD   r  r)   r{  )rE   r  r  r  rsp4r|  r!   rY  s          r   rI   z*TestMaxRetry.test_max_retries.<locals>.run,
  s    'C==73?D==73?D==73?D==4<D&&(G;;s#D##s***??a'''??a'''??a'''??a'''r   Nr   rK   r   OrderedRegistryr    r  s   ` r   test_max_retrieszTestMaxRetry.test_max_retries)
  s5     
		Z%?%?	@	( 
A	(" 	r   r  )TFc                      t        j                  t        j                         fd       } |        t	                y )Nr  c                     d} t        j                  | dd      }t        j                  | dd      }t        j                  | dd      }j                  d      }r4t        j                  t
              5  |j                  |        d d d        n"|j                  |       }|j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ y # 1 sw Y   =xY w)NrJ  r  r  rP   r?   )r  r  r<   )r   rD   r  rq   rr   r   r)   r{  )rE   r  r  r  r|  r!   r  rY  s         r   rI   z1TestMaxRetry.test_max_retries_exceed.<locals>.runC
  s    'C==73?D==73?D==73?D&&Q&PG]]:. %KK$% % {{3'''3...??a'''??a'''??a'''% %s   :C++C4r  )rY  r  rI   s   `` r   test_max_retries_exceedz$TestMaxRetry.test_max_retries_exceedA
  s3    			Z%?%?	@	( 
A	(& 	r   c                      t        j                  t        j                         fd       } |        t	                y )Nr  c                  >   d} t        j                  | dd       t        j                  | dd       j                  d      }t        j                  t
              5 }|j                  |        d d d        dt        j                        v sJ y # 1 sw Y   #xY w)NrJ  r  r  rP   r<   )r  ztoo many 500 error responses)r   rD   r  rq   rr   r   rt   ru   )rE   r|  errrY  s      r   rI   z5TestMaxRetry.test_max_retries_exceed_msg.<locals>.run[
  s    'CMM#GC8MM#GC8&&Q&/Gz* !cC ! 2S^CCC! !s   BBr  r  s   ` r   test_max_retries_exceed_msgz(TestMaxRetry.test_max_retries_exceed_msgZ
  s5    			Z%?%?	@
	D 
A
	D 	r   c                      t        j                  t        j                         fd       } |        t	                y)z;Validate that every new request uses brand-new Retry objectr  c                  J   d} t        j                  | dd      }t        j                  |       t        j                  |       t        j                  | dd      }t        j                  |       t        j                  |       t        j                  |       t        j                  |       j                         }|j                  |       }|j                  dk(  sJ |j                  |       }|j                  dk(  sJ t        t         j                        dk(  sJ y )NrJ  r  r  rP   r'   r&      )r   rD   rA   r  r)   r   r   )rE   	error_rspok_rspr|  r!   rY  s        r   rI   z6TestMaxRetry.test_adapter_retry_untouched.<locals>.runn
  s    'C!cDIMM)$MM)$]]3T#>FMM)$MM)$MM)$MM&!&&(G;;s#D##s***;;s#D##s***y'1,,,r   Nr  r  s   ` r   test_adapter_retry_untouchedz)TestMaxRetry.test_adapter_retry_untouchedk
  s5     
		Z%?%?	@	- 
A	-* 	r   N)r  T)r]  r^  r_  r  r  rq   r  r  r  r  r  r   r   r   r  r  
  s<    0 [[.> ?0"r   r  c                  R    t         j                  d        }  |         t                y)zMValidate that we attach `request` object to custom exception supplied as bodyc                  .   d} t        j                  | t        j                                	 t        j                  | d       y # t        j                  $ r<}t	        |j
                        t        j                  j                  k(  sJ Y d }~y d }~ww xY w)Nzhttps://httpbin.org/delay/2r:   r<   )rh  )r   rD   rC   ReadTimeoutr   r/   modelsrO  )rE   rB  s     r   rI   z6test_request_object_attached_to_exception.<locals>.run
  sk    +c 4 4 67	HLLa(## 	H$(G(GGGG	Hs   A B2BBNrJ   rL   s    r   )test_request_object_attached_to_exceptionr  
  s*     H H ENr   )Nr}  )r  r  rg   r  ior   r   typingr   r   r   unittest.mockr   r	   rq   rC   r7  requests.exceptionsr
   r   r   r   urllib3.util.retryr   r   r   r   r   r   r   r   r   r    r-   r4   rM   rT   rZ   r  r  rB   rh   rn   rw   r{   r   r   r   r8  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=  rC  rG  rK  rP  rR  r  r  fixturer  r  usefixturesr  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r%  r)  r;  rC  rF  rK  rQ  rU  rZ  r^  rb  rf  rl  ro  rt  ry  r{  r  r  r  r  r  r  r  r  r  r  PUTr  r  r  r  r%  asyncior(  r*  rD  rM  rq  r  r  r  r  r  r   r   r   <module>r     s    	 	            4 / ) * $  "  & )    % LX	
	c]	9H			O(
( <IMM/GH }}*B	
 BJJ12BJJ12	
 ! 6 	!:2::.H#IJ	.	/1IJ  <IMM/GH }}*B	
 BJJ12BJJ12	
 ! , <IMM/GH }}*B	
 BJJ12BJJ12	
 ! "4 *
--	rIMM3#7TB
--	rIMM3#7UC
--	rINNC#8"eD]]C  $']]C 	
	&&" "<8
	&	
 :
J
U
<((0&6:&,6? ?D(
:       ^4	@ 	@ 5	@#":$	N..4 )+>?+-@A B @<& 	-`,*Z,
.&R0 (4$68.j jZA 	,$ 	C>:D<0 . !}}-BC=	
 $..3 2	C	
 $--) +$e,%|4M	
)"%L5M%L5< $2  $>, >,B#+ #+LQ Qh' '6' '6
+\l l^r   