§
    ½Ë”jk  ã                   óø  — d dl Zd dlmc mZ d dlZd dlZd dlZd dl	m
Z
 d dlmZmZ d dlmZmZmZmZmZmZmZ d dlmZ 	 d dlZe G d„ d¦  «        ¦   «         Zn# e$ r dZdZY nw xY wej        j        Zej        j        Zdada  ed	¬
¦  «         G d„ d¦  «        ¦   «         Z!dedefd„Z"e"d d„¦   «         Z#e"d d„¦   «         Z$d!deee%                  ddfd„Z&d d„Z'd!deee%                  ddfd„Z(d d„Z)d!dedeee%                  defd„Z*d!deee%                  ddfd„Z+d d„Z,e
d!deee%                  ded         fd„¦   «         Z-dee%e.e/f         de%fd„Z0dee%e.e/f         deee%                  de1fd„Z2dS )"é    N)Úcontextmanager)Ú	dataclassÚfield)ÚAnyÚCallableÚIteratorÚListÚOptionalÚTupleÚUnion)Úurlparsec                   ó†   — e Zd ZU dZ eej        ¬¦  «        Zej        ed<   dZ	de
defd„Zde
d	eddfd
„Zded	eddfd„ZdS )ÚCurlz„Proxy to real pycurl.Curl.

        If `perform` is called then it will raise an error if network is disabled via `disable`
        )Údefault_factoryÚhandleNÚitemÚreturnc                 ób  — t                                | d¦  «        }t          rU|dk    rOt          | j        ¦  «        j        }|rt          |t          ¦  «        rt          ||¦  «        S t          d¦  «        ‚|dk    r|S |dk    rt                                | d¦  «        S t          ||¦  «        S )Nr   ÚperformúNetwork is disabledÚsetopt)
