Ë
    KU hÊ3  ã                  óÂ  — U d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
 d dlm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 d
dlmZmZmZ ddlmZmZm Z  ddl!m"Z" ejF                  dk\  rd dlm$Z$ nd dl%m$Z$ ee&eef   Z'de(d<   e)e&e*f   Z+de(d<   ee+e&f   Z,de(d<   e)e-e+f   Z.de(d<   e)e-e&f   Z/de(d<    ed«      Z0ejb                  fdddœ	 	 	 	 	 	 	 	 	 	 	 d.d„Z2 G d„ de«      Z3 G d„ de«      Z4 G d „ d!ee4«      Z5 G d"„ d#e5«      Z6 G d$„ d%ee5   e4«      Z7 G d&„ d'e e.   e4«      Z8 G d(„ d)e e-   e4«      Z9 G d*„ d+e e/   e4«      Z: G d,„ d-e e-   e4«      Z;y)/é    )ÚannotationsN)Úabstractmethod)ÚCallableÚ
CollectionÚMapping)ÚAsyncExitStack)ÚIOBase)ÚIPv4AddressÚIPv6Address)ÚAddressFamily)ÚAnyÚTypeVarÚUnioné   )Úget_async_backend)ÚTypedAttributeProviderÚTypedAttributeSetÚtyped_attributeé   )Ú
ByteStreamÚListenerÚUnreliableObjectStream)Ú	TaskGroup)é   é
   )Ú	TypeAliasr   ÚIPAddressTypeÚIPSockAddrTypeÚSockAddrTypeÚUDPPacketTypeÚUNIXDatagramPacketTypeÚT_RetvalF)Úrequire_connectedÚrequire_boundc               óf  — t        | t        «      r	 t        j                  | ¬«      }n?t        | t        j                  «      r| }n"t        dt        | «      j                  › d�«      ‚	 |r	 |j                  «        |r^	 |j                  t        j                  t        j                  fv r|j                  «       d   }n|j                  «       }|st        d«      ‚|t        j                  k7  r>|j                  |k7  r/t        d|j                   › d	|j                  j                   › �«      ‚|j                  |k7  r/t        d
|j                   › d	|j                  j                   › �«      ‚	 |j'                  d«       |S # t        $ rK}|j                  t        j
                  k(  rt        d«      |‚|rt        d«      |‚|rt        d«      |‚‚ d }~ww xY w# t        $ r}t        d«      |‚d }~ww xY w# t        $ r d }Y �Œ2w xY w# t"        $ r" t        | t        «      r|j%                  «        ‚ w xY w)N)Úfilenoz.the file descriptor does not refer to a socketzthe socket must be connectedz+the socket must be bound to a local addresszexpected an int or socket, got z insteadr   z"address family mismatch: expected z, got zsocket type mismatch: expected F)Ú
