
    ,hG                       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 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 d dlmZmZ d dlmZ d dlmZmZmZ d d	lmZ eej@                  ejB                  f   Z"d
e#d<   d dZ$d!dZ%d!dZ&d"dZ'd#dZ(ejR                   G d d             Z*ejR                   G d d             Z+ejR                   G d d             Z,ejR                   G d dejZ                  j\                               Z/ejR                   G d dejZ                  j`                               Z1e G d d             Z2e G d dej                  jf                  e             Z4y)$    )annotationsN)TYPE_CHECKINGAnyNoReturnUnionoverload)NoPublicConstructorfinal)Iterable)AddressFamily
SocketKind)TracebackType)BufferSelf	TypeAlias)AddressFormatr   	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    X/var/www/html/Resume-Scraper/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*   3   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   D   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@   H   s    G 'Gjo.D.D$DE
_ 	1&0D"3z?#	13z?"c$iN N	1 	1s   A((A1	c                  D    e Zd ZU ded<   ded<   ddZe	 	 	 	 d	d       Zy)
UDPEndpointr   r   intportc                    | j                   j                  | j                  f}t        | j                   t        j
                        r|dz  }|S )Nr   r   )r   
compressedrD   r   r   r   )selfsockaddrs     r   as_python_sockaddrzUDPEndpoint.as_python_sockaddrY   sC    GGIIA
 dggy445Hr!   c                L    |d d \  }} | t        j                  |      |      S )N   )r   rD   )r   r'   )clsrI   r   rD   s       r   from_python_sockaddrz UDPEndpoint.from_python_sockaddrb   s+    
 BQ<Di**2.T::r!   Nreturn+tuple[str, int] | tuple[str, int, int, int])rI   rQ   rP   rB   )__name__
__module____qualname____annotations__rJ   classmethodrN    r!   r   rB   rB   T   s7    M
I ;=; 
; ;r!   rB   c                      e Zd ZU ded<   y)
UDPBindingrB   localN)rR   rS   rT   rU   rW   r!   r   rY   rY   k   s    r!   rY   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>u   s     r!   )reprbytespayloadc                F    t        | j                  | j                  |      S )Nr]   r^   re   )r\   r^   r]   )rH   re   s     r   replyzUDPPacket.replyx   s"    ##
 	
r!   N)re   rd   rP   r\   )rR   rS   rT   rU   attrsfieldre   rh   rW   r!   r   r\   r\   q   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_creatern   )rH   r)   type_protos       r   r   zFakeSocketFactory.socket   s    !!$--FFr!   N)r)   rC   rr   rC   rs   rC   rP   rp   )rR   rS   rT   rU   r   rW   r!   r   rl   rl      s    Gr!   rl   c                  X    e Zd ZU ded<   	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZy)	FakeHostnameResolverrm   rn   c                    K   t        d      wNzFakeNet doesn't do fake DNS yetr   )rH   hostrD   r)   typers   flagss          r   getaddrinfoz FakeHostnameResolver.getaddrinfo   s     " ""CDD   c                    K   t        d      wrw   rx   )rH   rI   r{   s      r   getnameinfoz FakeHostnameResolver.getnameinfo   s     
 ""CDDr}   N)r   r   r   r   )ry   zbytes | NonerD   zbytes | str | int | Noner)   rC   rz   rC   rs   rC   r{   rC   rP   zqlist[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]]])rI   rQ   r{   rC   rP   ztuple[str, str])rR   rS   rT   rU   r|   r   rW   r!   r   ru   ru      s     EE 'E 	E
 E E E
E&E=E E 
	Er!   ru   c                  4    e Zd ZddZddZddZd	dZd	dZy)
