
     fD                       U d dl mZ 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	m
Z
mZmZmZmZmZ d dlZd dlZd dlmZmZ e	rd dlZd dlmZmZ d dlmZ d dlmZmZmZ eej        ej        f         Z de!d	<   d*dZ"d+dZ#d+dZ$d,dZ%d-dZ& edd          Z'ej(         G d d                      Z)ej(         G d d                      Z*ej(         G d d                       Z+ej(         G d! d"ej,        j-                              Z.ej(         G d# d$ej,        j/                              Z0e G d% d&                      Z1e G d' d(ej        j2        e)                      Z3dS ).    )annotationsN)TYPE_CHECKINGAnyIterableNoReturnTypeVarUnionoverload)NoPublicConstructorfinal)AddressFamily
SocketKind)TracebackType)BufferSelf	TypeAliasr   	IPAddressipreturnintc                    t          | t          j                  rt          j        j        S t          | t          j                  rt          j        j        S t          d          )Nz!Unhandled IPAddress instance type)	
isinstance	ipaddressIPv4AddresstriosocketAF_INETIPv6AddressAF_INET6NotImplementedError)r   s    Y/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/trio/testing/_fake_net.py_family_forr"   *   sQ    "i+,, ${""	B	-	.	. ${##
A
B
BB    familyc                    | t           j        j        k    rt          j        d          S | t           j        j        k    rt          j        d          S t          d          )N0.0.0.0::Unhandled ip address familyr   r   r   r   
ip_addressr   r    r$   s    r!   _wildcard_ip_forr,   2   sS    $$$#I...	4;'	'	'#D)))
;
<
<<r#   c                    | t           j        j        k    rt          j        d          S | t           j        j        k    rt          j        d          S t          d          )N	127.0.0.1::1r(   r)   r+   s    r!   _localhost_ip_forr0   ;   sS    $$$#K000	4;'	'	'#E***
;
<
<<r#   coder   c                F    t          | t          j        |                     N)OSErrorosstrerror)r1   s    r!   	_fake_errr7   C   s    
$D))
*
**r#   databytesbuffersIterable[Buffer]c                   d}|D ]}| ||t          |          j        z            }t          |          5 }||d t          |          <   d d d            n# 1 swxY w Y   |t          |          z  }|t          |           k    r n|S )Nr   )
memoryviewnbyteslen)r8   r:   writtenbuf
next_piecembufs         r!   _scatterrD   G   s    G  'Gjoo.D$DDE
__ 	1&0D"3z??"#	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	13z??"c$iiE  Ns   AA	A	T_UDPEndpointUDPEndpoint)boundc                  D    e Zd ZU ded<   ded<   ddZedd            ZdS )rF   r   r   r   portr   +tuple[str, int] | tuple[str, int, int, int]c                t    | j         j        | j        f}t          | j         t          j                  r|dz  }|S )Nr   r   )r   
compressedrI   r   r   r   )selfsockaddrs     r!   as_python_sockaddrzUDPEndpoint.as_python_sockaddr[   s?    GIA
 dgy455 	Hr#   clstype[T_UDPEndpoint]rO   rE   c                Z    |d d         \  }} | t          j        |          |          S )N   )r   rI   )r   r*   )rQ   rO   r   rI   s       r!   from_python_sockaddrz UDPEndpoint.from_python_sockaddrd   s5     BQB<Dsi*2..T::::r#   Nr   rJ   )rQ   rR   rO   rJ   r   rE   )__name__
__module____qualname____annotations__rP   classmethodrU    r#   r!   rF   rF   V   s\         MMMIII    ; ; ; [; ; ;r#   c                      e Zd ZU ded<   dS )
UDPBindingrF   localN)rW   rX   rY   rZ   r\   r#   r!   r^   r^   l   s         r#   r^   c                  Z    e Zd ZU ded<   ded<    ej        d           Zded<   dd	Zd
S )	UDPPacketrF   sourcedestinationc                *    |                                  S r3   )hex)ps    r!   <lambda>zUDPPacket.<lambda>v   s     r#   )reprr9   payloadr   c                :    t          | j        | j        |          S )Nrb   rc   ri   )ra   rc   rb   )rN   ri   s     r!   replyzUDPPacket.replyy   s%    #g
 
 
 	
r#   N)ri   r9   r   ra   )rW   rX   rY   rZ   attrsfieldri   rl   r\   r#   r!   ra   ra   r   sf          U[&7&7888G8888
 
 
 
 
 
