
    #)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jP                   G d d             Z)ejP                   G d d             Z*ejP                   G d d             Z+ejP                   G d dejX                  jZ                               Z.ejP                   G d dejX                  j^                               Z0e G d d             Z1e G d dej                  jd                  e             Z3y)$    )annotationsN)TYPE_CHECKINGAnyIterableNoReturnTypeVarUnionoverload)NoPublicConstructorfinal)AddressFamily
SocketKind)TracebackType)BufferSelf	TypeAliasr   	IPAddressc                    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)ips    S/var/www/html/flask-app/venv/lib/python3.12/site-packages/trio/testing/_fake_net.py_family_forr    *   sN    "i++,{{"""	B	--	.{{###
A
BB    c                    | 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   familys    r   _wildcard_ip_forr*   2   sT    $$$##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_forr.   ;   sT    $$$##K00	4;;''	'##E**
;
<<r!   c                @    t        | t        j                  |             N)OSErrorosstrerror)codes    r   	_fake_errr5   C   s    
$D)
**r!   c                    d}|D ]^  }| ||t        |      j                  z    }t        |      5 }||d t        |       d d d        |t        |      z  }|t        |       k(  s] |S  |S # 1 sw Y   ,xY w)Nr   )
memoryviewnbyteslen)databufferswrittenbuf
next_piecembufs         r   _scatterr@   G   s    G 'Gjo.D.D$DE
_ 	1&0D"3z?#	13z?"c$iN N	1 	1s   A((A1	T_UDPEndpointUDPEndpoint)boundc                  H    e Zd ZU ded<   ded<   ddZe	 	 	 	 	 	 d	d       Zy)
rB   r   r   intportc                    | j                   j                  | j                  f}t        | j                   t        j
                        r|dz  }|S )Nr   r   )r   
compressedrF   r   r   r   )selfsockaddrs     r   as_python_sockaddrzUDPEndpoint.as_python_sockaddr[   sC    GGIIA
 dggy445Hr!   c                L    |d d \  }} | t        j                  |      |      S )N   )r   rF   )r   r'   )clsrK   r   rF   s       r   from_python_sockaddrz UDPEndpoint.from_python_sockaddrd   s+     BQ<Di**2.T::r!   Nreturn+tuple[str, int] | tuple[str, int, int, int])rO   ztype[T_UDPEndpoint]rK   rS   rR   rA   )__name__
__module____qualname____annotations__rL   classmethodrP    r!   r   rB   rB   V   s=    M
I ; ;,W;	; ;r!   c                      e Zd ZU ded<   y)
UDPBindingrB   localN)rT   rU   rV   rW   rY   r!   r   r[   r[   l   s    r!   r[   c                  \    e Zd ZU ded<   ded<    ej
                  d       Zded<   d
dZy	)	UDPPacketrB   sourcedestinationc                "    | j                         S r0   )hex)ps    r   <lambda>zUDPPacket.<lambda>v   s     r!   )reprbytespayloadc                F    t        | j                  | j                  |      S )Nr_   r`   rg   )r^   r`   r_   )rJ   rg   s     r   replyzUDPPacket.replyy   s     ##g
 	
r!   N)rg   rf   rR   r^   )rT   rU   rV   rW   attrsfieldrg   rj   rY   r!   r   r^   r^   r   s)     U[[&78GU8
r!   r^   c                       e Zd ZU ded<   ddZy)FakeSocketFactoryFakeNetfake_netc                F    t         j                  | j                  |||      S r0   )
FakeSocket_createrp   )rJ   r)   type_protos       r   r   zFakeSocketFactory.socket   s    !!$--FFr!   N)r)   rE   rt   rE   ru   rE   rR   rr   )rT   rU   rV   rW   r   rY   r!   r   rn   rn      s    Gr!   rn   c                  X    e Zd ZU ded<   	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZy)	FakeHostnameResolverro   rp   c                    K   t        d      wNzFakeNet doesn't do fake DNS yetr   )rJ   hostrF   r)   typeru   flagss          r   getaddrinfoz FakeHostnameResolver.getaddrinfo   s     " ""CDD   c                    K   t        d      wry   rz   )rJ   rK   r}   s      r   getnameinfoz FakeHostnameResolver.getnameinfo   s      ""CDDr   N)r   r   r   r   )r{   zbytes | NonerF   zbytes | str | int | Noner)   rE   r|   rE   ru   rE   r}   rE   rR   z]list[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int]]])rK   rS   r}   rE   rR   ztuple[str, str])rT   rU   rV   rW   r~   r   rY   r!   r   rw   rw      s     EE 'E 	E
 E E E
