
    h9                        S SK r S SKJr  S SKJr  S SKJr  S SKJr  S SK	J
r
Jr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJrJr  S SKJr  S,S jr\br   " S S\R8                  R:                  R<                  R>                  5      r  " S S5      r! " S S\RD                  RF                  5      r$ " S S\RJ                  5      r&OS r&\b   " S S\R                  5      r'OS r' " S S\5      r( " S S\5      r) " S S \(\5      r* " S! S"\RV                  5      r, " S# S$\RZ                  5      r. " S% S&\R^                  5      r0 " S' S(\Rb                  5      r2S) r3 " S* S+\R^                  5      r4g)-    N)import_module)settingsImproperlyConfigured)WSGIHandler)override_settings	testcases)Client)ClientHandler)RequestFactory)force_bytes)	urlencode)coreapirequests)api_settingsc                     Xl         X l        g N)_force_auth_user_force_auth_token)requestusertokens      E/var/www/html/env/lib/python3.13/site-packages/rest_framework/test.pyforce_authenticater      s    # %    c                       \ rS rSrS rSrg)
HeaderDict   c                 $    U R                  U5      $ r   )
getheaders)selfkeydefaults      r   get_allHeaderDict.get_all   s    ??3''r    N)__name__
__module____qualname____firstlineno__r$   __static_attributes__r&   r   r   r   r      s    	(r   r   c                   &    \ rS rSrS rS rS rSrg)MockOriginalResponse   c                 2    [        U5      U l        SU l        g NF)r   msgclosed)r!   headerss     r   __init__MockOriginalResponse.__init__   s    !'*DHDKr   c                     U R                   $ r   r2   r!   s    r   isclosedMockOriginalResponse.isclosed#   s    ;;r   c                     SU l         g )NTr7   r8   s    r   closeMockOriginalResponse.close&   s	    DKr   )r2   r1   N)r'   r(   r)   r*   r4   r9   r<   r+   r&   r   r   r-   r-      s    	 		r   r-   c                   0    \ rS rSrSrS rS rS rS rSr	g)	DjangoTestAdapter)   z
A transport adapter for `requests`, that makes requests via the
Django WSGI app, rather than making actual HTTP requests over the network.
c                 @    [        5       U l        [        5       U l        g r   )r   appDjangoRequestFactoryfactoryr8   s    r   r4   DjangoTestAdapter.__init__.   s    "}DH/1DLr   c                    UR                   nUR                  n0 nUR                  bH  [        UR                  S5      (       a  UR                  R	                  5       US'   OUR                  US'   SUR
                  ;   a  UR
                  S   US'   UR
                  R                  5        H4  u  pVUR                  5       nUS;   a  M  XdSUR                  SS5      -  '   M6     U R                  R                  " X#40 UD6R                  $ )	zJ
Given a `requests.PreparedRequest` instance, return a WSGI environ dict.
readdatazcontent-typecontent_type)
CONNECTIONzCONTENT-LENGTHzCONTENT-TYPEzHTTP_%s-_)methodurlbodyhasattrrG   r3   itemsupperreplacerD   genericenviron)r!   r   rM   rN   kwargsr"   values          r   get_environDjangoTestAdapter.get_environ2   s     ^^F++CF ||'7<<00%,\\%6%6%8F6N%,\\F6N0)0)H~& &oo335
iikJJ<Ay3;;sC#889	 6 <<''>v>FFFr   c                 "  ^ 0 mSU4S jjnU R                  U5      nU R                  XT5      n[        R                  " SR	                  U5      5      TS'   [
        R                  R                  R                  " S0 TD6nU R                  X5      $ )z:
