maths.is_ipv6_address_valid =========================== .. py:module:: maths.is_ipv6_address_valid .. autoapi-nested-parse:: Validate IPv6 addresses (full and compressed forms). References: - Wikipedia: https://en.wikipedia.org/wiki/IPv6_address - RFC 4291: https://tools.ietf.org/html/rfc4291 Rules implemented (subset of RFC 4291): - Hex groups are 1-4 hex digits (0-9, a-f, A-F). - Exactly 8 groups in total. A single '::' may compress one or more groups of zeros. No more than one '::' is allowed. - No leading/trailing single ':' (e.g., ':1:2::' is invalid). - Does NOT support IPv4-mapped endings like '::ffff:192.0.2.128'. Examples (doctests): >>> is_ipv6_address_valid("2001:0db8:85a3:0000:0000:8a2e:0370:7334") True >>> is_ipv6_address_valid("2001:db8:85a3:0:0:8A2E:0370:7334") True >>> is_ipv6_address_valid("2001:db8:85a3::8A2E:0370:7334") # '::' compresses two groups True >>> is_ipv6_address_valid("::1") # loopback, 7 groups compressed True >>> is_ipv6_address_valid("2001:db8::") # trailing compression is OK True >>> is_ipv6_address_valid("::") # all groups compressed True Invalids: >>> is_ipv6_address_valid("") # empty False >>> is_ipv6_address_valid("2001:db8:85a3:::8a2e:370:7334") # multiple '::' False >>> is_ipv6_address_valid("2001:db8:85a3:0:0:8a2e:370:7334:abcd") # 9 groups False >>> is_ipv6_address_valid("2001:db8:85a3:0:0:8a2e:0370:g334") # non-hex char False >>> is_ipv6_address_valid("2001:db8:85a3:0:0:8a2e:0370:") # trailing ':' False >>> is_ipv6_address_valid(":2001:db8::1") # leading ':' False >>> is_ipv6_address_valid("a::b:c:d:e:f:g:h") # '::' compresses zero groups (already 8) False >>> is_ipv6_address_valid("1::1:1:1:1:1:1:1") # same idea; zero groups compressed False Attributes ---------- .. autoapisummary:: maths.is_ipv6_address_valid._HEX_DIGITS maths.is_ipv6_address_valid.ip Functions --------- .. autoapisummary:: maths.is_ipv6_address_valid._is_valid_group maths.is_ipv6_address_valid.is_ipv6_address_valid Module Contents --------------- .. py:function:: _is_valid_group(group: str) -> bool Return True iff group is 1-4 hex digits. Args: group (str): The hex group to validate. Returns: bool: True if the group is 1-4 hex digits, False otherwise. Examples: >>> _is_valid_group("1") True >>> _is_valid_group("abcd") True >>> _is_valid_group("12345") # too long False >>> _is_valid_group("g") # non-hex character False .. py:function:: is_ipv6_address_valid(address: str) -> bool Return True iff `address` is a valid IPv6 address in full or compressed form. See module docstring for rules and doctests. .. py:data:: _HEX_DIGITS .. py:data:: ip