isinstanceÚintÚsocketÚOSErrorÚerrnoÚENOTSOCKÚ
ValueErrorÚ	TypeErrorÚtypeÚ__qualname__ÚgetpeernameÚfamilyÚAF_INETÚAF_INET6ÚgetsocknameÚ	AF_UNSPECÚnameÚBaseExceptionÚdetachÚsetblocking)Ú
sock_or_fdÚ	sock_typeÚaddr_familyr#   r$   ÚsockÚexcÚ
bound_addrs           úJ/var/www/timesheet/venv/lib/python3.12/site-packages/anyio/abc/_sockets.pyÚ_validate_socketrB   $   s"  € ô �*œcÔ"ð	Ü—=‘=¨
Ô3‰Dô 
�J¤§¡Ô	.Ø‰äØ-¬d°:Ó.>×.KÑ.KÐ-LÈHÐUó
ð 	
ð"ÙðJØ× Ñ Ô"ñ ð"Ø—;‘;¤6§>¡>´6·?±?Ð"CÑCØ!%×!1Ñ!1Ó!3°AÑ!6‘Jà!%×!1Ñ!1Ó!3�Jñ Ü Ð!NÓOÐOàœ&×*Ñ*Ò*¨t¯{©{¸kÒ/IÜØ4°[×5EÑ5EÐ4FÀfØ—;‘;×#Ñ#Ð$ð&óð ð
 �9‰9˜	Ò!ÜØ1°)·.±.Ð1AÀÈÏ	É	ÏÉÐGWÐXóð ð "ð 	×Ñ�UÔØ€Køôo ò 
	Ø�y‰yœEŸN™NÒ*Ü ØDóàðñ #Ü Ð!?Ó@ÀcÐIÙÜ Ð!NÓOÐUXÐXàûð
	ûô, ò JÜ Ð!?Ó@ÀcÐIûðJûô ò "Ø!“
ð"ûô  ò ä�j¤#Ô&Ø�K‰KŒMàðúsn   ’E? Á)H Á,G Á<H Á?AG3 ÃBH Å?	GÆAGÇGÇ	G0ÇG+Ç+G0Ç0H Ç3HÇ>H ÈHÈH È+H0c                  ó¢   — e Zd ZU dZ e«       Zded<    e«       Zded<    e«       Zded<    e«       Z	ded	<    e«       Z
ded
<    e«       Zded<   y)ÚSocketAttributeaý  
    .. attribute:: family
        :type: socket.AddressFamily

        the address family of the underlying socket

    .. attribute:: local_address
        :type: tuple[str, int] | str

        the local address the underlying socket is connected to

    .. attribute:: local_port
        :type: int

        for IP based sockets, the local port the underlying socket is bound to

    .. attribute:: raw_socket
        :type: socket.socket

        the underlying stdlib socket object

    .. attribute:: remote_address
        :type: tuple[str, int] | str

        the remote address the underlying socket is connected to

    .. attribute:: remote_port
        :type: int

        for IP based sockets, the remote port the underlying socket is connected to
    r   r2   r   Úlocal_addressr(   Ú
local_portúsocket.socketÚ
raw_socketÚremote_addressÚremote_portN)Ú__name__Ú
__module__r0   Ú__doc__r   r2   Ú__annotations__rE   rF   rH   rI   rJ   © ó    rA   rD   rD   i   sX   … ññ@ ,Ó-€FˆMÓ-Ù"1Ó"3€M�<Ó3Ù%Ó'€J�Ó'Ù /Ó 1€J�Ó1Ù#2Ó#4€N�LÓ4Ù&Ó(€K�Ô(rP   rD   c                  ó:   — e Zd Zedd„«       Zeedd„«       «       Zy)Ú_SocketProviderc                óø  ‡ ‡‡‡— ddl mŠ t        j                  ˆ fd„t        j                  ˆˆ fd„t        j
                  ˆ fd„i}	  ‰‰ j                  j                  «       «      Š‰�ˆfd„|t        j                  <   ‰ j                  j                  t        j                  t        j                  fv r3ˆ fd„|t        j                  <   ‰�‰d   Šˆfd	„|t        j                  <   |S # t        $ r d ŠY Œ�w xY w)
Nr   )Úconvert_ipv6_sockaddrc                 ó0   •— ‰ j                   j                  S ©N)Ú_raw_socketr2   ©Úselfs   €rA   ú<lambda>z2_SocketProvider.extra_attributes.<locals>.<lambda>˜   s   ø€ ¨D×,<Ñ,<×,CÑ,C€ rP   c                 óD   •—  ‰ ‰j                   j                  «       «      S rV   ©rW   r5   )ÚconvertrY   s   €€rA   rZ   z2_SocketProvider.extra_attributes.<locals>.<lambda>™   s   ø€ ±7Ø× Ñ ×,Ñ,Ó.ó4€ rP   c                 ó   •— ‰ j                   S rV   )rW   rX   s   €rA   rZ   z2_SocketProvider.extra_attributes.<locals>.<lambda>œ   s   ø€ °×0@Ñ0@€ rP   c                 ó   •— ‰ S rV   rO   )Úpeernames   €rA   rZ   z2_SocketProvider.extra_attributes.<locals>.<lambda>¥   s   ø€ À€ rP   c                 ó>   •— ‰ j                   j                  «       d   S )Nr   r\   rX   s   €rA   rZ   z2_SocketProvider.extra_attributes.<locals>.<lambda>ª   s   ø€ ˜×(Ñ(×4Ñ4Ó6°qÑ9€ rP   r   c                 ó   •— ‰ S rV   rO   )rJ   s   €rA   rZ   z2_SocketProvider.extra_attributes.<locals>.<lambda>®   s   ø€ À+€ rP   )Ú_core._socketsrT   rD   r2   rE   rH   rW   r1   r*   rI   r   r3   r4   rF   rJ   )rY   Ú
attributesr]   r`   rJ   s   ` @@@rA   Úextra_attributesz _SocketProvider.extra_attributes“   sä   û€ åEô ×"Ñ"Ó$CÜ×)Ñ)ô ,ô ×&Ñ&Ó(@ð4
ˆ
ð	Ù/6°t×7GÑ7G×7SÑ7SÓ7UÓ/VˆHð
 ÐÛ9IˆJ”×5Ñ5Ñ6ð ×Ñ×"Ñ"¤}×'<Ñ'<¼m×>TÑ>TÐ&UÑUã9ð ”×1Ñ1Ñ2ð Ð#Ø& q™k�Û:M�
œ?×6Ñ6Ñ7àÐøô! ò 	ØŠHð	ús   Á C+ Ã+C9Ã8C9c                 ó   — y rV   rO   rX   s    rA   rW   z_SocketProvider._raw_socket²   s   € ð 	rP   N)ÚreturnzMapping[Any, Callable[[], Any]])rg   rG   )rK   rL   r0   Úpropertyre   r   rW   rO   rP   rA   rR   rR   ’   s0   „ Øòó ðð< Øòó ó ñrP   rR   c                  ó"   — e Zd ZdZedd„«       Zy)ÚSocketStreamzu
    Transports bytes over a socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    c              ƒ  óˆ   K  — t        |t        j                  d¬«      }t        «       j	                  |«      ƒ d{  –—† S 7 Œ­w)aH  
        Wrap an existing socket object or file descriptor as a socket stream.

        The newly created socket wrapper takes ownership of the socket being passed in.
        The existing socket must already be connected.

        :param sock_or_fd: a socket object or file descriptor
        :return: a socket stream

        T©r#   N)rB   r)   ÚSOCK_STREAMr   Úwrap_stream_socket©Úclsr;   r>   s      rA   Úfrom_socketzSocketStream.from_socket¿   s7   è ø€ ô   
¬F×,>Ñ,>ÐRVÔWˆÜ&Ó(×;Ñ;¸DÓA×AÐAÐAúó   ‚9A»A ¼AN)r;   úsocket.socket | intrg   rj   ©rK   rL   r0   rM   Úclassmethodrq   rO   rP   rA   rj   rj   ¸   s   „ ñð òBó ñBrP   rj   c                  óB   — e Zd Zedd„«       Zedd„«       Zedd„«       Zy)ÚUNIXSocketStreamc              ƒ  ó¦   K  — t        |t        j                  t        j                  d¬«      }t	        «       j                  |«      ƒ d{  –—† S 7 Œ­w)aR  
        Wrap an existing socket object or file descriptor as a UNIX socket stream.

        The newly created socket wrapper takes ownership of the socket being passed in.
        The existing socket must already be connected.

        :param sock_or_fd: a socket object or file descriptor
        :return: a UNIX socket stream

        Trl   N)rB   r)   rm   ÚAF_UNIXr   Úwrap_unix_stream_socketro   s      rA   rq   zUNIXSocketStream.from_socketÐ   sA   è ø€ ô  Øœ×*Ñ*¬F¯N©NÈdô
ˆô 'Ó(×@Ñ@ÀÓF×FÐFÐFúó   ‚AAÁ
AÁAc              ƒ  ó   K  — y­w)zð
        Send file descriptors along with a message to the peer.

        :param message: a non-empty bytestring
        :param fds: a collection of files (either numeric file descriptors or open file
            or socket objects)
        NrO   )rY   ÚmessageÚfdss      rA   Úsend_fdszUNIXSocketStream.send_fdsá   ó   è ø� ùó   ‚c              ƒ  ó   K  — y­w)a  
        Receive file descriptors along with a message from the peer.

        :param msglen: length of the message to expect from the peer
        :param maxfds: maximum number of file descriptors to expect from the peer
        :return: a tuple of (message, file descriptors)
        NrO   )rY   ÚmsglenÚmaxfdss      rA   Úreceive_fdszUNIXSocketStream.receive_fdsë   r€   r�   N)r;   rs   rg   rw   )r}   Úbytesr~   zCollection[int | IOBase]rg   ÚNone)rƒ   r(   r„   r(   rg   ztuple[bytes, list[int]])rK   rL   r0   ru   rq   r   r   r…   rO   rP   rA   rw   rw   Ï   s>   „ ØòGó ðGð  òó ðð òó ñrP   rw   c                  óR   — e Zd ZdZe	 	 	 	 dd„«       Zedd„«       Z	 d	 	 	 	 	 d	d„Zy)
ÚSocketListenerz}
    Listens to incoming socket connections.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    c              ƒ  óˆ   K  — t        |t        j                  d¬«      }t        «       j	                  |«      ƒ d{  –—† S 7 Œ­w)a  
        Wrap an existing socket object or file descriptor as a socket listener.

        The newly created listener takes ownership of the socket being passed in.

        :param sock_or_fd: a socket object or file descriptor
        :return: a socket listener

        T©r$   N)rB   r)   rm   r   Úwrap_listener_socketro   s      rA   rq   zSocketListener.from_socketý   s6   è ø€ ô   