Make an outgoing request to the Django WSGI application.
c                    > U R                  S5      u  p4n[        U5      TS'   UTS'   UTS'   STS'   STS'   [        U5      TS	'   g )
N statusreasonr3      versionFpreload_contentoriginal_response)	partitionintr-   )wsgi_statuswsgi_headersexc_infor]   rL   r^   
raw_kwargss         r   start_response.DjangoTestAdapter.send.<locals>.start_responseR   s_    $/$9$9#$>!6'*6{
8$'-
8$(4
9%(*
9%05
,-2F|2T
./r   r   rO   r   r&   )
rX   rB   ioBytesIOjoinr   packagesurllib3HTTPResponsebuild_response)	r!   r   argsrV   ri   rU   wsgi_responserawrh   s	           @r   sendDjangoTestAdapter.sendL   s     JU &&w/G HHW=M "$CHH],C!DJv##++88F:FC &&w44r   c                     g r   r&   r8   s    r   r<   DjangoTestAdapter.closef   s    r   )rB   rD   N)
r'   r(   r)   r*   __doc__r4   rX   ru   r<   r+   r&   r   r   r?   r?   )   s    		2	G4	54	r   r?   c                   4   ^  \ rS rSrU 4S jrU 4S jrSrU =r$ )RequestsClienti   c                    > [         TU ]  " U0 UD6  [        5       nU R                  SU5        U R                  SU5        g )Nzhttp://zhttps://)superr4   r?   mount)r!   rr   rV   adapter	__class__s       r   r4   RequestsClient.__init__j   s9    Gd-f-')GJJy'*JJz7+r   c                 t   > UR                  S5      (       d  [        SU-  5      e[        TU ]  " X/UQ70 UD6$ )NhttpzPMissing "http:" or "https:". Use a fully qualified URL, eg "http://testserver%s")
startswith
ValueErrorr~   r   )r!   rM   rN   rr   rV   r   s        r   r   RequestsClient.requestp   s=    >>&)) !svy!yzz7?6@@@@r   r&   )r'   r(   r)   r*   r4   r   r+   __classcell__r   s   @r   r{   r{   i   s    	,	A 	Ar   r{   c                      [        S5      e)Nz:requests must be installed in order to use RequestsClient.r   rr   rV   s     r   r{   r{   v   s    "#_``r   c                   8   ^  \ rS rSrU 4S jr\S 5       rSrU =r$ )CoreAPIClient{   c                    > [        5       U l        [        R                  R	                  U R
                  S9/US'   [        TU ]  " U0 UD6  g )N)session