r#   ra   c                  "    e Zd ZU ded<   dd	Zd
S )FakeSocketFactoryFakeNetfake_netr$   r   type_protor   
FakeSocketc                F    t                               | j        |||          S r3   )ru   _createrr   )rN   r$   rs   rt   s       r!   r   zFakeSocketFactory.socket   s    !!$-FFFr#   N)r$   r   rs   r   rt   r   r   ru   )rW   rX   rY   rZ   r   r\   r#   r!   rp   rp      s<         G G G G G Gr#   rp   c                  4    e Zd ZU ded<   	 	 	 	 dddZddZdS )FakeHostnameResolverrq   rr   r   hostbytes | NonerI   bytes | str | int | Noner$   r   typert   flagsr   ]list[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int]]]c                $   K   t          d          NzFakeNet doesn't do fake DNS yetr    )rN   rz   rI   r$   r}   rt   r~   s          r!   getaddrinfoz FakeHostnameResolver.getaddrinfo   s      " ""CDDDr#   rO   rJ   tuple[str, str]c                $   K   t          d          r   r   )rN   rO   r~   s      r!   getnameinfoz FakeHostnameResolver.getnameinfo   s       ""CDDDr#   N)r   r   r   r   )rz   r{   rI   r|   r$   r   r}   r   rt   r   r~   r   r   r   )rO   rJ   r~   r   r   r   )rW   rX   rY   rZ   r   r   r\   r#   r!   ry   ry      sh          E E E E E&E E E E E Er#   ry   c                  6    e Zd ZddZddZdd	ZddZddZdS )rq   r   Nonec                   t          j        d                                          | _        t          j        d                                          | _        t          t          dd                    | _        i | _	        d | _
        d S )Nz	1.0.0.0/8z1::/16iP  i  )r   IPv4Networkhosts_auto_ipv4_iterIPv6Network_auto_ipv6_iteriterrange_auto_port_iter_boundroute_packetrN   s    r!   __init__zFakeNet.__init__   so    (4[AAGGII(4X>>DDFF#E%$7$78846 r#   bindingr^   r   ru   c                ^    || j         v rt          t          j                   || j         |<   d S r3   )r   r7   errno
EADDRINUSE)rN   r   r   s      r!   _bindzFakeNet._bind   s2    dk!!e&'''%Gr#   c                    t           j                            t          |                      t           j                            t          |                      d S r3   )r   r   set_custom_socket_factoryrp   set_custom_hostname_resolverry   r   s    r!   enablezFakeNet.enable   sF    --.?.E.EFFF001Ed1K1KLLLLLr#   packetra   c                l    | j         |                     |           d S |                      |           d S r3   )r   deliver_packetrN   r   s     r!   send_packetzFakeNet.send_packet   s?    $'''''f%%%%%r#   c                    t          |j                  }|| j        v r"| j        |                             |           d S d S )Nr_   )r^   rc   r   _deliver_packet)rN   r   r   s      r!   r   zFakeNet.deliver_packet   sJ    6#5666dk!!K 0088888 Dr#   Nr   r   )r   r^   r   ru   r   r   r   ra   r   r   )rW   rX   rY   r   r   r   r   r   r\   r#   r!   rq   rq      s|        ! ! ! !& & & &
M M M M& & & &     r#   rq   c                     e Zd Zdjd	Zedkd            Zedld            Zedmd            ZdndZdndZ	dodZ
dpdZdqdZdrdZ	 	 	 dsdtd(Zej        d)k    ses eej        d*          reZ	 	 dudvd-Zej        d)k    ses eej        d*          reZdwd/Zdwd0Zedxd3            Zedyd6            Z	 dzd{d9Zed|d<            Zed}d>            Z	 dzd~d@ZddBZddIZdddLZeddP            ZeddS            ZddVZdddXZ dudd[Z!ddd]Z"	 dudd_Z#	 duddaZ$ej        d)k    ses eej        d*          re$Z%dmdbZ&dmdcZ'dddZ(ddfZ)ej        d)k    ses eej        dg          rddiZ*d!S d!S d!S )ru   rr   rq   r$   r   r}   r   rt   r   c                   || _         |st          j        j        }|st          j        j        }|t          j        j        t          j        j        fvrt          d|           |t          j        j        k    rt          d|           || _        || _	        || _
        d| _        t          j        t                   t          d                    \  | _        | _        d | _        d S )Nz%FakeNet doesn't (yet) support family=z#FakeNet doesn't (yet) support type=Finf)	_fake_netr   r   r   SOCK_STREAMr   r    
