a
    [g                     @   s  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
 eeeeeeef eeeef eeef f  eee
  dddZdee
 ee dd	d
dZeeeef eeeeef f eeejef eejeeef f dddZee
 eeeef eeeeef f ddddZdS )z'Utility functions for aiohappyeyeballs.    N)DictListOptionalTupleUnion   )AddrInfoType)addrreturnc                 C   s   | du rdS | d }| d }d|v }|rld}d}t | }|dkrH| d }|dkrX| 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scopeidZaddr_lenfamily r   d/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/aiohappyeyeballs/utils.pyaddr_to_addr_infos
   s$    r   )
addr_infos
interleaver
   c                 C   st   i }|du rd}g }| D ]B}|d }||vr4d||< || |k rJ| | ||  d7  < q|D ]}| | q`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   r   r   r   pop_addr_infos_interleave%   s    	
r&   c                 C   s   t | d g| dd R S )z+Convert an address tuple to an IPv4Address.r   r   N)	ipaddress
ip_address)r	   r   r   r   _addr_tuple_to_ip_address=   s    r)   )r   r	   r
   c                 C   s   g }| D ]}|d |kr| | q|r@|D ]}| | q,dS t|}| D ]}|t|d krL| | qL|r|D ]}| | qtdS td| ddS )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	   Zbad_addrs_infosr%   Zbad_addr_infoZ
match_addrr   r   r   remove_addr_infosF   s"    
r,   )N)__doc__r'   r   typingr   r   r   r   r   typesr   strintr   r&   IPv4AddressIPv6Addressr)   r,   r   r   r   r   <module>   s.   *
 