ÚobjectÚ__getattribute__Ú_disable_pycurlr   ÚurlÚhostnameÚis_host_in_allowed_hostsÚ_allowed_hostsÚgetattrÚRuntimeError)Úselfr   r   Úhosts       úFC:\Projects\DSCons\.venv\Lib\site-packages\pytest_recording\network.pyr   zCurl.__getattribute__   sµ   € Ý×,Ò,¨T°8Ñ<Ô<ˆFÝð : 4¨9Ò#4Ð#4Ý ¤Ñ)Ô)Ô2�Øð 1Õ7¸½nÑMÔMð 1Ý" 6¨4Ñ0Ô0Ð0Ý"Ð#8Ñ9Ô9Ð9Ø�xÒÐØ�Ø�xÒÐÝ×.Ò.¨t°XÑ>Ô>Ð>Ý˜6 4Ñ(Ô(Ð(ó    ÚkeyÚvaluec                 óz   — |dk    rt                                | ||¦  «         d S t          | j        ||¦  «         d S )Nr   )r   Ú__setattr__Úsetattrr   )r!   r%   r&   s      r#   r(   zCurl.__setattr__#   sC   € Ø�hŠˆÝ×"Ò" 4¨¨eÑ4Ô4Ð4Ð4Ð4å˜œ S¨%Ñ0Ô0Ð0Ð0Ð0r$   Úoptionc                 ój   — |t           j        k    r|| _        | j                             ||¦  «         d S ©N)ÚpycurlÚURLr   r   r   )r!   r*   r&   s      r#   r   zCurl.setopt)   s4   € Ø�œÒ#Ð#Ø �”ØŒK×Ò˜v uÑ-Ô-Ð-Ð-Ð-r$   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r-   r   r   Ú__annotations__r   Ústrr   r   r(   Úintr   © r$   r#   r   r      s¼   € € € € € € ð	ð 	ð
 $˜e°F´KÐ@Ñ@Ô@ˆ�”Ð@Ð@Ñ@Øˆð	)¨ð 	)°ð 	)ð 	)ð 	)ð 	)ð	1 3ð 	1¨sð 	1°tð 	1ð 	1ð 	1ð 	1ð	. ð 	.¨Sð 	.°Tð 	.ð 	.ð 	.ð 	.ð 	.ð 	.r$   r   FT)Úunsafe_hashc                   ó"   — e Zd ZdZdedefd„ZdS )ÚPyCurlWrapperzImitate pycurl module.r   r   c                 óF   — |dk    rt           S t          t          |¦  «        S )Nr   )r   r   r-   )r!   r   s     r#   r   zPyCurlWrapper.__getattribute__@   s    € Ø�6Š>ˆ>ÝˆKÝ•v˜tÑ$Ô$Ð$r$   N)r/   r0   r1   r2   r4   r   r   r6   r$   r#   r9   r9   <   s<   € € € € € à Ð ð% Sð %¨Sð %ð %ð %ð %ð %ð %r$   r9   Úfuncr   c                 ó>   ‡ — dt           dt           dt           fˆ fd„}|S )z!No-op if pycurl is not installed.ÚargsÚkwargsr   c                  ó&   •— t           €d S  ‰| i |¤ŽS r,   )r-   )r=   r>   r;   s     €r#   Úinnerz%check_pycurl_installed.<locals>.innerI   s"   ø€ Ýˆ>ØˆFØˆt�TÐ$˜VÐ$Ð$Ð$r$   )r   )r;   r@   s   ` r#   Úcheck_pycurl_installedrA   F   s=   ø€ ð%•Sð %¥Cð %­Cð %ð %ð %ð %ð %ð %ð
 €Lr$   c                  ó<   — t          ¦   «         t          j        d<   d S ©Nr-   )r9   ÚsysÚmodulesr6   r$   r#   Úinstall_pycurl_wrapperrF   Q   s   € å)™OœO…C„K�ÑÐÐr$   c                  ó.   — t           t          j        d<   d S rC   )r-   rD   rE   r6   r$   r#   Úuninstall_pycurl_wrapperrH   V   s   € å"…C„K�ÑÐÐr$   Úallowed_hostsc                 ó   — da | ad S )NT©r   r   ©rI   s    r#   Úblock_pycurlrM   [   s   € ð €OØ"€N€N€Nr$   c                  ó   — da d ad S )NFrK   r6   r$   r#   Úunblock_pycurlrO   b   s   € ð €OØ€N€N€Nr$   c                 óš   — t          t          | ¬¦  «        t          j        _        t          t          | ¬¦  «        t          j        _        d S ©NrL   )Úmake_network_guardÚ_original_connectÚsocketÚconnectÚ_original_connect_exÚ
connect_exrL   s    r#   Úblock_socketrX   i   s:   € Ý.Õ/@ÐP]Ð^Ñ^Ô^…F„MÔÝ1Õ2FÐVcÐdÑdÔd…F„MÔÐÐr$   c                  ó^   — t           t          j        _        t          t          j        _        d S r,   )rS   rT   rU   rV   rW   r6   r$   r#   Úunblock_socketrZ   n   s   € Ý-…F„MÔÝ3…F„MÔÐÐr$   Úoriginal_funcc           
      óŽ   ‡ ‡— dt           dt          t          t          t          f         dt           dt           dt           f
ˆˆ fd„}|S )Nr!   Úaddressr=   r>   r   c                 óÞ   •— d}| j         t          j        t          j        fv r	|d         }n| j         t          j        k    r|}t          |‰¦  «        r ‰| |g|¢R i |¤ŽS t          d¦  «        ‚)NÚ r   r   )ÚfamilyrT   ÚAF_INETÚAF_INET6ÚAF_UNIXr   r    )r!   r]   r=   r>   r"   rI   r[   s        €€r#   Únetwork_guardz)make_network_guard.<locals>.network_guardt   s�   ø€ ØˆØŒ;�6œ>­6¬?Ð;Ð;Ð;Ø˜1”:ˆDˆDØŒ[�FœNÒ*Ð*ØˆDÝ# D¨-Ñ8Ô8ð 	AØ �=  wÐ@°Ð@Ð@Ð@¸Ð@Ð@Ð@ÝÐ0Ñ1Ô1Ð1r$   )r   r   r   r4   Úbytes)r[   rI   rd   s   `` r#   rR   rR   s   s`   øø€ ð2�Cð 2­%µµs½EÐ0AÔ*Bð 2Í3ð 2ÕZ]ð 2Õbeð 2ð 2ð 2ð 2ð 2ð 2ð 2ð Ðr$   c                 óF   — t          | ¬¦  «         t          | ¬¦  «         d S rQ   )rX   rM   rL   s    r#   Úblockrg   �   s*   € Ý˜}Ð-Ñ-Ô-Ð-å˜}Ð-Ñ-Ô-Ð-Ð-Ð-r$   c                  ó>   — t          ¦   «          t          ¦   «          d S r,   )rO   rZ   r6   r$   r#   Úunblockri   ‡   s    € ÝÑÔÐÝÑÔÐÐÐr$   c              #   óv   K  — t          | ¬¦  «         	 dV — t          ¦   «          dS # t          ¦   «          w xY w)z÷Block connections via socket and pycurl.

    Note:
    ----
        Only connections to remotes are blocked in `socket`.
        Local servers are not touched since it could interfere with live servers needed for tests (e.g. pytest-httpbin)

    rL   N)rg   ri   rL   s    r#   Úblocking_contextrk   Œ   sD   è è € õ 