¬F×,>Ñ,>ÈdÔSˆÜ&Ó(×=Ñ=¸dÓC×CÐCÐCúrr   c              ƒ  ó   K  — y­w)zAccept an incoming connection.NrO   rX   s    rA   ÚacceptzSocketListener.accept  r€   r�   Nc              ƒ  ó
  K  — ddl m} t        «       4 ƒd {  –—† }|€|j                   |«       «      ƒ d {  –—† }	 | j	                  «       ƒ d {  –—† }|j                  ||«       Œ+7 ŒP7 Œ27 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)Nr   )Úcreate_task_group)Ú r�   r   Úenter_async_contextrŽ   Ú
start_soon)rY   ÚhandlerÚ
task_groupr�   ÚstackÚstreams         rA   ÚservezSocketListener.serve  s   è ø€ õ
 	)ä!Ó#÷ 	7ð 	7 uØÐ!Ø#(×#<Ñ#<Ñ=NÓ=PÓ#Q×Q�
àØ#Ÿ{™{›}×,�Ø×%Ñ% g¨vÔ6ð ð		7øàQøð -ø÷	7÷ 	7ñ 	7üsT   ‚B—A(˜B›A.·A*¸A.ÁA,ÁA.Á(BÁ*A.Á,A.Á.B Á4A7Á5B Á<B)r;   rs   rg   r‰   )rg   rj   rV   )r”   zCallable[[SocketStream], Any]r•   zTaskGroup | Nonerg   r‡   )	rK   rL   r0   rM   ru   rq   r   rŽ   r˜   rO   rP   rA   r‰   r‰   ö   sk   „ ñð ðDà'ðDð 
òDó ðDð  ò-ó ð-ð (,ð7à.ð7ð %ð7ð 
ô	7rP   r‰   c                  ó*   — e Zd ZdZedd„«       Zdd„Zy)Ú	UDPSocketz{
    Represents an unconnected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    c              ƒ  óˆ   K  — t        |t        j                  d¬«      }t        «       j	                  |«      ƒ d{  –—† S 7 Œ­w)aI  
        Wrap an existing socket object or file descriptor as a UDP socket.

        The newly created socket wrapper takes ownership of the socket being passed in.
        The existing socket must be bound to a local address.

        :param sock_or_fd: a socket object or file descriptor
        :return: a UDP socket

        Tr‹   N)rB   r)   Ú
SOCK_DGRAMr   Úwrap_udp_socketro   s      rA   rq   zUDPSocket.from_socket)  s6   è ø€ ô   
¬F×,=Ñ,=ÈTÔRˆÜ&Ó(×8Ñ8¸Ó>×>Ð>Ð>úrr   c              ƒ  óH   K  — | j                  |||ff«      ƒ d{  –—† S 7 Œ­w)z^
        Alias for :meth:`~.UnreliableObjectSendStream.send` ((data, (host, port))).

        N©Úsend)rY   ÚdataÚhostÚports       rA   ÚsendtozUDPSocket.sendto8  s&   è ø€ ð
 —Y‘Y  t¨T lÐ3Ó4×4Ð4Ð4ús   ‚"› œ"N)r;   rs   rg   rš   )r¡   r†   r¢   Ústrr£   r(   rg   r‡   ©rK   rL   r0   rM   ru   rq   r¤   rO   rP   rA   rš   rš   "  s    „ ñð ò?ó ð?ô5rP   rš   c                  ó"   — e Zd ZdZedd„«       Zy)ÚConnectedUDPSocketzy
    Represents an connected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    c              ƒ  óˆ   K  — t        |t        j                  d¬«      }t        «       j	                  |«      ƒ d{  –—† S 7 Œ­w)aV  
        Wrap an existing socket object or file descriptor as a connected UDP socket.

        The newly created socket wrapper takes ownership of the socket being passed in.
        The existing socket must already be connected.

        :param sock_or_fd: a socket object or file descriptor
        :return: a connected UDP socket

        Trl   N)rB   r)   rœ   r   Úwrap_connected_udp_socketro   s      rA   rq   zConnectedUDPSocket.from_socketG  s=   è ø€ ô  ØÜ×ÑØ"ô
