o
    7Di"                     @   s   d Z ddlmZmZmZmZmZmZ ddlZddl	m
Z
 ddlmZ dede
e fd	d
Zeddddddededede
e def
ddZedddddedededefddZdS )zIP Address.    )AddressValueErrorIPv4AddressIPv4NetworkIPv6AddressIPv6NetworkNetmaskValueErrorN)Optional   )	validatorvalue
is_privatec                    sD   |d u rdS t  fdddD std std r|S | S )NTc                 3   s    | ]}  |V  qd S )N)
startswith).0l_bitr    N/var/www/Datamplify/venv/lib/python3.10/site-packages/validators/ip_address.py	<genexpr>   s
    
z$_check_private_ip.<locals>.<genexpr>>   10.127.0.0.0.0169.254.192.168.z^172\.(?:1[6-9]|2\d|3[0-1])\.z&^(?:22[4-9]|23[0-9]|24[0-9]|25[0-5])\.)anyrematch)r   r   r   r   r   _check_private_ip   s   

r   TF)cidrstrictprivatehost_bitr   r   r   r    c            
   C   sp   | sdS z&|r!|r|  ddkrtdt| | dot| |W S t| o)t| |W S  tttfy7   Y dS w )a  Returns whether a given value is a valid IPv4 address.

    From Python version 3.9.5 leading zeros are no longer tolerated
    and are treated as an error. The initial version of ipv4 validator
    was inspired from [WTForms IPAddress validator][1].

    [1]: https://github.com/wtforms/wtforms/blob/master/src/wtforms/validators.py

    Examples:
        >>> ipv4('123.0.0.7')
        True
        >>> ipv4('1.1.1.1/8')
        True
        >>> ipv4('900.80.70.11')
        ValidationError(func=ipv4, args={'value': '900.80.70.11'})

    Args:
        value:
            IP address string to validate.
        cidr:
            IP address string may contain CIDR notation.
        strict:
            IP address string is strictly in CIDR notation.
        private:
            IP address is public if `False`, private/local/loopback/broadcast if `True`.
        host_bit:
            If `False` and host bits (along with network bits) _are_ set in the supplied
            address, this function raises a validation error. ref [IPv4Network][2].
            [2]: https://docs.python.org/3/library/ipaddress.html#ipaddress.IPv4Network

    Returns:
        (Literal[True]): If `value` is a valid IPv4 address.
        (ValidationError): If `value` is an invalid IPv4 address.
    F/r	   z*IPv4 address was expected in CIDR notationr   )count
ValueErrorr   r   r   r   r   )r   r   r   r   r    r   r   r   ipv4)   s   ,r%   )r   r   r    c            
   C   s\   | sdS z|r|r|  ddkrtdt| | dW S t| W S  tttfy-   Y dS w )aZ  Returns if a given value is a valid IPv6 address.

    Including IPv4-mapped IPv6 addresses. The initial version of ipv6 validator
    was inspired from [WTForms IPAddress validator][1].

    [1]: https://github.com/wtforms/wtforms/blob/master/src/wtforms/validators.py

    Examples:
        >>> ipv6('::ffff:192.0.2.128')
        True
        >>> ipv6('::1/128')
        True
        >>> ipv6('abc.0.0.1')
        ValidationError(func=ipv6, args={'value': 'abc.0.0.1'})

    Args:
        value:
            IP address string to validate.
        cidr:
            IP address string may contain CIDR annotation.
        strict:
            IP address string is strictly in CIDR notation.
        host_bit:
            If `False` and host bits (along with network bits) _are_ set in the supplied
            address, this function raises a validation error. ref [IPv6Network][2].
            [2]: https://docs.python.org/3/library/ipaddress.html#ipaddress.IPv6Network

    Returns:
        (Literal[True]): If `value` is a valid IPv6 address.
        (ValidationError): If `value` is an invalid IPv6 address.
    Fr!   r	   z*IPv6 address was expected in CIDR notationr"   )r#   r$   r   r   r   r   )r   r   r   r    r   r   r   ipv6a   s   !
r&   )__doc__	ipaddressr   r   r   r   r   r   r   typingr   utilsr
   strboolr   r%   r&   r   r   r   r   <module>   s0     7*