
    Ng              
          d 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	m
Z
 deeeeeeef         eeeef         eeef         f                  deee
                  fdZ	 dd	ee
         d
ee         ddfdZdeeeef         eeeeef         f         deeej        ef         eej        eeef         f         fdZd	ee
         deeeef         eeeeef         f         ddfdZdS )z'Utility functions for aiohappyeyeballs.    N)DictListOptionalTupleUnion   )AddrInfoTypeaddrreturnc                    | dS | d         }| d         }d|v }|rBd}d}t          |           }|dk    r| d         }|dk    r| d         }||||f} t          j        }n||f} t          j        }|t          j        t          j        d| fgS )	z7Convert an address tuple to a list of addr_info tuples.Nr   r   :          )lensocketAF_INET6AF_INETSOCK_STREAMIPPROTO_TCP)r
   hostportis_ipv6flowinfoscopeidaddr_lenfamilys           R/var/www/html/ai-engine/env/lib/python3.11/site-packages/aiohappyeyeballs/utils.pyaddr_to_addr_infosr    
   s     |t7D7DTkG  t99q==1gGq==AwHdHg.d|V');RFGG    
addr_infos
interleavec                     i }|d}g }| D ]D}|d         }||vrd||<   ||         |k     r|                     |           ||xx         dz  cc<   E|D ]}|                     |           dS )z
    Pop addr_info from the list of addr_infos by family up to interleave times.

    The interleave parameter is used to know how many addr_infos for
    each family should be popped of the top of the list.
    Nr   r   )appendremove)r"   r#   seen	to_remove	addr_infor   s         r   pop_addr_infos_interleaver*   %   s     D
$&I  	1DL<*$$Y'''V % %	)$$$$% %r!   c                 N    t          j        | d                   g| dd         R S )z+Convert an address tuple to an IPv4Address.r   r   N)	ipaddress
ip_address)r
   s    r   _addr_tuple_to_ip_addressr.   =   s,      a))5DH555r!   c                 t   g }| D ]#}|d         |k    r|                     |           $|r|D ]}|                     |           dS t          |          }| D ]0}|t          |d                   k    r|                     |           1|r|D ]}|                     |           dS t          d| d          )z
    Remove an address from the list of addr_infos.

    The addr value is typically the return value of
    sock.getpeername().
    NzAddress z not found in addr_infos)r%   r&   r.   
ValueError)r"   r
   bad_addrs_infosr)   bad_addr_info
match_addrs         r   remove_addr_infosr5   F   s    +-O . .	R=D  ""9--- , 	- 	-Mm,,,,*400J . .	29R=AAAA""9--- , 	- 	-Mm,,,,
>>>>
?
??r!   )N)__doc__r,   r   typingr   r   r   r   r   typesr	   strintr    r*   IPv4AddressIPv6Addressr.   r5    r!   r   <module>r>      s   - -      5 5 5 5 5 5 5 5 5 5 5 5 5 5      H
eCc3&'sC})=uS#XNOH d< !	H H H H8 AE% %\"%08%	% % % %06
c3hsCc'9!::
;6
	)

$%uY-BCc-Q'RR6 6 6 6@\"@
c3hsCc'9!::
;@ 
@ @ @ @ @ @r!   