SOCK_DGRAM_family_type_proto_closedopen_memory_channelra   float_packet_sender_packet_receiver_binding)rN   rr   r$   r}   rt   s        r!   r   zFakeSocket.__init__   s     " 	)[(F 	+;*D$+-t{/CDDD%&Vf&V&VWWW4;)))%&RD&R&RSSS
595M6

,,6 62T2
 ,0r#   r   c                    | j         S r3   )r   r   s    r!   r}   zFakeSocket.type   s
    zr#   c                    | j         S r3   )r   r   s    r!   r$   zFakeSocket.family   s
    |r#   c                    | j         S r3   )r   r   s    r!   rt   zFakeSocket.proto   s
    {r#   r   c                J    | j         rt          t          j                   d S d S r3   )r   r7   r   EBADFr   s    r!   _check_closedzFakeSocket._check_closed   s,    < 	#ek"""""	# 	#r#   c                    | j         rd S d| _         | j        | j        j        | j        = | j                                         d S )NT)r   r   r   r   r   closer   s    r!   r   zFakeSocket.close   sJ    < 	F=$%dm4##%%%%%r#   addressobjectr_   booltuple[str, int]c               z   K   t           j                            | j        | j        | j        |d|           d {V S )NF)r   ipv6_v6onlyr_   )r   _socket_resolve_address_nocpr}   r$   rt   )rN   r   r_   s      r!   r   z FakeSocket._resolve_address_nocp  s]       \77IKJ 8 
 
 
 
 
 
 
 
 	
r#   r   ra   c                    t          j        t          j                  5  | j                            |           d d d            d S # 1 swxY w Y   d S r3   )
contextlibsuppressr   BrokenResourceErrorr   send_nowaitr   s     r!   r   zFakeSocket._deliver_packet  s     !9:: 	4 	4++F333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   AAAaddrc                  K   |                                   | j        t          t          j                   t
          j                                         d {V  |                     |d           d {V ^}}}|g k    s
J d            t          j
        |          }t          |          | j        k    sJ |t          j
        d          k    rt          j
        d          }n,|t          j
        d          k    rt          j
        d          }|dk    rt          | j        j                  }t!          t#          ||                    }| j                            ||            || _        d S )	NTr   zTODO: handle other values?r&   r.   r'   r/   r   )r   r   r7   r   EINVALr   lowlevel
checkpointr   r   r*   r"   r$   nextr   r   r^   rF   r   )rN   r   ip_strrI   _r   r   s          r!   bindzFakeSocket.bind  sj     =$el###m&&(((((((((!%!;!;D!;!M!MMMMMMMqBwww4www!&))2$+----%i0000%k22BB9'----%e,,B199677D;r4#8#8999Wd+++r#   peerr   c                $   K   t          d          )Nz0FakeNet does not (yet) support connected socketsr   )rN   r   s     r!   connectzFakeSocket.connect,  s      !"TUUUr#   r\   r   Nr:   r;   ancdata!Iterable[tuple[int, int, Buffer]]r~   
Any | Nonec                  K   |                                   t          j                                         d {V  ||                     |d           d {V }|rt          d          |rt          d|           |t          t          j                   t          
                    |          }| j        4|                     t          | j                  j        df           d {V  d                    |          }| j        J t#          | j        j        ||          }| j                            |           t+          |          S )NFr   &FakeNet doesn't support ancillary dataz"FakeNet send flags must be 0, not r   r#   rk   )r   r   r   r   r   r    r7   r   ENOTCONNrF   rU   r   r   r,   r$   rM   joinra   r_   r   r   r?   )rN   r:   r   r~   r   rc   ri   r   s           r!   _sendmsgzFakeSocket._sendmsg/  st      	m&&((((((((( 66we6LLLLLLLLG 	P%&NOOO 	T%&R5&R&RSSS?en%%%!66w??= ))-dk::EqIJJJJJJJJJ((7##}(((=&#
 
 
 	""6***7||r#   win32sendmsg
ancbufsize2tuple[int, list[tuple[int, int, bytes]], int, Any]c                  K   |dk    rt          d          |dk    rt          d          | j        t          d          |                                  g }d}| j                                         d {V }|j                                        }t          |j        |          }|t          |j                  k     r|t          j        j        z  }||||fS )Nr   r   z&FakeNet doesn't support any recv flagszThe code will most likely hang if you try to receive on a fakesocket without a binding. If that is not the case, or you explicitly want to test that, remove this warning.)r    r   r   r   receiverb   rP   rD   ri   r?   r   r   	MSG_TRUNC)	rN   r:   r   r~   r   	msg_flagsr   r   r@   s	            r!   _recvmsg_intozFakeSocket._recvmsg_into[  s       ??%&NOOOA::%&NOOO=  &2   	02	,4466666666-22446>733S((((..IG33r#   rJ   c                    |                                   | j        | j        j                                        S | j        t
          j        j        k    rdS | j        t
          j        j        k    sJ dS )N)r&   r   )r'   r   )	r   r   r_   rP   r$   r   r   r   r   r   s    r!   getsocknamezFakeSocket.getsockname  sg    =$=&99;;;[DK///!>;$+"666669r#   c                R   |                                   | j        rt          | j        d          s