E&ECELOE	Er!   rw   c                  4    e Zd ZddZddZddZd	dZd	dZy)
ro   c                    t        j                  d      j                         | _        t        j                  d      j                         | _        t        t        dd            | _        i | _	        d | _
        y )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rJ   s    r   __init__zFakeNet.__init__   s]    (44[AGGI(44X>DDF#E%$7846 r!   c                p    || j                   v rt        t        j                         || j                   |<   y r0   )r   r5   errno
EADDRINUSE)rJ   bindingr   s      r   _bindzFakeNet._bind   s*    dkk!e&&'%Gr!   c                    t         j                  j                  t        |              t         j                  j	                  t        |              y r0   )r   r   set_custom_socket_factoryrn   set_custom_hostname_resolverrw   r   s    r   enablezFakeNet.enable   s2    --.?.EF001Ed1KLr!   c                b    | j                   | j                  |       y | j                  |       y r0   )r   deliver_packetrJ   packets     r   send_packetzFakeNet.send_packet   s*    $'f%r!   c                    t        |j                        }|| j                  v r| j                  |   j                  |       y y )Nr\   )r[   r`   r   _deliver_packet)rJ   r   r   s      r   r   zFakeNet.deliver_packet   s:    6#5#56dkk!KK 008 r!   NrR   None)r   r[   r   rr   rR   r   r   r^   rR   r   )rT   rU   rV   r   r   r   r   r   rY   r!   r   ro   ro      s    !&
M&r!   ro   c                     e Zd Z	 	 	 	 	 	 	 	 d)dZed*d       Zed+d       Zed,d       Zd-dZd-dZ		 	 	 	 	 	 d.dZ
d/dZd0d	Zd1d
Z	 	 	 d2	 	 	 	 	 	 	 	 	 d3dZej                   dk7  ses eej&                  d      reZ	 	 d4	 	 	 	 	 	 	 d5dZej                   dk7  ses eej&                  d      reZd6dZd6dZed7d       Zed8d       Z	 d9	 	 	 	 	 	 	 d:dZed;d       Ze	 	 	 	 	 	 	 	 	 	 d<d       Z	 d9	 	 	 	 	 	 	 	 	 d=dZd>dZ	 	 	 	 	 	 	 	 d?dZd@dAdZe	 	 	 	 	 	 dBd       Ze	 	 	 	 	 	 	 	 dCd       ZdDdZd@dEdZ d4dFdZ!d@dGd Z"	 d4	 	 	 	 	 	 	 dHd!Z#	 d4	 	 	 	 	 	 	 dId"Z$ej                   dk7  ses eej&                  d      re$Z%d,d#Z&d,d$Z'dJd%Z(dKd&Z)ej                   dk(  ses eej&                  d'      rdLd(Z*yyy)Mrr   c                
   || _         |st        j                  j                  }|st        j                  j                  }|t        j                  j                  t        j                  j
                  fvrt        d|       |t        j                  j                  k7  rt        d|       || _        || _	        || _
        d| _        t        j                  t           t        d            \  | _        | _        d | _        y )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_channelr^   float_packet_sender_packet_receiver_binding)rJ   rp   r)   r|   ru   s        r   r   zFakeSocket.__init__   s     "[[((F;;**D$++--t{{/C/CDD%(MfX&VWW4;;)))%(KD6&RSS
595M5M6

,62T2
 ,0r!   c                    | j                   S r0   )r   r   s    r   r|   zFakeSocket.type   s    zzr!   c                    | j                   S r0   )r   r   s    r   r)   zFakeSocket.family   s    ||r!   c                    | j                   S r0   )r   r   s    r   ru   zFakeSocket.proto   s    {{r!   c                P    | j                   rt        t        j                         y y r0   )r   r5   r   EBADFr   s    r   _check_closedzFakeSocket._check_closed   s    <<ekk" r!   c                    | j                   ry d| _         | j                  !| j                  j                  | j                  = | j                  j                          y )NT)r   r   r   r   r   closer   s    r   r   zFakeSocket.close   sE    <<==$%%dmm4##%r!   c                  K   t         j                  j                  | j                  | j                  | j
                  |d|       d {   S 7 w)NF)addressipv6_v6onlyr\   )r   _socket_resolve_address_nocpr|   r)   ru   )rJ   r   r\   s      r   r   z FakeSocket._resolve_address_nocp  sL      \\77IIKKJJ 8 
 
 	
 
s   AA	A
Ac                    t        j                  t        j                        5  | j                  j                  |       d d d        y # 1 sw Y   y xY wr0   )
contextlibsuppressr   BrokenResourceErrorr   send_nowaitr   s     r   r   zFakeSocket._deliver_packet  s?      !9!9: 	4++F3	4 	4 	4s   A		Ac                  K   | j                          | j                  t        t        j                         t
        j                  j                          d {    | j                  |d       d {   ^}}}|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                  j%                  ||        || _        y 7 7 w)	NTr   zTODO: handle other values?r#   r,   r$   r-   r   )r   r   r5   r   EINVALr   lowlevel
checkpointr   r   r'   r    r)   nextr   r   r[   rB   r   )rJ   addrip_strrF   _r   r   s          r   bindzFakeSocket.bind  s&    ==$ell#mm&&(((!%!;!;D!;!MMqBw444!!&)2$++--%%i00%%k2B9''--%%e,B19667D;r4#89Wd+ 	)Ms%   AE5E0E54E35C<E53E5c                    K   t        d      w)Nz0FakeNet does not (yet) support connected socketsrz   )rJ   peers     r   connectzFakeSocket.connect,  s     !"TUUr   Nc                  K   | j                          t        j                  j                          d {    || j	                  |d       d {   }|rt        d      |rt        d|       |t        t        j                         t        j                  |      }| j                  8| j                  t        | j                        j                  df       d {    dj!                  |      }| j                  J t#        | j                  j$                  ||      }| j&                  j)                  |       t+        |      S 7 7 7 pw)NFr   &FakeNet doesn't support ancillary dataz"FakeNet send flags must be 0, not r   r!   ri   )r   r   r   r   r   r   r5   r   ENOTCONNrB   rP   r   r   r*   r)   rI   joinr^   r\   r   r   r9   )rJ   r;   ancdatar}   r   r`   rg   r   s           r   _sendmsgzFakeSocket._sendmsg/  s(     	mm&&((( 66we6LLG%&NOO%(J5'&RSS?enn%!66w?== ))-dkk:EEqIJJJ((7#}}((==&&#
 	""6*7|9 	) M Ks5   2EEEEBE"E#A,EEEwin32sendmsgc                  K   |dk7  rt        d      |dk7  rt        d      | j                  t        d      | j                          g }d}| j                  j	                          d {   }|j
                  j                         }t        |j                  |      }|t        |j                        k  r|t        j                  j                  z  }||||fS 7 ow)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   receiver_   rL   r@   rg   r9   r   r   	MSG_TRUNC)	rJ   r;   
