
    ]j,                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ dZ	dZ
dZdZdZd	Zd
Zej                   j"                  Z ej&                         Ze j*                  d        Zd Zd Z G d de      Z G d de      ZeZy)    N)adapter)
exceptionsDELETEGETHEADOPTIONSPATCHPOSTPUTc              #      K   i }t         j                  j                  dk\  r| |d<   t        j                  di |sd}t        |      	 d  t        j                          y # t        j                          w xY ww)N   timeoutz=Could not acquire threading lock - possible deadlock scenario )sysversion_infomajor
_send_lockacquire	Exceptionrelease)r   kwargsms      >/root/env/lib/python3.12/site-packages/requests_mock/mocker.pythreading_rlockr   (   si     F
"#y''Kl
s   AA<
A# A<#A99A<c                 R    t        | t        j                        rt        | d      ryy)zJ
    bound_method 's self is a obj
    unbound_method 's self is None
    __self__TF)
isinstancetypes
MethodTypehasattr)methods    r   _is_bound_methodr"   9   s#    
 &%**+
0K    c                     t        | t              s!t        |      st        j                  ||       }t        | ||       y)z Set a mocked method onto the target.

    Target may be either an instance of a Session object of the
    requests.Session class. First we Bind the method if it's an instance.

    If method is a bound_method, can direct setattr
    N)r   typer"   r   r   setattr)targetnamer!   s      r   _set_methodr)   D   s4     fd#,<V,D!!&&1FD&!r#   c                   t    e Zd ZdZh dZdZ	 ddZd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zy)
MockerCorezA wrapper around common mocking functions.

    Automate the process of mocking the requests library. This will keep the
    same general options available and prevent repeating code.
    >   resetcalled
call_countadd_matchercalled_oncelast_requestrequest_historyFNc                    |r%t        |t        j                        st        d      |xs t        j                  | _        |j                  d| j                        | _        |j                  dd       xs  t        j                  | j                        | _	        |j                  dd       | _
        |j                  dd      | _        d | _        |rt        dd	j                  |      z        y )
Nz,Only a requests.Session object can be mockedcase_sensitiver   )r4   json_encoder	real_httpFzUnexpected Arguments: %sz, )r   requestsSession	TypeError_mock_targetpopr4   r   Adapter_adapter_json_encoderr6   
_last_sendjoin)selfsessionr   s      r   __init__zMockerCore.__init__z   s    :gx/?/?@JKK#7x'7'7$jj)94;N;NOJJy$' @OO4+>+>? 	
 $ZZ=K7669JJKK r#   c                       j                   rt        d       j                  j                   _          j                  j                   _         fd fd}t         j                  d|       y)znStart mocking requests.

        Install the adapter and the wrappers required to intercept requests.
        zMocker has already been startedc                     j                   S N)r=   )rB   urlrA   s     r   _fake_get_adapterz+MockerCore.start.<locals>._fake_get_adapter   s    == r#   c                    t        d      5  t        | d       	 t        | |fi |t        | dj                         cd d d        S # t        j
                  $ r j                  s Y nt        j                  $ r Y nw xY wt        | dj                         n# t        | dj                         w xY w	 d d d        n# 1 sw Y   nxY wt        j                  t              r j                  | |fi |S  j                  |fi |S )N
   )r   get_adapter)r   r)   _original_send_last_get_adapterr   NoMockAddressr6   r   _RunRealHTTPr   r:   r%   r?   )rB   requestr   rH   rA   s      r   
_fake_sendz$MockerCore.start.<locals>._fake_send   s   
 !, #P G]4EFP)'7EfE  8N8NOG#P #P4 "// >> *++    8N8NOK8N8NOOG#P #P #PP $++T2&twB6BB&tw9&99sK   CA
C
 B*B,B>B BBCB55CCsendN)r?   RuntimeErrorr:   rR   rK   rM   r)   )rA   rQ   rH   s   ` @r   startzMockerCore.start   s`    
 ??@AA ++00!%!2!2!>!>	!0	:d 	D%%vz:r#   c                 b    | j                   r#| j                   | j                  _        d| _         yy)zStop mocking requests.

        This should have no impact if mocking has not been started.
        When nesting mockers, make sure to stop the innermost first.
        N)r?   r:   rR   rA   s    r   stopzMockerCore.stop   s)     ??%)__D""DO r#   c                 $    | j                          y rF   )r,   rV   s    r   
reset_mockzMockerCore.reset_mock   s    

