a
    &hr                     @   s   d Z 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
 ejefZeddd	Zdeeeedf ee ee d
ddZeeed
ddZdeee edddZeeef edddZee ee dddZdS )zThe Utils methods.    N)Iterable)OptionalUnion)AnyKey)Keys)returnc                  C   s<   t  t jt j} | d | d |  d }|   |S )z%Determines a free port using sockets.)z	127.0.0.1r         )socketAF_INETSOCK_STREAMbindlistengetsocknameclose)Zfree_socketport r   d/var/www/html/swiplay.fr/scambot/venv/lib/python3.9/site-packages/selenium/webdriver/common/utils.py	free_port   s    

r   )hostr   r   c                 C   s   zt | d}W n t jy&   Y dS 0 d}|D ]d\}}}}}d}|rXt|t|d }|rv|t jkrvt|d   S |r0|s0|t jkr0t|d }q0|S )a  Resolve a hostname to an IP, preferring IPv4 addresses.

    We prefer IPv4 so that we don't change behavior from previous IPv4-only
    implementations, and because some drivers (e.g., FirefoxDriver) do not
    support IPv6 connections.

    If the optional port number is provided, only IPs that listen on the given
    port are considered.

    :Args:
        - host - A hostname.
        - port - Optional port number.

    :Returns:
        A single IP address, as a string. If any IPv4 address is found, one is
        returned. Otherwise, if any IPv6 address is found, one is returned. If
        neither, then None is returned.
    NTr   )r
   getaddrinfogaierroris_connectablestrr   AF_INET6)r   r   	addrinfosipfamily_sockaddrZconnectabler   r   r   find_connectable_ip'   s    r    c                 C   s0   d| v r"|  ds"d|  d| S |  d| S )zJoins a hostname and port together.

    This is a minimal implementation intended to cope with IPv6 literals. For
    example, _join_host_port('::1', 80) == '[::1]:80'.

    :Args:
        - host - A hostname.
        - port - An integer port.
    :[z]:)
startswith)r   r   r   r   r   join_host_portL   s    
r$   	localhost)r   r   r   c                 C   s   d}zdzt || fd}d}W n ty4   d}Y n0 W |rz|t j W n ty^   Y n0 |  n2|rz|t j W n ty   Y n0 |  0 |S )zsTries to connect to the server at port to see if it is running.

    :Args:
     - port - The port to connect.
    Nr	   TF)r
   create_connection_is_connectable_exceptionsshutdown	SHUT_RDWR	Exceptionr   )r   r   Zsocket_resultr   r   r   r   [   s&    

r   )r   r   c                 C   sF   ddl m} z |d|  d}| dkW S  ty@   Y dS 0 dS )zTries to connect to the HTTP server at /status path and specified port
    to see if it responds successfully.

    :Args:
     - port - The port to connect.
    r   )requestzhttp://127.0.0.1:z/status   FN)urllibr,   urlopengetcoder*   )r   Zurl_requestresr   r   r   is_url_connectableq   s    r2   )valuer   c                 C   sT   g }| D ]F}t |tr&|t| qt |ttfrD|t| q|| q|S )z7Processes the values that will be typed in the element.)
isinstancer   appendr   intfloatextend)r3   
charactersvalr   r   r   keys_to_typing   s    
r;   )N)r%   )__doc__r
   collections.abcr   typingr   r   selenium.typesr   Zselenium.webdriver.common.keysr   errorConnectionResetErrorr'   r6   r   r   bytes	bytearrayr    r$   boolr   r2   listr;   r   r   r   r   <module>   s   

(%