ancbufsizer}   r   	msg_flagsr   r   r<   s	            r   _recvmsg_intozFakeSocket._recvmsg_into[  s      ?%&NOOA:%&NOO==  &2  	02	,,4466--2246>>73S((...IG33 7s   A)C+C,A0Cc                &   | j                          | j                  $| j                  j                  j                         S | j                  t
        j                  j                  k(  ry| j                  t
        j                  j                  k(  sJ y)N)r#   r   )r$   r   )	r   r   r\   rL   r)   r   r   r   r   r   s    r   getsocknamezFakeSocket.getsockname  sf    ==$==&&99;;[[DKK///!;;$++"6"666r!   c                r   | j                          | j                  t        | j                  d      sJ d       | j                  j                  Ot	        | j                  j                  t
              sJ d       | j                  j                  j                         S t        t        j                         y )NremotezGThis method seems to assume that self._binding has a remote UDPEndpointz,Self._binding.remote should be a UDPEndpoint)
r   r   hasattrr   r   rB   rL   r5   r   r   r   s    r   getpeernamezFakeSocket.getpeername  s    ==$x YXY }}##/!MM((+ BAB }}++>>@@%..!r!   c                    y r0   rY   )rJ   leveloptnames      r   
getsockoptzFakeSocket.getsockopt  s    >Ar!   c                    y r0   rY   rJ   r   r   buflens       r   r   zFakeSocket.getsockopt  s    MPr!   c               F    | j                          t        d| d| d      )Nz%FakeNet doesn't implement getsockopt(, ))r   r1   r   s       r   r   zFakeSocket.getsockopt  s+     	=eWBwiqQRRr!   c                    y r0   rY   )rJ   r   r   values       r   
setsockoptzFakeSocket.setsockopt  s    TWr!   c                    y r0   rY   rJ   r   r   r   optlens        r   r   zFakeSocket.setsockopt  s     r!   c                   | j                          ||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   r1   r   s        r   r   zFakeSocket.setsockopt  sh     	7KK$$KK## 
 
 %&KLL=eWBwivVWWr!   c                    | S r0   rY   r   s    r   	__enter__zFakeSocket.__enter__  s    r!   c                $    | j                          y r0   )r   )rJ   exc_type	exc_value	tracebacks       r   __exit__zFakeSocket.__exit__  s     	