transports)r{   _sessionr   r   HTTPTransportr   r~   r4   r!   rr   rV   r   s      r   r4   CoreAPIClient.__init__|   sD    *,DM$+$6$6$D$DT\\$D$Z#[F< Gd-f-r   c                     U R                   $ r   r   r8   s    r   r   CoreAPIClient.session   s    == r   r   )	r'   r(   r)   r*   r4   propertyr   r+   r   r   s   @r   r   r   {   s    	.
 
	! 
	!r   r   c                      [        S5      e)Nz8coreapi must be installed in order to use CoreAPIClient.r   r   s     r   r   r      s    "#]^^r   c                      ^  \ rS rSr\R
                  r\R                  rSU 4S jjr	SS jr
SS jrSS jrSS jrSS jrSS jrSS	 jr  SU 4S
 jjrU 4S jrSrU =r$ )APIRequestFactory   c                    > Xl         0 U l        U R                   H  nX0R                  UR                  '   M     [        TU ]  " S0 UD6  g Nr&   )enforce_csrf_checksrenderer_classesrenderer_classes_listformatr~   r4   )r!   r   defaultsclsr   s       r   r4   APIRequestFactory.__init__   sC    #6  "--C03!!#**- .$8$r   c                    Uc  SU4$ Ub
  Ub   S5       eU(       a/   U R                  X5      n[        U[        R                  5      nXC4$ U=(       d    U R
                  nX R                  ;   dG   SR                  USR                  U R                   Vs/ s H  nSU-   S-   PM     sn5      5      5       eU R                  U   " 5       nUR                  U5      nUR                  nUR                  (       a  SR                  X6R                  5      n[        U[        5      (       a  UR                  UR                  5      nXC4$ ! [         a     GN%f = fs  snf )z@
Encode the data returning a two tuple of (bytes, content_type)
r   z1You may not set both `format` and `content_type`.zqInvalid format '{}'. Available formats are {}. Set TEST_REQUEST_RENDERER_CLASSES to enable extra request formats.z, 'z{}; charset={})_encode_jsonAttributeErrorr   r   DEFAULT_CHARSETdefault_formatr   r   rm   render
media_typecharset
isinstancestrencode)r!   rH   r   rI   retfmtrenderers          r   _encode_dataAPIRequestFactory._encode_data   sg    <&&~!5 	
?	
5 ((<
 dH$<$<=C:   5 2t22F222 ))/II$:O:OP:O3sSy3:OPQ*2 ,,V46H//$'C $..L/66 "2"2 
 #s##jj!1!12  C "  Qs   E E
EEc                     S[        U=(       d    0 SS90nU(       d8  SU;   a2  [        UR                  S5      S   5      nUR                  S5      nXTS'   UR	                  U5        U R
                  " SU40 UD6$ )NQUERY_STRINGT)doseq?   z
iso-8859-1GET)r   r   splitdecodeupdaterT   )r!   pathrH   extrarquery_strings         r   getAPIRequestFactory.get   sv    Idjb=
 t 'tzz#q'9:L'..|<L ,n	||E4-1--r   c                 T    U R                  X#U5      u  p$U R                  " SXU40 UD6$ )NPOSTr   rT   r!   r   rH   r   rI   r   s         r   postAPIRequestFactory.post   s/    !..t\J||FDFFFr   c                 T    U R                  X#U5      u  p$U R                  " SXU40 UD6$ )NPUTr   r   s         r   putAPIRequestFactory.put   s/    !..t\J||E4|EuEEr   c                 T    U R                  X#U5      u  p$U R                  " SXU40 UD6$ )NPATCHr   r   s         r   patchAPIRequestFactory.patch   s/    !..t\J||GTGGGr   c                 T    U R                  X#U5      u  p$U R                  " SXU40 UD6$ )NDELETEr   r   s         r   deleteAPIRequestFactory.delete   s/    !..t\J||Hd,H%HHr   c                 T    U R                  X#U5      u  p$U R                  " SXU40 UD6$ )NOPTIONSr   r   s         r   optionsAPIRequestFactory.options   s/    !..t\J||It<I5IIr   c                 L   > Ub  [        U5      US'   [        TU ]  " XX4U40 UD6$ )NCONTENT_TYPE)r   r~   rT   )r!   rM   r   rH   rI   securer   r   s          r   rT   APIRequestFactory.generic   s:     #$'$5E.!w$f?8=? 	?r   c                 T   > [         TU ]  " S0 UD6nU R                  (       + Ul        U$ r   )r~   r   r   _dont_enforce_csrf_checks)r!   rV   r   r   s      r   r   APIRequestFactory.request   s*    '/+F+040H0H,H)r   )r   r   FNNr   )NNN) zapplication/octet-streamF)r'   r(   r)   r*   r   TEST_REQUEST_RENDERER_CLASSESr   TEST_REQUEST_DEFAULT_FORMATr   r4   r   r   r   r   r   r   r   rT   r   r+   r   r   s   @r   r   r      s_    (FF!==N%/!b.GFHIJ *,@E? r   r   c                   8   ^  \ rS rSrSrU 4S jrU 4S jrSrU =r$ )ForceAuthClientHandler   z^
A patched version of ClientHandler that can enforce authentication
on the outgoing requests.
c                 B   > S U l         S U l        [        TU ]  " U0 UD6  g r   )_force_user_force_tokenr~   r4   r   s      r   r4   ForceAuthClientHandler.__init__   s%     $)&)r   c                 b   > [        XR                  U R                  5        [        TU ]  U5      $ r   )r   r   r   r~   get_response)r!   r   r   s     r   r   #ForceAuthClientHandler.get_response  s+     	7$4$4d6G6GHw#G,,r   )r   r   )	r'   r(   r)   r*   ry   r4   r   r+   r   r   s   @r   r   r      s    
*
- -r   r   c                      ^  \ rS rSrSU 4S jjrS rSS jrU 4S jrSU 4S jjr  SU 4S jjr	  SU 4S jjr
  SU 4S	 jjr  SU 4S
 jjr  SU 4S jjrU 4S jrSrU =r$ )	APIClienti  c                 T   > [         TU ]  " S0 UD6  [        U5      U l        0 U l        g r   )r~   r4   r   handler_credentials)r!   r   r   r   s      r   r4   APIClient.__init__	  s(    $8$-.ABr   c                     Xl         g)z;
Sets headers that will be used on every outgoing request.
N)r   )r!   rV   s     r   credentialsAPIClient.credentials  s
     #r   c                 t    XR                   l        X R                   l        Uc  Uc  U R                  5         ggg)zL
Forcibly authenticates outgoing requests with the given
user and/or token.
N)r   r   r   logout)r!   r   r   s      r   r   APIClient.force_authenticate  s1    
 $( $)!<EMKKM *<r   c                 Z   > UR                  U R                  5        [        TU ]  " S0 UD6$ r   )r   r   r~   r   )r!   rV   r   s     r   r   APIClient.request  s'    d''(w(((r   c                 f   > [         TU ]  " U4SU0UD6nU(       a  U R                  " U4SU0UD6nU$ )NrH   )r~   r   _handle_redirects)r!   r   rH   followr   responser   s         r   r   APIClient.get#  s=    7;t8$8%8--hKTKUKHr   c                 j   > [         TU ]  " U4X#US.UD6nU(       a  U R                  " U4X#US.UD6nU$ N)rH   r   rI   )r~   r   r  	r!   r   rH   r   rI   r  r   r  r   s	           r   r   APIClient.post)  sO    7<PPINP--huT_kuotuHr   c                 j   > [         TU ]  " U4X#US.UD6nU(       a  U R                  " U4X#US.UD6nU$ r  )r~   r   r  r  s	           r   r   APIClient.put1  sO    7;PPINP--huT_kuotuHr   c                 j   > [         TU ]  " U4X#US.UD6nU(       a  U R                  " U4X#US.UD6nU$ r  )r~   r   r  r  s	           r   r   APIClient.patch9  sO    7=PPINP--huT_kuotuHr   c                 j   > [         TU ]  " U4X#US.UD6nU(       a  U R                  " U4X#US.UD6nU$ r  )r~   r   r  r  s	           r   r   APIClient.deleteA  sO    7>PPINP--huT_kuotuHr   c                 j   > [         TU ]  " U4X#US.UD6nU(       a  U R                  " U4X#US.UD6nU$ r  )r~   r   r  r  s	           r   r   APIClient.optionsI  sO    7?PPINP--huT_kuotuHr   c                    > 0 U l         S U R                  l        S U R                  l        U R                  (       a  [
        TU ]  5         g g r   )r   r   r   r   r   r~   r   )r!   r   s    r   r   APIClient.logoutQ  s;     $( $(!<<GN r   )r   r   r   r   r0   )NNNF)r'   r(   r)   r*   r4   r   r   r   r   r   r   r   r   r   r   r+   r   r   s   @r   r   r     so    