J d            | j        j        Gt	          | j        j        t
                    s
J d            | j        j                                        S t          t          j	                   d S )NremotezGThis method seems to assume that self._binding has a remote UDPEndpointz,Self._binding.remote should be a UDPEndpoint)
r   r   hasattrr   r   rF   rP   r7   r   r   r   s    r!   getpeernamezFakeSocket.getpeername  s    =$x  Y YXY Y Y }#/!M(+  B BAB B B }+>>@@@%.!!!!!r#   leveloptnamec                   d S r3   r\   )rN   r   r   s      r!   
getsockoptzFakeSocket.getsockopt  s    >Acr#   buflenr9   c                   d S r3   r\   rN   r   r   r   s       r!   r   zFakeSocket.getsockopt  s    MPSr#   
int | Noneint | bytesc               V    |                                   t          d| d| d          )Nz%FakeNet doesn't implement getsockopt(, ))r   r4   r   s       r!   r   zFakeSocket.getsockopt  s8     	QeQQwQQQRRRr#   valueint | Bufferc                   d S r3   r\   )rN   r   r   r   s       r!   
setsockoptzFakeSocket.setsockopt  s    TWTWr#   optlenc                   d S r3   r\   rN   r   r   r   r   s        r!   r   zFakeSocket.setsockopt  s	     sr#   int | Buffer | Nonec                   |                                   ||ft          j        j        t          j        j        fk    r|st          d          t          d| d| d          )Nz#FakeNet always has IPV6_V6ONLY=Truez%FakeNet doesn't implement setsockopt(r   z, ...))r   r   r   IPPROTO_IPV6IPV6_V6ONLYr    r4   r  s        r!   r   zFakeSocket.setsockopt  sz     	7K$K# 
 
 
 
 &&KLLLVeVVwVVVWWWr#   r   c                    | S r3   r\   r   s    r!   	__enter__zFakeSocket.__enter__  s    r#   exc_type#builtins.type[BaseException] | None	exc_valueBaseException | None	tracebackTracebackType | Nonec                .    |                                   d S r3   )r   )rN   r	  r  r  s       r!   __exit__zFakeSocket.__exit__  s     	

r#   r8   r   c                @   K   |                      ||d            d {V S r3   )sendto)rN   r8   r~   s      r!   sendzFakeSocket.send  s.      [[ud333333333r#   _FakeSocket__data_FakeSocket__address!tuple[object, ...] | str | Bufferc                
   K   d S r3   r\   )rN   r  r  s      r!   r  zFakeSocket.sendto  s       cr#   _FakeSocket__flags(tuple[object, ...] | str | None | Bufferc                
   K   d S r3   r\   )rN   r  r  r  s       r!   r  zFakeSocket.sendto  s       cr#   argsr   c                   K   t          |          dk    r|\  }}d}n)t          |          dk    r|\  }}}nt          d          |                     |gg ||           d {V S )NrT   r      zwrong number of arguments)r?   	TypeErrorr   )rN   r  r8   r   r~   s        r!   r  zFakeSocket.sendto  s       t99>> MD'EEYY!^^#' D%7888]]D62ug>>>>>>>>>r#   bufsizec                H   K   |                      ||           d {V \  }}|S r3   )recvfrom)rN   r  r~   r8   r   s        r!   recvzFakeSocket.recv  s4      "mmGU;;;;;;;;gr#   rA   r>   c                J   K   |                      |||           d {V \  }}|S r3   )recvfrom_into)rN   rA   r>   r~   	got_bytesr   s         r!   	recv_intozFakeSocket.recv_into  s:      #'#5#5c65#I#IIIIIII	7r#   tuple[bytes, Any]c                P   K   |                      ||           d {V \  }}}}||fS r3   )_recvmsg)rN   r  r~   r8   r   r   r   s          r!   r!  zFakeSocket.recvfrom  s>      26--2O2O,O,O,O,O,O,O)gy'W}r#   tuple[int, Any]c                   K   |dk    r'|t          |          j        k    rt          d          |                     |gd|           d {V \  }}}}||fS )Nr   zpartial recvfrom_into)r=   r>   r    r   )rN   rA   r>   r~   