ˆô
 'Ó(×BÑBÀ4ÓH×HÐHÐHúrr   N)r;   rs   rg   r¨   rt   rO   rP   rA   r¨   r¨   @  s   „ ñð òIó ñIrP   r¨   c                  ó2   — e Zd ZdZe	 	 	 	 dd„«       Zdd„Zy)ÚUNIXDatagramSocketz…
    Represents an unconnected Unix datagram socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    c              ƒ  ó¢   K  — t        |t        j                  t        j                  «      }t	        «       j                  |«      ƒ d{  –—† S 7 Œ­w)a'  
        Wrap an existing socket object or file descriptor as a UNIX datagram
        socket.

        The newly created socket wrapper takes ownership of the socket being passed in.

        :param sock_or_fd: a socket object or file descriptor
        :return: a UNIX datagram socket

        N)rB   r)   rœ   ry   r   Úwrap_unix_datagram_socketro   s      rA   rq   zUNIXDatagramSocket.from_socketd  s:   è ø€ ô   
¬F×,=Ñ,=¼v¿~¹~ÓNˆÜ&Ó(×BÑBÀ4ÓH×HÐHÐHús   ‚AAÁAÁ	Ac              ƒ  óD   K  — | j                  ||f«      ƒ d{  –—† S 7 Œ­w)zCAlias for :meth:`~.UnreliableObjectSendStream.send` ((data, path)).NrŸ   )rY   r¡   Úpaths      rA   r¤   zUNIXDatagramSocket.sendtov  s   è ø€ à—Y‘Y  d˜|Ó,×,Ð,Ð,ús   ‚ ™š N)r;   rs   rg   r¬   )r¡   r†   r°   r¥   rg   r‡   r¦   rO   rP   rA   r¬   r¬   [  s6   „ ñð ðIà'ðIð 
òIó ðIô"-rP   r¬   c                  ó*   — e Zd ZdZe	 	 	 	 dd„«       Zy)ÚConnectedUNIXDatagramSocketz‚
    Represents a connected Unix datagram socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    c              ƒ  ó¦   K  — t        |t        j                  t        j                  d¬«      }t	        «       j                  |«      ƒ d{  –—† S 7 Œ­w)ar  
        Wrap an existing socket object or file descriptor as a connected UNIX datagram
        socket.

        The newly created socket wrapper takes ownership of the socket being passed in.
        The existing socket must already be connected.

        :param sock_or_fd: a socket object or file descriptor
        :return: a connected UNIX datagram socket

        Trl   N)rB   r)   rœ   ry   r   Ú#wrap_connected_unix_datagram_socketro   s      rA   rq   z'ConnectedUNIXDatagramSocket.from_socket‚  sA   è ø€ ô   Øœ×)Ñ)¬6¯>©>ÈTô
ˆô 'Ó(×LÑLÈTÓR×RÐRÐRúr{   N)r;   rs   rg   r²   rt   rO   rP   rA   r²   r²   {  s1   „ ñð ðSà'ðSð 
%òSó ñSrP   r²   )r;   rs   r<   zsocket.SocketKindr=   zsocket.AddressFamilyr#   Úboolr$   rµ   rg   rG   )<Ú
__future__r   r+   r)   ÚsysÚabcr   Úcollections.abcr   r   r   Ú
contextlibr   Úior	   Ú	ipaddressr
   r   r   Útypingr   r   r   Ú_core._eventloopr   Ú_core._typedattrr   r   r   Ú_streamsr   r   r   Ú_tasksr   Úversion_infor   Útyping_extensionsr¥   r   rN   Útupler(   r   r   r†   r    r!   r"   r6   rB   rD   rR   rj   rw   r‰   rš   r¨   r¬   r²   rO   rP   rA   ú<module>rÅ      sÈ  ðÞ "ã Û Û 
Ý ß 9Ñ 9Ý %Ý ß .Ý  ß &Ñ &å 0÷ñ ÷
 CÑ BÝ à×Ñ�wÒÞ å+à   k°;Ð!>Ñ?€ˆyÓ ?Ø! # s (™O€�	Ó +Ø °Ð 3Ñ4€ˆiÓ 4Ø  ¨Ð!6Ñ7€ˆyÓ 7Ø$)¨%°¨*Ñ$5Ð ˜	Ó 5Ù�:Ó€ð )/×(8Ñ(8ðBð
 $ØñBØ#ðBà ðBð &ðBð
 ðBð ðBð óBôJ&)Ð'ô &)ôR#Ð,ô #ôLB�:˜ô Bô.$�|ô $ôN)7�X˜lÑ+¨_ô )7ôX5Ð& }Ñ5°ô 5ô<IÐ/°Ñ6¸ô Iô6-ØÐ1Ñ2°Oô-ô@SÐ"8¸Ñ"?Àõ SrP   