#)
 ?C >B @D AE BF r   r   c                       \ rS rSr\rSrg)APITransactionTestCasei\  r&   Nr'   r(   r)   r*   r   client_classr+   r&   r   r   r  r  \      Lr   r  c                       \ rS rSr\rSrg)APITestCasei`  r&   Nr  r&   r   r   r  r  `  r  r   r  c                       \ rS rSr\rSrg)APISimpleTestCaseid  r&   Nr  r&   r   r   r  r  d  r  r   r  c                       \ rS rSr\rSrg)APILiveServerTestCaseih  r&   Nr  r&   r   r   r  r  h  r  r   r  c                 v    [        U S5      (       a  U R                  U R                  l        g U R                  ?g )N_module_urlpatterns)rP   r   _moduleurlpatterns)r   s    r   cleanup_url_patternsr#  l  s,    s)**"%"9"9KK#r   c                   6   ^  \ rS rSrSr\U 4S j5       rSrU =r$ )URLPatternsTestCaseis  a  
Isolate URL patterns on a per-TestCase basis. For example,

class ATestCase(URLPatternsTestCase):
    urlpatterns = [...]

    def test_something(self):
        ...

class AnotherTestCase(URLPatternsTestCase):
    urlpatterns = [...]

    def test_something_else(self):
        ...
c                   > [        U R                  5      U l        [        U R                  S9U l        [        U R                  S5      (       a  U R                  R                  U l        U R                  U R                  l        U R                  R                  5         U R                  U R                  R                  5        U R                  [        U 5        [        TU ]5  5         g )N)ROOT_URLCONFr"  )r   r(   r!  r   	_overriderP   r"  r   enableaddClassCleanupdisabler#  r~   
setUpClass)r   r   s    r   r,  URLPatternsTestCase.setUpClass  s     $CNN3)s~~F3;;..&)kk&=&=C#"%//CMM1120#6r   r&   )	r'   r(   r)   r*   ry   classmethodr,  r+   r   r   s   @r   r%  r%  s  s      r   r%  r   )5rk   	importlibr   django.confr   django.core.exceptionsr   django.core.handlers.wsgir   django.testr   r	   django.test.clientr
   DjangoClientr   r   rC   django.utils.encodingr   django.utils.httpr   rest_framework.compatr   r   rest_framework.settingsr   r   rn   ro   _collectionsHTTPHeaderDictr   r-   adaptersHTTPAdapterr?   Sessionr{   r   r   r   r   TransactionTestCaser  TestCaser  SimpleTestCaser  LiveServerTestCaser  r#  r%  r&   r   r   <module>rC     sG   
 #   7 1 4 5 , E - ' 3 0&
 (X&&..;;JJ (	 	>H--99 >@
A)) 
Aa ! !_i, iX-] -$Q!< QhY:: )$$ 	00 I88 $ )22  r   