rm   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rH   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)rH   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_factoryrl   set_custom_hostname_resolverru   r   s    r   enablezFakeNet.enable   s2    --.?.EF001Ed1KLr!   c                b    | j                   | j                  |       y | j                  |       y r0   )r   deliver_packetrH   packets     r   send_packetzFakeNet.send_packet   s*    $'f%r!   c                    t        |j                        }|| j                  v r| j                  |   j                  |       y y )NrZ   )rY   r^   r   _deliver_packet)rH   r   r   s      r   r   zFakeNet.deliver_packet   s:    6#5#56dkk!KK 008 r!   NrP   None)r   rY   r   rp   rP   r   r   r\   rP   r   )rR   rS   rT   r   r   r   r   r   rW   r!   r   rm   rm      s    !&
M&r!   rm   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)Mrp   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)rH   rn   r)   rz   rs   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   rz   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   rs   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_v6onlyrZ   )r   _socket_resolve_address_nocprz   r)   rs   )rH   r   rZ   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   rY   rB   r   )rH   addrip_strrD   _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 socketsrx   )rH   peers     r   connectzFakeSocket.connect2  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!   rg   )r   r   r   r   r   r   r5   r   ENOTCONNrB   rN   r   r   r*   r)   rG   joinr\   rZ   r   r   r9   )rH   r;   ancdatar{   r   r^   re   r   s           r   _sendmsgzFakeSocket._sendmsg5  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]   rJ   r@   re   r9   r   r   	MSG_TRUNC)	rH   r;   
ancbufsizer{   r   	msg_flagsr   r   r<   s	            r   _recvmsg_intozFakeSocket._recvmsg_intoa  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   rZ   rJ   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   rJ   r5   r   r   r   s    r   getpeernamezFakeSocket.getpeername  s    ==$ Y YY }}##/!MM(( B BB }}++>>@@%..!r!   c                    y r0   rW   )rH   leveloptnames      r   
getsockoptzFakeSocket.getsockopt  s    >Ar!   c                    y r0   rW   rH   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   rW   )rH   r   r   values       r   
setsockoptzFakeSocket.setsockopt  s    TWr!   c                    y r0   rW   rH   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   rW   r   s    r   	__enter__zFakeSocket.__enter__  s    r!   c                $    | j                          y r0   )r   )rH   exc_type	exc_value	tracebacks       r   __exit__zFakeSocket.__exit__  s     	

r!   c                D   K   | j                  ||d        d {   S 7 wr0   )sendto)rH   r:   r{   s      r   sendzFakeSocket.send  s     [[ud3333s     c                   K   y wr0   rW   )rH   _FakeSocket__data_FakeSocket__addresss      r   r   zFakeSocket.sendto  s     
    c                   K   y wr0   rW   )rH   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)NrL   r      zwrong number of arguments)r9   	TypeErrorr   )rH   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)rH   bufsizer{   r:   _addresss        r   recvzFakeSocket.recv
  s'     #}}We<<h =s   $"
$c                N   K   | j                  |||       d {   \  }}|S 7 	wr0   )recvfrom_into)rH   r=   r8   r{   	got_bytesr  s         r   	recv_intozFakeSocket.recv_into  s.     $($6$6sFE$JJ	8 Ks   %#
%c                T   K   | j                  ||       d {   \  }}}}||fS 7 wr0   )_recvmsg)rH   r  r{   r:   _ancdata
_msg_flagsr   s          r   r  zFakeSocket.recvfrom  s4     
 59MM'54Q.Q+h
GW} /R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   )rH   r=   r8   r{   
got_nbytesr  r  r   s           r   r  zFakeSocket.recvfrom_into  sg      Q;6Z_%;%;;%&=>>:>:L:LE;
 5
1
Hj'
 7""5
s   A AAAc                   K   t        |      }| j                  |g||       d {   \  }}}}t        |d |       |||fS 7 wr0   )	bytearrayr   rd   )	rH   r  r   r{   r=   r  r   r   r   s	            r   r  zFakeSocket._recvmsg)  s]       8<8J8JE9
 3
/
GY
 c+:&')WEE3