got_nbytesr   r   r   s           r!   r$  zFakeSocket.recvfrom_into  s       Q;;6Z__%;;;%&=>>>8<8J8JE1e9
 9
 3
 3
 3
 3
 3
 3
/
GY 7""r#   4tuple[bytes, list[tuple[int, int, bytes]], int, Any]c                   K   t          |          }|                     |g||           d {V \  }}}}t          |d |                   |||fS r3   )	bytearrayr   r9   )	rN   r  r   r~   rA   r,  r   r   r   s	            r!   r)  zFakeSocket._recvmsg  s|         8<8J8JE:u9
 9
 3
 3
 3
 3
 3
 3
/
GY c+:+&'')WEEr#   c                     t          d          )Nz&can't get fileno() for FakeNet socketsr   r   s    r!   filenozFakeSocket.fileno  s    !"JKKKr#   c                     t          d          )Nzcan't detach() a FakeNet socketr   r   s    r!   detachzFakeSocket.detach  s    !"CDDDr#   c                    dS )NFr\   r   s    r!   get_inheritablezFakeSocket.get_inheritable  s    ur#   inheritablec                (    |rt          d          d S )Nz&FakeNet can't make inheritable socketsr   )rN   r6  s     r!   set_inheritablezFakeSocket.set_inheritable  s&     	P%&NOOO	P 	Pr#   share
process_idc                     t          d          )NzFakeNet can't share socketsr   )rN   r:  s     r!   r9  zFakeSocket.share"  s    %&CDDDr#   )rr   rq   r$   r   r}   r   rt   r   )r   r   )r   r   )r   r   r   )r   r   r_   r   r   r   r   )r   r   r   r   )r   r   r   r   )r\   r   N)
r:   r;   r   r   r~   r   r   r   r   r   rL   )r:   r;   r   r   r~   r   r   r   rV   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r9   r3   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )
r   r   r   r   r   r  r   r   r   r   )r   r   )r	  r
  r  r  r  r  r   r   )r   )r8   r   r~   r   r   r   )r  r   r  r  r   r   )r  r   r  r   r  r  r   r   )r  r   r   r   )r  r   r~   r   r   r9   )rA   r   r>   r   r~   r   r   r   )r  r   r~   r   r   r'  )rA   r   r>   r   r~   r   r   r*  )r  r   r   r   r~   r   r   r-  )r   r   )r6  r   r   r   )r:  r   r   r9   )+rW   rX   rY   r   propertyr}   r$   rt   r   r   r   r   r   r   r   sysplatformr   r   r   r   r   recvmsg_intor   r   r
   r   r   r  r  r  r  r"  r&  r!  r$  r)  recvmsgr1  r3  r5  r8  r9  r\   r#   r!   ru   ru      s       0 0 0 0@    X    X    X# # # #& & & &

 

 

 

4 4 4 4       *V V V V 68"% % % % %N |w %gfmY??  
 	4 4 4 4 4> |w %gfmY??  %   " " " " AAA XAPPP XP AES S S S S WWW XW   X "X X X X X,      4 4 4 4 4    X    X? ? ? ?            
 :;# # # # # ?@F F F F F |w %gfmY??  L L L LE E E E   P P P P |w %gfmW== 	E 	E 	E 	E 	E 	E	 r#   ru   )	metaclass)r   r   r   r   )r$   r   r   r   )r1   r   r   r   )r8   r9   r:   r;   r   r   )4
__future__r   r   r   r   r5   r   r=  typingr   r   r   r   r   r	   r
   rm   r   
trio._utilr   r   builtinsr   r   typesr   typing_extensionsr   r   r   r   r   r   rZ   r"   r,   r0   r7   rD   rE   frozenrF   r^   ra   abcSocketFactoryrp   HostnameResolverry   rq   
SocketTyperu   r\   r#   r!   <module>rM     s   # " " " " " "          				  



                    1 1 1 1 1 1 1 1 :OOO00000000######9999999999Y2I4IIJ	 J J J JC C C C= = = == = = =+ + + +	 	 	 	 }=== ; ; ; ; ; ; ; ;*        
 	
 	
 	
 	
 	
 	
 	
 	
 G G G G G. G G G E E E E E484 E E E8                F ZE ZE ZE ZE ZE'3F ZE ZE ZE ZE ZE ZEr#   