
    BThR                        d dl Z d dlZd dlZd dlZd dlmZ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  ej"                  ej$                  j&                        Z	 ej*                  d   Z ej0                  e      Zd	 Zd
 Zd Z ed e              ed e             dd              Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'y# e$ r ej*                  d   ZY sw xY w)    N)	MagicMockpatch)(CannotOverwriteExistingCassetteException)decode_response)Request)convert_body_to_bytesfollow_redirectsallow_redirectsc                     i }| j                   j                  D ]K  \  }}|j                  d      }|j                  |g        ||   j	                  |j                  d             M |S )z
    Some headers can appear multiple times, like "Set-Cookie".
    Therefore transform to every header key to list of values.
    utf-8)headersrawdecode
setdefaultappend)httpx_responseoutkeyvardecoded_keys        g/var/www/catia.catastroantioquia-mas.com/valormas/lib/python3.12/site-packages/vcr/stubs/httpx_stubs.py_transform_headersr      sg     C"**.. 5Sjj){B'K

7 345 J    c                   K   t        | d      rJ t        j                  | j                  ddi      5  |r| j	                          d {    n| j                          d d d        | j                  | j                  dt        |       d| j                  id}| `
| j                         j                  | j                        | _        |S 7 # 1 sw Y   oxY ww)N_decoderzContent-Encoding )codemessagestring)statusr   body)hasattrr   dictr   areadreadstatus_codereason_phraser   contentr   _get_content_decoderr   _content)respr$   results      r   _to_serialized_responser-   '   s     tZ((( 
DLL#5r":	; **,IIK	  ++8J8JK%d+4<<(F 	--/66t||DDMM  s/   1CC	C
CA,CCCCc                 n    g }| j                         D ]  \  }}|D ]  }|j                  ||f        ! |S )zJ
    httpx accepts headers as list of tuples of header key and value.
    )itemsr   )r   header_listr   valuesvs        r   _from_serialized_headersr3   ?   sK    
 K}} )V 	)AQx(	)) r   zhttpx.Response.closezhttpx.Response.readc           	          d|v r(t        t        |d   d|d   id|d   id            }d }nd|d   d	   j                         i}t        j                  |d   d   | t        |d         |d
   d   |xs g |      }|S )Nr&   r   r   r(   r   )r   r!   r    r'   r    r   r!   )r&   requestr   r(   history
extensions)r   r   encodehttpxResponser3   )r5   serialized_responser6   r7   responses        r   _from_serialized_responser=   K   s     ++-!29=%':9'EF%':='IJ
 
%':8'DY'O'V'V'XY
~~'1&9()<Y)GH#F+H52H Or   c                     | j                         j                  d      }t        | j                        }t	        | j
                        }t        | j                  |||      S )Nr   )r%   r   strurlr#   r   
VcrRequestmethod)httpx_requestkwargsr!   urir   s        r   _make_vcr_requestrF   k   sR    &&w/D
m
 C=(()Gm**Cw??r   c                     |d   }t        |fi |}| j                  |      r|t        | |||d   |      fS | j                  r| j	                  |      rt        | |      t        j                  d|       |d fS )N   r   )cassettefailed_requestz*%s not in cassette, sending to real server)rF   can_play_response_for_play_responseswrite_protectedfilter_requestr   _loggerinfo)rI   	real_sendargsrD   real_requestvcr_requests         r   _shared_vcr_sendrU   r   s    7L#L;F;K%%k2OHlKQUVWQXZ`aaaH$;$;K$H6YdeeLL={Kr   c                 4  K   |j                   D ];  }t        |j                        }| j                  |t	        ||       d {          = |j                   rt        |j                        }| j                  |t	        ||       d {          |S 7 Q7 wN)r6   rF   r5   r   r-   )rI   rT   real_responser$   past_real_responsepast_vcr_requests         r   _record_responsesr[      s     +33 d,-?-G-GH(0GHZ\a0b*bcd  ((=(=>OOK'>}e'T!TU +c "Us%   A BBAB	B

BBc                 @    | j                  |      }t        ||      }|S rW   )play_responser=   )rI   r5   rT   clientrD   vcr_responser<   s          r   rL   rL      s#    ))+6L(,?HOr   c                    K   t        | |g|i |\  }}|r |d   j                  j                  |       |S  ||i | d {   }t        | ||d       d {    |S 7 7 w)Nr   Tr$   )rU   cookiesextract_cookiesr[   rI   rQ   rR   rD   rT   r<   rX   s          r   _async_vcr_sendre      st     ,XyR4R6RKQ''1#T4V44M
Hk=
MMM 5Ms$   AA%A!A%A#A%#A%c                 F     t        j                         fd       }|S )Nc                  $    t        g| i |S rW   )re   rR   rD   rI   rQ   s     r   _inner_sendz#async_vcr_send.<locals>._inner_send   s    xDTDVDDr   	functoolswrapsrI   rQ   ri   s   `` r   async_vcr_sendrn      s(    __YE  E r   c                     	 t        j                          t        j                   | |i |      S # t        $ r t        j                   | |i |      cY S w xY w)z
    Safely run an asynchronous function from a synchronous context.
    Handles both cases:
    - An event loop is already running.
    - No event loop exists yet.
    )asyncioget_running_loopensure_futureRuntimeErrorrun)	sync_funcrR   rD   s      r   _run_async_functionrv      s[    A  "
 $$Y%?%?@@	  7{{9d5f5667s   1 $AAc                     t        | |g|i |\  }}|r |d   j                  j                  |       |S  ||i |}t        t        | ||d       |S )Nr   Fra   )rU   rb   rc   rv   r[   rd   s          r   _sync_vcr_sendrx      sb    ,XyR4R6RKQ''1t.v.M)8[-W\]r   c                 F     t        j                         fd       }|S )Nc                  $    t        g| i |S rW   )rx   rh   s     r   ri   z"sync_vcr_send.<locals>._inner_send   s    h	CDCFCCr   rj   rm   s   `` r   sync_vcr_sendr{      s(    __YD  D r   rW   )(rp   rk   inspectloggingunittest.mockr   r   r9   
vcr.errorsr   vcr.filtersr   vcr.requestr   rA   vcr.serializers.compatr   	signatureClientr5   _httpx_signature
parametersHTTPX_REDIRECT_PARAMKeyError	getLogger__name__rO   r   r-   r3   r=   rF   rU   r[   rL   re   rn   rv   rx   r{    r   r   <module>r      s        *  ? ' - 8$7$$U\\%9%9: J+667IJ
 '

H
%0	 y{+ik* + ,<@	A 	g  J+667HIJs   C CC