r!   c                D   K   | j                  ||d        d {   S 7 wr0   )sendto)rJ   r:   r}   s      r   sendzFakeSocket.send  s     [[ud3333s     c                   K   y wr0   rY   )rJ   _FakeSocket__data_FakeSocket__addresss      r   r   zFakeSocket.sendto  s         c                   K   y wr0   rY   )rJ   r  _FakeSocket__flagsr  s       r   r   zFakeSocket.sendto  s      r  c                   K   t        |      dk(  r|\  }}d}n t        |      dk(  r|\  }}}nt        d      | j                  |gg ||       d {   S 7 w)NrN   r      zwrong number of arguments)r9   	TypeErrorr   )rJ   argsr:   r   r}   s        r   r   zFakeSocket.sendto  sa      t9> MD'EY!^#' D%788]]D62ug>>>>s   AAAAc                L   K   | j                  ||       d {   \  }}|S 7 	wr0   )recvfrom)rJ   bufsizer}   r:   r   s        r   recvzFakeSocket.recv  s'     "mmGU;;g <s   $"
$c                N   K   | j                  |||       d {   \  }}|S 7 	wr0   )recvfrom_into)rJ   r=   r8   r}   	got_bytesr   s         r   	recv_intozFakeSocket.recv_into  s.     #'#5#5c65#II	7 Js   %#
%c                T   K   | j                  ||       d {   \  }}}}||fS 7 wr0   )_recvmsg)rJ   r  r}   r:   r   r   r   s          r   r  zFakeSocket.recvfrom  s2     26--2O,O)gy'W} -Ps   (&(c                   K   |dk7  r#|t        |      j                  k7  rt        d      | j                  |gd|       d {   \  }}}}||fS 7 w)Nr   zpartial recvfrom_into)r7   r8   r   r   )rJ   r=   r8   r}   
got_nbytesr   r   r   s           r   r  zFakeSocket.recvfrom_into  se      Q;6Z_%;%;;%&=>>8<8J8JE1e9
 3