r#   c                     || j                   v r	 t        | j                  |      S t        |      # t        $ r Y t        |      w xY wrF   )_PROXY_FUNCSgetattrr=   AttributeError)rA   r(   s     r   __getattr__zMockerCore.__getattr__   sR    4$$$t}}d33 T"" " T""s   1 	AAc                     |j                  dd      |d<   |j                  d| j                          | j                  j                  |i |S )Nr6   F
_real_httpr5   )r;   
setdefaultr>   r=   register_urirA   argsr   s      r   rb   zMockerCore.register_uri   sK      &zz+u=|.$*<*<=)t}}))4:6::r#   c                 &     | j                   |i |S rF   )rb   rc   s      r   rP   zMockerCore.request   s     t  $1&11r#   c                 6     | j                   t        g|i |S rF   )rP   r   rc   s      r   getzMockerCore.get       t||C1$1&11r#   c                 6     | j                   t        g|i |S rF   )rP   r   rc   s      r   optionszMockerCore.options   s    t||G5d5f55r#   c                 6     | j                   t        g|i |S rF   )rP   r   rc   s      r   headzMockerCore.head       t||D242622r#   c                 6     | j                   t        g|i |S rF   )rP   r
   rc   s      r   postzMockerCore.post   rm   r#   c                 6     | j                   t        g|i |S rF   )rP   r   rc   s      r   putzMockerCore.put   rh   r#   c                 6     | j                   t        g|i |S rF   )rP   r	   rc   s      r   patchzMockerCore.patch   s    t||E3D3F33r#   c                 6     | j                   t        g|i |S rF   )rP   r   rc   s      r   deletezMockerCore.delete  s    t||F4T4V44r#   rF   )__name__
__module____qualname____doc__r[   r4   rC   rT   rW   rY   r^   rb   rP   rg   rj   rl   ro   rq   rs   ru   r   r#   r   r+   r+   R   sc    L N,L$A;F##;22633245r#   r+   c                   J     e Zd ZdZdZ fdZd Zd Zd Zd Z	d Z
d	 Z xZS )
Mockerz7The standard entry point for mock Adapter loading.
    testc                 Z    |j                  dd      | _        t        t        |   di | y)a]  Create a new mocker adapter.

        :param str kw: Pass the mock object through to the decorated function
            as this named keyword argument, rather than a positional argument.
        :param bool real_http: True to send the request to the real requested
            uri if there is not a mock installed for it. Defaults to False.
        kwNr   )r;   _kwsuperr{   rC   )rA   r   	__class__s     r   rC   zMocker.__init__  s)     ::dD)fd$.v.r#   c                 &    | j                          | S rF   )rT   rV   s    r   	__enter__zMocker.__enter__  s    

r#   c                 $    | j                          y rF   )rW   )rA   r%   value	tracebacks       r   __exit__zMocker.__exit__  s    		r#   c                 f    t        |t              r| j                  |      S | j                  |      S rF   )r   r%   decorate_classdecorate_callable)rA   objs     r   __call__zMocker.__call__  s.    c4 &&s++%%c**r#   c                 j     t        |       | j                  | j                  | j                        }|S )z.Returns an exact copy of current mock
        )r~   r6   r4   )r%   r   r6   r4   )rA   r   s     r   copyzMocker.copy%  s2     DJxxnn..

 r#   c                 F     t        j                         fd       }|S )zQDecorates a callable

        :param callable func: callable to decorate
        c                      j                         5 }j                  r||j                  <   nt        |       } | j                  |        | i |cd d d        S # 1 sw Y   y xY wrF   )r   r   listappend)rd   r   r   funcrA   s      r   innerz'Mocker.decorate_callable.<locals>.inner4  sY     -88'(F488$:DKKNT,V,- - -s   A AA%)	functoolswraps)rA   r   r   s   `` r   r   zMocker.decorate_callable/  s'    
 
		- 
	- r#   c                     t        |      D ]Z  }|j                  | j                        st        ||      }t	        |d      s8| j                         }t        || ||             \ |S )zDecorates methods in a class with request_mock

        Method will be decorated only if it name begins with `TEST_PREFIX`

        :param object klass: class which methods will be decorated
        r   )dir
startswithTEST_PREFIXr\   r    r   r&   )rA   klass	attr_nameattrr   s        r   r   zMocker.decorate_classA  si     U 		/I''(8(895),D4,		AE9ag.		/ r#   )rv   rw   rx   ry   r   rC   r   r   r   r   r   r   __classcell__)r   s   @r   r{   r{     s2     K	/+$r#   r{   )
contextlibr   r   	threadingr   r7   requests_mockr   r   r   r   r   r   r	   r
   r   r8   rR   rL   RLockr   contextmanagerr   r"   r)   objectr+   r{   mockr   r#   r   <module>r      s      
    ! $	
!!&&
 Y__
   "q5 q5hMZ M` r#   