
    Nwg`9                        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
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mZ d dlmZ d,dZer G d dej8                  j:                  j<                  j>                        Z  G d d      Z! G d dejD                  jF                        Z$ G d dejJ                        Z&nd Z&e G d dej                        Z'nd Z' G d de      Z( G d de      Z) G d d e(e      Z* G d! d"ejV                        Z, G d# d$ejZ                        Z. G d% d&ej^                        Z0 G d' d(ejb                        Z2d) Z3 G d* d+ej^                        Z4y)-    N)import_module)settingsImproperlyConfigured)WSGIHandler)override_settings	testcases)Client)ClientHandler)RequestFactory)force_bytes)	urlencode)coreapirequests)api_settingsc                      || _         || _        y N)_force_auth_user_force_auth_token)requestusertokens      J/var/www/horilla/myenv/lib/python3.12/site-packages/rest_framework/test.pyforce_authenticater      s    #G %G    c                       e Zd Zd Zy)
HeaderDictc                 $    | j                  |      S r   )
getheaders)selfkeydefaults      r   get_allzHeaderDict.get_all   s    ??3''r   N)__name__
__module____qualname__r#    r   r   r   r      s    	(r   r   c                       e Zd Zd Zd Zd Zy)MockOriginalResponsec                 2    t        |      | _        d| _        y NF)r   msgclosed)r    headerss     r   __init__zMockOriginalResponse.__init__   s    !'*DHDKr   c                     | j                   S r   r-   r    s    r   isclosedzMockOriginalResponse.isclosed#   s    ;;r   c                     d| _         y )NTr1   r2   s    r   closezMockOriginalResponse.close&   s	    DKr   N)r$   r%   r&   r/   r3   r5   r'   r   r   r)   r)      s    	 		r   r)   c                   (    e Zd ZdZd Zd Zd Zd Zy)DjangoTestAdapterz
        A transport adapter for `requests`, that makes requests via the
        Django WSGI app, rather than making actual HTTP requests over the network.
        c                 @    t               | _        t               | _        y r   )r   appDjangoRequestFactoryfactoryr2   s    r   r/   zDjangoTestAdapter.__init__.   s    "}DH/1DLr   c                    |j                   }|j                  }i }|j                  Ct        |j                  d      r|j                  j	                         |d<   n|j                  |d<   d|j
                  v r|j
                  d   |d<   |j
                  j                         D ]2  \  }}|j                         }|dv r||d|j                  dd      z  <   4  | j                  j                  ||fi |j                  S )	zb
            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hasattrr=   r.   itemsupperreplacer;   genericenviron)r    r   rC   rD   kwargsr!   values          r   get_environzDjangoTestAdapter.get_environ2   s     ^^F++CF ||'7<<0%,\\%6%6%8F6N%,\\F6N0)0)H~& &oo335 B
UiikJJ<Ay3;;sC#889	B (4<<''>v>FFFr   c                    i dfd	}| j                  |      }| j                  ||      }t        j                  dj	                  |            d<   t        j                  j                  j                  di }| j                  ||      S )zR
            Make an outgoing request to the Django WSGI application.
            c                     | j                  d      \  }}}t        |      d<   |d<   |d<   dd<   dd<   t        |      d	<   y )
N statusreasonr.      versionFpreload_contentoriginal_response)	partitionintr)   )wsgi_statuswsgi_headersexc_inforR   rB   rS   
raw_kwargss         r   start_responsez.DjangoTestAdapter.send.<locals>.start_responseR   sa    $/$9$9#$>!6'*6{
8$'-
8$(4
9%(*
9%05
,-2F|2T
./r   r   rE   r   r'   )
rN   r9   ioBytesIOjoinr   packagesurllib3HTTPResponsebuild_response)	r    r   argsrL   r^   rK   wsgi_responserawr]   s	           @r   sendzDjangoTestAdapter.sendL   s     JU &&w/G HHWn=M "$CHH],C!DJv##++88F:FC &&w44r   c                      y r   r'   r2   s    r   r5   zDjangoTestAdapter.closef   s    r   N)r$   r%   r&   __doc__r/   rN   ri   r5   r'   r   r   r7   r7   )   s    		2	G4	54	r   r7   c                   (     e Zd Z fdZ fdZ xZS )RequestsClientc                     t        |   |i | t               }| j                  d|       | j                  d|       y )Nzhttp://zhttps://)superr/   r7   mount)r    rf   rL   adapter	__class__s       r   r/   zRequestsClient.__init__j   s9    Gd-f-')GJJy'*JJz7+r   c                 j    |j                  d      st        d|z        t        |   ||g|i |S )NhttpzPMissing "http:" or "https:". Use a fully qualified URL, eg "http://testserver%s")
startswith
ValueErrorro   r   )r    rC   rD   rf   rL   rr   s        r   r   zRequestsClient.requestp   s<    >>&) !svy!yzz7?63@@@@r   )r$   r%   r&   r/   r   __classcell__rr   s   @r   rm   rm   i   s    	,	A 	Ar   rm   c                      t        d      )Nz:requests must be installed in order to use RequestsClient.r   rf   rL   s     r   rm   rm   v   s    "#_``r   c                   .     e Zd Z fdZed        Z xZS )CoreAPIClientc                     t               | _        t        j                  j	                  | j
                        g|d<   t        |   |i | y )N)session
transports)rm   _sessionr   r   HTTPTransportr~   ro   r/   r    rf   rL   rr   s      r   r/   zCoreAPIClient.__init__|   sD    *,DM$+$6$6$D$DT\\$D$Z#[F< Gd-f-r   c                     | j                   S r   )r   r2   s    r   r~   zCoreAPIClient.session   s    == r   )r$   r%   r&   r/   propertyr~   rw   rx   s   @r   r|   r|   {   s    	.
 
	! 
	!r   r|   c                      t        d      )Nz8coreapi must be installed in order to use CoreAPIClient.r   rz   s     r   r|   r|      s    "#]^^r   c                        e Zd Zej                  Zej                  Zd fd	ZddZ	ddZ
ddZddZddZddZddZ	 	 d fd		Z fd
Z xZS )APIRequestFactoryc                     || _         i | _        | j                  D ]  }|| j                  |j                  <    t	        |   di | y Nr'   )enforce_csrf_checksrenderer_classesrenderer_classes_listformatro   r/   )r    r   defaultsclsrr   s       r   r/   zAPIRequestFactory.__init__   sL    #6  "-- 	4C03D!!#**-	4$8$r   c                 B   |d|fS |	|J d       |rt        |t        j                        }||fS |xs | j                  }|| j                  v sDJ dj                  |dj                  | j                  D cg c]
  }d|z   dz    c}                    | j                  |          }|j                  |      }|j                  }|j                  rdj                  ||j                        }t        |t              r|j                  |j                        }||fS c c}w )zP
        Encode the data returning a two tuple of (bytes, content_type)
         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={})r   r   DEFAULT_CHARSETdefault_formatr   r   ra   render
media_typecharset
isinstancestrencode)r    r>   r   r?   retfmtrenderers          r   _encode_datazAPIRequestFactory._encode_data   s=   
 <%%~!5 	
?	
5 dH$<$<=C: L  5 2t22FT222 ))/II$:O:OP3sSy3PQ*2 5t,,V46H//$'C $..L/66 ("2"2 
 #s#jj!1!12L  ' Qs   6Dc                     dt        |xs i d      i}|s7d|v r3t        |j                  d      d         }|j                  d      }||d<   |j	                  |        | j
                  d|fi |S )NQUERY_STRINGT)doseq?   z
iso-8859-1GET)r   r   splitdecodeupdaterJ   )r    pathr>   extrarquery_strings         r   getzAPIRequestFactory.get   sz    Idjb=
 t 'tzz#q'9:L'..|<L ,An	t||E4-1--r   c                 Z    | j                  |||      \  }} | j                  d|||fi |S )NPOSTr   rJ   r    r   r>   r   r?   r   s         r   postzAPIRequestFactory.post   s7    !..tV\Jlt||FD$FFFr   c                 Z    | j                  |||      \  }} | j                  d|||fi |S )NPUTr   r   s         r   putzAPIRequestFactory.put   s7    !..tV\Jlt||E4|EuEEr   c                 Z    | j                  |||      \  }} | j                  d|||fi |S )NPATCHr   r   s         r   patchzAPIRequestFactory.patch   s7    !..tV\Jlt||GT4GGGr   c                 Z    | j                  |||      \  }} | j                  d|||fi |S )NDELETEr   r   s         r   deletezAPIRequestFactory.delete   s7    !..tV\Jlt||HdD,H%HHr   c                 Z    | j                  |||      \  }} | j                  d|||fi |S )NOPTIONSr   r   s         r   optionszAPIRequestFactory.options   s7    !..tV\Jlt||ItT<I5IIr   c                 L    |t        |      |d<   t        |   |||||fi |S )NCONTENT_TYPE)r   ro   rJ   )r    rC   r   r>   r?   securer   rr   s          r   rJ   zAPIRequestFactory.generic   s>     #$'$5E.!wD$f?8=? 	?r   c                 J    t        |   di |}| j                   |_        |S r   )ro   r   r   _dont_enforce_csrf_checks)r    rL   r   rr   s      r   r   zAPIRequestFactory.request   s*    '/+F+040H0H,H)r   FNNr   )NNN)r   zapplication/octet-streamF)r$   r%   r&   r   TEST_REQUEST_RENDERER_CLASSESr   TEST_REQUEST_DEFAULT_FORMATr   r/   r   r   r   r   r   r   r   rJ   r   rw   rx   s   @r   r   r      s_    (FF!==N%+!Z.GFHIJ *,@E? r   r   c                   ,     e Zd ZdZ fdZ fdZ xZS )ForceAuthClientHandlerzj
    A patched version of ClientHandler that can enforce authentication
    on the outgoing requests.
    c                 @    d | _         d | _        t        |   |i | y r   )_force_user_force_tokenro   r/   r   s      r   r/   zForceAuthClientHandler.__init__   s%     $)&)r   c                 d    t        || j                  | j                         t        |   |      S r   )r   r   r   ro   get_response)r    r   rr   s     r   r   z#ForceAuthClientHandler.get_response   s-     	7D$4$4d6G6GHw#G,,r   )r$   r%   r&   rk   r/   r   rw   rx   s   @r   r   r      s    
*
- -r   r   c                        e Zd Zd fd	Zd ZddZ fdZd fd	Z	 	 d fd	Z	 	 d fd	Z		 	 d fd	Z
	 	 d fd		Z	 	 d fd
	Z fdZ xZS )	APIClientc                 R    t        |   di | t        |      | _        i | _        y r   )ro   r/   r   handler_credentials)r    r   r   rr   s      r   r/   zAPIClient.__init__  s(    $8$-.ABr   c                     || _         y)zK
        Sets headers that will be used on every outgoing request.
        N)r   )r    rL   s     r   credentialszAPIClient.credentials
  s     #r   c                 t    || j                   _        || j                   _        ||| j                          yyy)zd
        Forcibly authenticates outgoing requests with the given
        user and/or token.
        N)r   r   r   logout)r    r   r   s      r   r   zAPIClient.force_authenticate  s5    
 $( $)!<EMKKM *<r   c                 X    |j                  | j                         t        |   di |S r   )r   r   ro   r   )r    rL   rr   s     r   r   zAPIClient.request  s'    d''(w(((r   c                 Z    t        |   |fd|i|}|r | j                  |fd|i|}|S )Nr>   )ro   r   _handle_redirects)r    r   r>   followr   responserr   s         r   r   zAPIClient.get  s?    7;t8$8%8-t--hKTKUKHr   c                 b    t        |   |f|||d|}|r | j                  |f|||d|}|S N)r>   r   r?   )ro   r   r   	r    r   r>   r   r?   r   r   r   rr   s	           r   r   zAPIClient.post%  sU    7<PFPINP-t--huT&_kuotuHr   c                 b    t        |   |f|||d|}|r | j                  |f|||d|}|S r   )ro   r   r   r   s	           r   r   zAPIClient.put-  sU    7;PFPINP-t--huT&_kuotuHr   c                 b    t        |   |f|||d|}|r | j                  |f|||d|}|S r   )ro   r   r   r   s	           r   r   zAPIClient.patch5  sU    7=PFPINP-t--huT&_kuotuHr   c                 b    t        |   |f|||d|}|r | j                  |f|||d|}|S r   )ro   r   r   r   s	           r   r   zAPIClient.delete=  sU    7>PFPINP-t--huT&_kuotuHr   c                 b    t        |   |f|||d|}|r | j                  |f|||d|}|S r   )ro   r   r   r   s	           r   r   zAPIClient.optionsE  sU    7?PFPINP-t--huT&_kuotuHr   c                     i | _         d | j                  _        d | j                  _        | j                  rt
        |           y y r   )r   r   r   r   r~   ro   r   )r    rr   s    r   r   zAPIClient.logoutM  s;     $( $(!<<GN r   r   r   r+   )NNNF)r$   r%   r&   r/   r   r   r   r   r   r   r   r   r   r   rw   rx   s   @r   r   r     so    
#)
 ?C >B @D AE BF r   r   c                       e Zd ZeZy)APITransactionTestCaseNr$   r%   r&   r   client_classr'   r   r   r   r   X      Lr   r   c                       e Zd ZeZy)APITestCaseNr   r'   r   r   r   r   \  r   r   r   c                       e Zd ZeZy)APISimpleTestCaseNr   r'   r   r   r   r   `  r   r   r   c                       e Zd ZeZy)APILiveServerTestCaseNr   r'   r   r   r   r   d  r   r   r   c                 l    t        | d      r| j                  | j                  _        y | j                  `y )N_module_urlpatterns)rF   r   _moduleurlpatterns)r   s    r   cleanup_url_patternsr   h  s)    s)*"%"9"9KK#r   c                   ,     e Zd ZdZe fd       Z xZS )URLPatternsTestCaseaC  
    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                    t        | j                        | _        t        | j                        | _        t        | j                  d      r| j                  j                  | _        | j                  | j                  _        | j                  j                          | j                  | j                  j                         | j                  t        |        t        | 5          y )N)ROOT_URLCONFr   )r   r%   r   r   	_overriderF   r   r   enableaddClassCleanupdisabler   ro   
setUpClass)r   rr   s    r   r   zURLPatternsTestCase.setUpClass  s     $CNN3)s~~F3;;.&)kk&=&=C#"%//CMM1120#6r   )r$   r%   r&   rk   classmethodr   rw   rx   s   @r   r   r   o  s      r   r   r   )5r_   	importlibr   django.confr   django.core.exceptionsr   django.core.handlers.wsgir   django.testr   r	   django.test.clientr
   DjangoClientr   r   r:   django.utils.encodingr   django.utils.httpr   rest_framework.compatr   r   rest_framework.settingsr   r   rb   rc   _collectionsHTTPHeaderDictr   r)   adaptersHTTPAdapterr7   Sessionrm   r|   r   r   r   TransactionTestCaser   TestCaser   SimpleTestCaser   LiveServerTestCaser   r   r   r'   r   r   <module>r     sG   
 #   7 1 4 5 , E - ' 3 0&
 (X&&..;;JJ (	 	>H--99 >@
A)) 
Aa ! !_e, eP-] -$Q!< QhY:: )$$ 	00 I88 $ )22  r   