s   #AAAc                    t        d      )Nz&can't get fileno() for FakeNet socketsrx   r   s    r   filenozFakeSocket.fileno<  s    !"JKKr!   c                    t        d      )Nzcan't detach() a FakeNet socketrx   r   s    r   detachzFakeSocket.detach?  s    !"CDDr!   c                     y)NFrW   r   s    r   get_inheritablezFakeSocket.get_inheritableB  s    r!   c                    |rt        d      y )Nz&FakeNet can't make inheritable socketsrx   )rH   inheritables     r   set_inheritablezFakeSocket.set_inheritableE  s    %&NOO r!   sharec                    t        d      )NzFakeNet can't share socketsrx   )rH   
process_ids     r   r$  zFakeSocket.shareM  s    %&CDDr!   )
rn   rm   r)   r   rz   r   rs   rC   rP   r   )rP   r   )rP   r   )rP   rC   r   )r   objectrZ   boolrP   ztuple[str, int]r   )r   r'  rP   r   )r   r'  rP   r   )rW   r   N)
r;   Iterable[Buffer]r   z!Iterable[tuple[int, int, Buffer]]r{   rC   r   zAddressFormat | NonerP   rC   rF   )r;   r)  r   rC   r{   rC   rP   zZtuple[int, list[tuple[int, int, bytes]], int, tuple[str, int] | tuple[str, int, int, int]]rO   )r   rC   r   rC   rP   rC   )r   rC   r   rC   r   rC   rP   rd   r0   )r   rC   r   rC   r   
int | NonerP   zint | bytes)r   rC   r   rC   r   zint | BufferrP   r   )
r   rC   r   rC   r   r   r   rC   rP   r   )
r   rC   r   rC   r   zint | Buffer | Noner   r*  rP   r   )rP   r   )r   z#builtins.type[BaseException] | Noner   zBaseException | Noner   zTracebackType | NonerP   r   )r   )r:   r   r{   rC   rP   rC   )r  r   r  z!tuple[object, ...] | str | BufferrP   rC   )r  r   r  rC   r  z(tuple[object, ...] | str | Buffer | NonerP   rC   )r	  r   rP   rC   )r  rC   r{   rC   rP   rd   )r=   r   r8   rC   r{   rC   rP   rC   )r  rC   r{   rC   rP   ztuple[bytes, AddressFormat])r=   r   r8   rC   r{   rC   rP   ztuple[int, AddressFormat])r  rC   r   rC   r{   rC   rP   z>tuple[bytes, list[tuple[int, int, bytes]], int, AddressFormat])rP   r(  )r"  r(  rP   r   )r&  rC   rP   rd   )+rR   rS   rT   r   propertyrz   r)   rs   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$  rW   r!   r   rp   rp      s   00 0 	0
 0 
0@      #&

 	

 

4 *V 68(,%!% 3% 	%
 &% 
%N ||wgfmmY?
 	"4!"4 "4 	"4

"4H ||wgfmmY?$" A AP P "S S 	S
 S 
S W W  	
   
  "X X 	X
 #X X 
X,5 ( (	
 
4  5 
	    <	
 
 ?? 
?    
%	 	## # 	#
 
##$ 	FF F 	F
 
HF ||wgfmmY?LEP ||wgfmmW=	E >Mr!   rp   )	metaclass)r   r   rP   rC   )r)   rC   rP   r   )r4   rC   rP   r   )r:   rd   r;   r)  rP   rC   )5
__future__r   r   r   r   r2   r   r,  typingr   r   r   r   r   ri   r   
trio._utilr	   r
   builtinscollections.abcr   r   r   typesr   typing_extensionsr   r   r   trio._socketr   r   r   r   rU   r    r*   r.   r5   r@   frozenrB   rY   r\   abcSocketFactoryrl   HostnameResolverru   rm   
SocketTyperp   rW   r!   r   <module>r>     sz   #    	  
    1(0#99*Y22I4I4IIJ	9 JC==+	 ; ; ;,   
 
 
 
 G.. G G E48844 E E<      F BE''3F BE BEr!   