
    vKgF                       % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	J
r
JrJrJrJrJr  S SKrS SKrS SKJrJr  \	(       a  S SKrS SKJrJr  S SKJr  S SKJrJrJr  \\R<                  \R>                  4   r S\!S	'   S S
 jr"S!S jr#S!S jr$S"S jr%S#S jr&\" SSS9r'\RP                   " S S5      5       r)\RP                   " S S5      5       r*\RP                   " S S5      5       r+\RP                   " S S\RX                  RZ                  5      5       r.\RP                   " S S\RX                  R^                  5      5       r0\ " S S5      5       r1\ " S S\R                  Rd                  \S95       r3g)$    )annotationsN)TYPE_CHECKINGAnyIterableNoReturnTypeVarUnionoverload)NoPublicConstructorfinal)AddressFamily
SocketKind)TracebackType)BufferSelf	TypeAliasr   	IPAddressc                    [        U [        R                  5      (       a  [        R                  R
                  $ [        U [        R                  5      (       a  [        R                  R                  $ [        S5      e)Nz!Unhandled IPAddress instance type)	
isinstance	ipaddressIPv4AddresstriosocketAF_INETIPv6AddressAF_INET6NotImplementedError)ips    V/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/trio/testing/_fake_net.py_family_forr    *   sT    "i++,,{{"""	B	--	.	.{{###
A
BB    c                    U [         R                  R                  :X  a  [        R                  " S5      $ U [         R                  R
                  :X  a  [        R                  " S5      $ [        S5      e)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                    U [         R                  R                  :X  a  [        R                  " S5      $ U [         R                  R
                  :X  a  [        R                  " S5      $ [        S5      e)N	127.0.0.1::1r%   r&   r(   s    r   _localhost_ip_forr.   ;   sT    $$$##K00	4;;''	'##E**
;
<<r!   c                B    [        U [        R                  " U 5      5      eN)OSErrorosstrerror)codes    r   	_fake_errr5   C   s    
$D)
**r!   c                    SnU H^  nXU[        U5      R                  -    n[        U5       nXES [        U5      & S S S 5        U[        U5      -  nU[        U 5      :X  d  M]    U$    U$ ! , (       d  f       N4= f)Nr   )
memoryviewnbyteslen)databufferswrittenbuf
next_piecembufs         r   _scatterr@   G   sx    GGjo.D.D$DE
_&0"3z?# 3z?"c$iN  N _s   A))
A7	T_UDPEndpointUDPEndpoint)boundc                  T    \ rS rSr% S\S'   S\S'   S
S jr\      SS j5       rSrg	)rB   V   r   r   intportc                    U R                   R                  U R                  4n[        U R                   [        R
                  5      (       a  US-  nU$ )Nr   r   )r   
compressedrG   r   r   r   )selfsockaddrs     r   as_python_sockaddrUDPEndpoint.as_python_sockaddr[   sF    GGIIA
 dggy4455Hr!   c                F    US S u  p#U " [         R                  " U5      US9$ )N   )r   rG   )r   r'   )clsrL   r   rG   s       r   from_python_sockaddr UDPEndpoint.from_python_sockaddrd   s)    
 BQ<i**2.T::r!    Nreturn+tuple[str, int] | tuple[str, int, int, int])rQ   ztype[T_UDPEndpoint]rL   rW   rV   rA   )	__name__
__module____qualname____firstlineno____annotations__rM   classmethodrR   __static_attributes__rT   r!   r   rB   rB   V   s?    M
I ; ;=; 
; ;r!   c                       \ rS rSr% S\S'   Srg)
UDPBindingm   rB   localrT   N)rX   rY   rZ   r[   r\   r^   rT   r!   r   r`   r`   m   s    r!   r`   c                  `    \ rS rSr% S\S'   S\S'   \R                  " S S9rS\S'   SS	 jrS
r	g)	UDPPackets   rB   sourcedestinationc                "    U R                  5       $ r0   )hex)ps    r   <lambda>UDPPacket.<lambda>w   s
    r!   )reprbytespayloadc                @    [        U R                  U R                  US9$ )Nrf   rg   ro   )rd   rg   rf   )rK   ro   s     r   replyUDPPacket.replyz   s"    ##
 	
r!   rT   N)ro   rn   rV   rd   )
rX   rY   rZ   r[   r\   attrsfieldro   rr   r^   rT   r!   r   rd   rd   s   s'    [[&78GU8
r!   rd   c                  *    \ rS rSr% S\S'   SS jrSrg)FakeSocketFactory   FakeNetfake_netc                D    [         R                  U R                  XU5      $ r0   )
FakeSocket_createrz   )rK   r)   type_protos       r   r   FakeSocketFactory.socket   s    !!$--FFr!   rT   N)r)   rF   r~   rF   r   rF   rV   r|   )rX   rY   rZ   r[   r\   r   r^   rT   r!   r   rw   rw      s    Gr!   rw   c                  f    \ rS rSr% S\S'       S             S	S jjr      S
S jrSrg)FakeHostnameResolver   ry   rz   c                    #    [        S5      e7fNzFakeNet doesn't do fake DNS yetr   )rK   hostrG   r)   typer   flagss          r   getaddrinfo FakeHostnameResolver.getaddrinfo   s     " ""CDD   c                    #    [        S5      e7fr   r   )rK   rL   r   s      r   getnameinfo FakeHostnameResolver.getnameinfo   s     
 ""CDDr   rT   N)r   r   r   r   )r   zbytes | NonerG   zbytes | str | int | Noner)   rF   r   rF   r   rF   r   rF   rV   z]list[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int]]])rL   rW   r   rF   rV   ztuple[str, str])rX   rY   rZ   r[   r\   r   r   r^   rT   r!   r   r   r      s     EE 'E 	E
 E E E
E&E=E E 
	Er!   r   c                  F    \ rS rSrS	S jrS
S jrS	S jrSS jrSS jrSr	g)ry      c                    [         R                  " S5      R                  5       U l        [         R                  " S5      R                  5       U l        [        [        SS5      5      U l        0 U l	        S U l
        g )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rK   s    r   __init__FakeNet.__init__   s]    (44[AGGI(44X>DDF#E%$7846 r!   c                p    XR                   ;   a  [        [        R                  5        X R                   U'   g r0   )r   r5   errno
EADDRINUSE)rK   bindingr   s      r   _bindFakeNet._bind   s&    kk!e&&'%Gr!   c                    [         R                  R                  [        U 5      5        [         R                  R	                  [        U 5      5        g r0   )r   r   set_custom_socket_factoryrw   set_custom_hostname_resolverr   r   s    r   enableFakeNet.enable   s2    --.?.EF001Ed1KLr!   c                d    U R                   c  U R                  U5        g U R                  U5        g r0   )r   deliver_packetrK   packets     r   send_packetFakeNet.send_packet   s*    $'f%r!   c                    [        UR                  S9nX R                  ;   a  U R                  U   R                  U5        g g )Nrb   )r`   rg   r   _deliver_packet)rK   r   r   s      r   r   FakeNet.deliver_packet   s8    6#5#56kk!KK 008 r!   )r   r   r   r   r   NrV   None)r   r`   r   r|   rV   r   r   rd   rV   r   )
rX   rY   rZ   r[   r   r   r   r   r   r^   rT   r!   r   ry   ry      s    !&
M&r!   ry   c                  \   \ rS rSr        S+S jr\S,S j5       r\S-S j5       r\S.S j5       rS/S jr	S/S jr
      S0S jrS1S	 jrS2S
 jrS3S jr   S4         S5S jjr\R"                  S:w  d  \(       d  \" \R(                  S5      (       a  \r  S6       S7S jjr\R"                  S:w  d  \(       d  \" \R(                  S5      (       a  \rS8S jrS8S jr\S9S j5       r\S:S j5       r S;       S<S jjr\S=S j5       r\          S>S j5       r S;         S?S jjrS@S jr        SAS jrSBSCS jjr\      SDS j5       r \        SES j5       r SFS jr SBSGS jjr!S6SHS  jjr"SBSIS! jjr#  S6       SJS" jjr$  S6       SKS# jjr%\R"                  S:w  d  \(       d  \" \R(                  S5      (       a  \%r&S.S$ jr'S.S% jr(SLS& jr)SMS' jr*\R"                  S:X  d  \(       d#  \" \R(                  S(5      (       a  SNS) jr+S*r,gS*r,gS*r,g)Or|      c                   Xl         U(       d  [        R                  R                  nU(       d  [        R                  R                  nU[        R                  R                  [        R                  R
                  4;  a  [        SU 35      eU[        R                  R                  :w  a  [        SU 35      eX l        X0l	        X@l
        SU l        [        R                  [           " [        S5      5      u  U l        U l        S U l        g )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_channelrd   float_packet_sender_packet_receiver_binding)rK   rz   r)   r   r   s        r   r   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                    U R                   $ r0   )r   r   s    r   r   FakeSocket.type   s    zzr!   c                    U R                   $ r0   )r   r   s    r   r)   FakeSocket.family   s    ||r!   c                    U R                   $ r0   )r   r   s    r   r   FakeSocket.proto   s    {{r!   c                Z    U R                   (       a  [        [        R                  5        g g r0   )r   r5   r   EBADFr   s    r   _check_closedFakeSocket._check_closed   s    <<ekk" r!   c                    U R                   (       a  g SU l         U R                  b!  U R                  R                  U R                  	 U R                  R                  5         g )NT)r   r   r   r   r   closer   s    r   r   FakeSocket.close   sE    <<==$%%dmm4##%r!   c          	        #    [         R                  R                  U R                  U R                  U R
                  USUS9I S h  vN $  N7f)NF)addressipv6_v6onlyrb   )r   _socket_resolve_address_nocpr   r)   r   )rK   r   rb   s      r   r    FakeSocket._resolve_address_nocp  sK      \\77IIKKJJ 8 
 
 	
 
s   AAAAc                    [         R                  " [        R                  5         U R                  R                  U5        S S S 5        g ! , (       d  f       g = fr0   )
contextlibsuppressr   BrokenResourceErrorr   send_nowaitr   s     r   r   FakeSocket._deliver_packet  s6      !9!9:++F3 ;::s   A


Ac                  #    U R                  5         U R                  b  [        [        R                  5        [
        R                  R                  5       I S h  vN   U R                  USS9I S h  vN tp#nU/ :X  d   S5       e[        R                  " U5      n[        U5      U R                  :X  d   eU[        R                  " S5      :X  a  [        R                  " S5      nO0U[        R                  " S5      :X  a  [        R                  " S5      nUS:X  a  [        U R                  R                  5      n[!        [#        XS5      S9nU R                  R%                  X`5        X`l        g  GN GN7f)	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   )rK   addrip_strrG   _r   r   s          r   bindFakeSocket.bind  s!    ==$ell#mm&&(((!%!;!;D!;!MMqBw444w!!&)2$++---%%i00%%k2B9''--%%e,B19667D;r#89W+ 	)Ms%   AE7E1E72E43C?E74E7c                    #    [        S5      e7f)Nz0FakeNet does not (yet) support connected socketsr   )rK   peers     r   connectFakeSocket.connect4  s     !"TUUr   Nc                  #    U R                  5         [        R                  R                  5       I S h  vN   Ub  U R	                  USS9I S h  vN nU(       a  [        S5      eU(       a  [        SU 35      eUc  [        [        R                  5        [        R                  U5      nU R                  c8  U R                  [        U R                  5      R                  S45      I S h  vN   SR!                  U5      nU R                  c   e[#        U R                  R$                  UUS9nU R&                  R)                  U5        [+        U5      $  GN" GN
 No7f)NFr   &FakeNet doesn't support ancillary dataz"FakeNet send flags must be 0, not r   r!   rq   )r   r   r   r   r   r   r5   r   ENOTCONNrB   rR   r   r   r*   r)   rJ   joinrd   rb   r   r   r9   )rK   r;   ancdatar   r   rg   ro   r   s           r   _sendmsgFakeSocket._sendmsg7  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                  #    US:w  a  [        S5      eUS:w  a  [        S5      eU R                  c  [        S5      eU R                  5         / nSnU R                  R	                  5       I S h  vN nUR
                  R                  5       n[        UR                  U5      nU[        UR                  5      :  a  U[        R                  R                  -  nXXW4$  Nn7f)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   receiverf   rM   r@   ro   r9   r   r   	MSG_TRUNC)	rK   r;   
ancbufsizer   r   	msg_flagsr   r   r<   s	            r   _recvmsg_intoFakeSocket._recvmsg_intoc  s      ?%&NOOA:%&NOO==  &2  	02	,,4466--2246>>73S((...I33 7s   A,C.C/A/Cc                ,   U R                  5         U R                  b$  U R                  R                  R                  5       $ U R                  [
        R                  R                  :X  a  gU R                  [
        R                  R                  :X  d   eg)N)r#   r   )r$   r   )	r   r   rb   rM   r)   r   r   r   r   r   s    r   getsocknameFakeSocket.getsockname  si    ==$==&&99;;[[DKK///!;;$++"6"6666r!   c                   U R                  5         U R                  b  [        U R                  S5      (       d   S5       eU R                  R                  bT  [	        U R                  R                  [
        5      (       d   S5       eU R                  R                  R                  5       $ [        [        R                  5        g )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   rM   r5   r   r   r   s    r   getpeernameFakeSocket.getpeername  s    ==$  Y YY  }}##/!MM((  B BB  }}++>>@@%..!r!   c                   g r0   rT   )rK   leveloptnames      r   
getsockoptFakeSocket.getsockopt  s    >Ar!   c                   g r0   rT   rK   r	  r
  buflens       r   r  r    s    MPr!   c               F    U R                  5         [        SU SU S35      e)Nz%FakeNet doesn't implement getsockopt(, ))r   r1   r  s       r   r  r    s+     	=eWBwiqQRRr!   c                   g r0   rT   )rK   r	  r
  values       r   
setsockoptFakeSocket.setsockopt  s    TWr!   c                   g r0   rT   rK   r	  r
  r  optlens        r   r  r    s     r!   c                   U R                  5         X4[        R                  R                  [        R                  R                  4:X  a  U(       d  [        S5      e[        SU SU S35      e)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  r    sf     	KK$$KK## 
 
 %&KLL=eWBwivVWWr!   c                    U $ r0   rT   r   s    r   	__enter__FakeSocket.__enter__  s    r!   c                $    U R                  5         g r0   )r   )rK   exc_type	exc_value	tracebacks       r   __exit__FakeSocket.__exit__  s     	

r!   c                B   #    U R                  XS 5      I S h  vN $  N7fr0   )sendto)rK   r:   r   s      r   sendFakeSocket.send  s     [[d3333s   c                   #    g 7fr0   rT   )rK   _FakeSocket__data_FakeSocket__addresss      r   r'  FakeSocket.sendto  s
     
    c                   #    g 7fr0   rT   )rK   r+  _FakeSocket__flagsr,  s       r   r'  r-    s
      r.  c                   #    [        U5      S:X  a  Uu  p#SnO [        U5      S:X  a  Uu  p$nO[        S5      eU R                  U// XC5      I S h  vN $  N7f)NrP   r      zwrong number of arguments)r9   	TypeErrorr   )rK   argsr:   r   r   s        r   r'  r-    sZ      t9> MDEY!^#' D788]]D62u>>>>s   AAAAc                H   #    U R                  X5      I S h  vN u  p4U$  N7fr0   )recvfrom)rK   bufsizer   r:   r   s        r   recvFakeSocket.recv  s"     "mmG;; <s   " 	"c                J   #    U R                  XU5      I S h  vN u  pEU$  N7fr0   )recvfrom_into)rK   r=   r8   r   	got_bytesr   s         r   	recv_intoFakeSocket.recv_into  s)     #'#5#5c5#II	 Js   #!	#c                L   #    U R                  X5      I S h  vN u  p4pVX64$  N
7fr0   )_recvmsg)rK   r7  r   r:   r   r   r   s          r   r6  FakeSocket.recvfrom
  s)     26--2O,O)y} -Ps   $"$c                   #    US:w  a$  U[        U5      R                  :w  a  [        S5      eU R                  U/SU5      I S h  vN u  pEpgXG4$  N
7f)Nr   zpartial recvfrom_into)r7   r8   r   r   )rK   r=   r8   r   
got_nbytesr   r   r   s           r   r;  FakeSocket.recvfrom_into  s`      Q;6Z_%;%;;%&=>>8<8J8JE9
 3
/
Y
 ""3
s   AAAAc                   #    [        U5      nU R                  U/UU5      I S h  vN u  pVpx[        US U 5      XgU4$  N7fr0   )	bytearrayr   rn   )	rK   r7  r   r   r=   rC  r   r   r   s	            r   r@  FakeSocket._recvmsg  sV       8<8J8JE9
 3
/
Y
 c+:&'WEE3
s   #A >A c                    [        S5      e)Nz&can't get fileno() for FakeNet socketsr   r   s    r   filenoFakeSocket.fileno0  s    !"JKKr!   c                    [        S5      e)Nzcan't detach() a FakeNet socketr   r   s    r   detachFakeSocket.detach3  s    !"CDDr!   c                    g)NFrT   r   s    r   get_inheritableFakeSocket.get_inheritable6  s    r!   c                (    U(       a  [        S5      eg )Nz&FakeNet can't make inheritable socketsr   )rK   inheritables     r   set_inheritableFakeSocket.set_inheritable9  s    %&NOO r!   sharec                    [        S5      e)NzFakeNet can't share socketsr   )rK   
process_ids     r   rU  FakeSocket.shareA  s    %&CDDr!   )r   r   r   r   r   r   r   r   )rz   ry   r)   r   r   r   r   rF   )rV   r   )rV   r   )rV   rF   r   )r   objectrb   boolrV   ztuple[str, int]r   )r   rY  rV   r   )r   rY  rV   r   )rT   r   N)
r;   Iterable[Buffer]r   z!Iterable[tuple[int, int, Buffer]]r   rF   r   z
Any | NonerV   rF   rI   )r;   r[  r   rF   r   rF   rV   z2tuple[int, list[tuple[int, int, bytes]], int, Any]rU   )r	  rF   r
  rF   rV   rF   )r	  rF   r
  rF   r  rF   rV   rn   r0   )r	  rF   r
  rF   r  
int | NonerV   zint | bytes)r	  rF   r
  rF   r  zint | BufferrV   r   )
r	  rF   r
  rF   r  r   r  rF   rV   r   )
r	  rF   r
  rF   r  zint | Buffer | Noner  r\  rV   r   )rV   r   )r!  z#builtins.type[BaseException] | Noner"  zBaseException | Noner#  zTracebackType | NonerV   r   )r   )r:   r   r   rF   rV   rF   )r+  r   r,  z!tuple[object, ...] | str | BufferrV   rF   )r+  r   r0  rF   r,  z(tuple[object, ...] | str | None | BufferrV   rF   )r4  r   rV   rF   )r7  rF   r   rF   rV   rn   )r=   r   r8   rF   r   rF   rV   rF   )r7  rF   r   rF   rV   ztuple[bytes, Any])r=   r   r8   rF   r   rF   rV   ztuple[int, Any])r7  rF   r   rF   r   rF   rV   z4tuple[bytes, list[tuple[int, int, bytes]], int, Any])rV   rZ  )rR  rZ  rV   r   )rW  rF   rV   rn   )-rX   rY   rZ   r[   r   propertyr   r)   r   r   r   r   r   r   r   r   sysplatformr   r  r   r   r   recvmsg_intor  r  r
   r  r  r  r$  r(  r'  r8  r=  r6  r;  r@  recvmsgrI  rL  rO  rS  rU  r^   rT   r!   r   r|   r|      s   00 0 	0
 0@      #&

 	

 

4 *V 68"%!% 3% 	%
 % 
%N ||wgfmmY??
 	4!4 4 	4
 
<4> ||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
 
>F ||wgfmmY??LEP ||wgfmmW==	E >Mr!   r|   )	metaclass)r   r   rV   rF   )r)   rF   rV   r   )r4   rF   rV   r   )r:   rn   r;   r[  rV   rF   )4
__future__r   r   r   r   r2   r   r^  typingr   r   r   r   r   r	   r
   rt   r   
trio._utilr   r   builtinsr   r   typesr   typing_extensionsr   r   r   r   r   r   r\   r    r*   r.   r5   r@   rA   frozenrB   r`   rd   abcSocketFactoryrw   HostnameResolverr   ry   
SocketTyper|   rT   r!   r   <module>rn     s   #    	  
     10#99Y22I4I4IIJ	9 JC==+	 }= ; ; ;,   
 
 
 
 G.. G G E48844 E E<      F tE''3F tE tEr!   