˜Ð&Ñ&Ô&Ð&ðØˆˆˆõ 	‰	Œ	ˆ	ˆ	ˆ	ø�‰	Œ	ˆ	ˆ	øøøs   ”( ¨8r&   c                 óf   — t          | t          t          f¦  «        r|                      ¦   «         S | S r,   )Ú
isinstancere   Ú	bytearrayÚdecode)r&   s    r#   Ú	to_stringrp   ž   s,   € Ý�%�%¥Ð+Ñ,Ô,ð Ø�|Š|‰~Œ~ÐØ€Lr$   r"   c                 óž   — |�Jdd                      |¦  «        z   dz   }t          t          j        |t	          | ¦  «        ¦  «        ¦  «        S dS )z.Match provided host to a list of host regexps.Nú(z)|(ú)F)ÚjoinÚboolÚreÚmatchrp   )r"   rI   Úcombineds      r#   r   r   ¤   sH   € àÐ Ø˜Ÿš MÑ2Ô2Ñ2°SÑ8ˆÝ•B”H˜X¥y°¡¤Ñ7Ô7Ñ8Ô8Ð8Øˆ5r$   )r   Nr,   )3ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arrv   rT   rD   Ú
contextlibr   Údataclassesr   r   Útypingr   r   r   r	   r
   r   r   Úurllib.parser   r-   r   ÚImportErrorrU   rS   rW   rV   r   r   r9   rA   rF   rH   r4   rM   rO   rX   rZ   rR   rg   ri   rk   re   rn   rp   ru   r   r6   r$   r#   ú<module>r„      s­  ðØ  € € € € € € € € € € € € €	€	€	€	Ø €€€Ø 
€
€
€
Ø %Ð %Ð %Ð %Ð %Ð %Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ !Ð !Ð !Ð !Ð !Ð !ð'Ø€M€M€Màð.ð .ð .ð .ð .ñ .ô .ñ „Yð.ð .øðB ð ð ð Ø€FØ€D€D€Dðøøøð ”MÔ)Ð Ø”}Ô/Ð ð €Ø€ð €�tÐÑÔð%ð %ð %ð %ð %ñ %ô %ñ Ôð%ð ð ¨hð ð ð ð ð ð,ð ,ð ,ñ Ôð,ð ð#ð #ð #ñ Ôð#ð#ð # ¨¨c¬Ô 3ð #¸tð #ð #ð #ð #ðð ð ð ðeð e ¨¨c¬Ô 3ð e¸tð eð eð eð eð
4ð 4ð 4ð 4ð
ð  hð ¸xÈÈSÌ	Ô?Rð Ð^fð ð ð ð ð.ð .˜ $ s¤)Ô,ð .¸ð .ð .ð .ð .ðð ð ð ð
 ðð  H¨T°#¬YÔ$7ð À8ÈDÄ>ð ð ð ñ „ðð"�U˜3  yÐ0Ô1ð °cð ð ð ð ð 5¨¨e°YÐ)>Ô#?ð ÐPXÐY]Ð^aÔYbÔPcð Ðhlð ð ð ð ð ð s   ÁA Á	A'Á&A'