/
GY 7""3
s   A AAAc                   K   t        |      }| j                  |g||       d {   \  }}}}t        |d |       |||fS 7 wr0   )	bytearrayr   rf   )	rJ   r  r   r}   r=   r  r   r   r   s	            r   r  zFakeSocket._recvmsg  s[       8<8J8JE:u9
 3
/
GY c+:&')WEE3
s   #AAAc                    t        d      )Nz&can't get fileno() for FakeNet socketsrz   r   s    r   filenozFakeSocket.fileno  s    !"JKKr!   c                    t        d      )Nzcan't detach() a FakeNet socketrz   r   s    r   detachzFakeSocket.detach  s    !"CDDr!   c                     y)NFrY   r   s    r   get_inheritablezFakeSocket.get_inheritable  s    r!   c                    |rt        d      y )Nz&FakeNet can't make inheritable socketsrz   )rJ   inheritables     r   set_inheritablezFakeSocket.set_inheritable  s    %&NOO r!   sharec                    t        d      )NzFakeNet can't share socketsrz   )rJ   
process_ids     r   r#  zFakeSocket.share"  s    %&CDDr!   )rp   ro   r)   r   r|   r   ru   rE   )rR   r   )rR   r   )rR   rE   r   )r   objectr\   boolrR   ztuple[str, int]r   )r   r&  rR   r   )r   r&  rR   r   )rY   r   N)
r;   Iterable[Buffer]r   z!Iterable[tuple[int, int, Buffer]]r}   rE   r   z
Any | NonerR   rE   rH   )r;   r(  r   rE   r}   rE   rR   z2tuple[int, list[tuple[int, int, bytes]], int, Any]rQ   )r   rE   r   rE   rR   rE   )r   rE   r   rE   r   rE   rR   rf   r0   )r   rE   r   rE   r   
int | NonerR   zint | bytes)r   rE   r   rE   r   zint | BufferrR   r   )
r   rE   r   rE   r   r   r   rE   rR   r   )
r   rE   r   rE   r   zint | Buffer | Noner   r)  rR   r   )rR   r   )r   z#builtins.type[BaseException] | Noner   zBaseException | Noner   zTracebackType | NonerR   r   )r   )r:   r   r}   rE   rR   rE   )r  r   r  z!tuple[object, ...] | str | BufferrR   rE   )r  r   r  rE   r  z(tuple[object, ...] | str | None | BufferrR   rE   )r  r   rR   rE   )r  rE   r}   rE   rR   rf   )r=   r   r8   rE   r}   rE   rR   rE   )r  rE   r}   rE   rR   ztuple[bytes, Any])r=   r   r8   rE   r}   rE   rR   ztuple[int, Any])r  rE   r   rE   r}   rE   rR   z4tuple[bytes, list[tuple[int, int, bytes]], int, Any])rR   r'  )r!  r'  rR   r   )r%  rE   rR   rf   )+rT   rU   rV   r   propertyr|   r)   ru   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  recvmsgr  r  r  r"  r#  rY   r!   r   rr   rr      s   00 0 	0
 0@      #&



)-

	

4 *V 68"%!% 3% 	%
 % 
%N ||wgfmmY?
 	4!4 4 	4
 
<4> ||wgfmmY?$" A AP P AESS&)S3=S	S W W&)26@C	  "X X 	X
 #X X 
X,5 ( (	
 
4 )J	    <	
 
 ?
 :;###&#36#	# ?@FF(+F8;F	=F ||wgfmmY?LEP ||wgfmmW=	E >Mr!   rr   )	metaclass)r   r   rR   rE   )r)   rE   rR   r   )r4   rE   rR   r   )r:   rf   r;   r(  rR   rE   )4
__future__r   r   r   r   r2   r   r+  typingr   r   r   r   r   r	   r
   rk   r   
trio._utilr   r   builtinsr   r   typesr   typing_extensionsr   r   r   r   r   r   rW   r    r*   r.   r5   r@   rA   frozenrB   r[   r^   abcSocketFactoryrn   HostnameResolverrw   ro   
SocketTyperr   rY   r!   r   <module>r;     s   #    	  
     10#99Y22I4I4IIJ	9 JC==+	 }= ; ; ;*   
 	
 	
 	
 G.. G G E48844 E E8      F ZE''3F ZE ZEr!   