From 7c0e605392040d7413621584f1d544b24a6a83df Mon Sep 17 00:00:00 2001 From: inspxctelement Date: Wed, 8 May 2024 21:25:52 -0400 Subject: [PATCH 1/4] fix(ip_address): properly handle private is false --- src/validators/ip_address.py | 7 +++-- tests/test_ip_address.py | 56 ++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/src/validators/ip_address.py b/src/validators/ip_address.py index 66ca2e99..1de5e798 100644 --- a/src/validators/ip_address.py +++ b/src/validators/ip_address.py @@ -19,7 +19,7 @@ def _check_private_ip(value: str, is_private: Optional[bool]): if is_private is None: return True - if is_private and ( + if ( any( value.startswith(l_bit) for l_bit in { @@ -33,8 +33,9 @@ def _check_private_ip(value: str, is_private: Optional[bool]): or re.match(r"^172\.(?:1[6-9]|2\d|3[0-1])\.", value) # private or re.match(r"^(?:22[4-9]|23[0-9]|24[0-9]|25[0-5])\.", value) # broadcast ): - return True - return False + return bool(is_private) + else: + return not bool(is_private) @validator diff --git a/tests/test_ip_address.py b/tests/test_ip_address.py index f28cdec0..dcbb07ff 100644 --- a/tests/test_ip_address.py +++ b/tests/test_ip_address.py @@ -148,3 +148,59 @@ def test_returns_failed_validation_on_invalid_ipv6_cidr_address( ): """Test returns failed validation on invalid ipv6 CIDR address.""" assert isinstance(ipv6(address, cidr=cidr, strict=strict, host_bit=host_bit), ValidationError) + + +@pytest.mark.parametrize( + ("address", "private"), + [ + ("10.1.1.1", False), + ("192.168.1.1", False), + ("169.254.1.1", False), + ("127.0.0.1", False), + ("0.0.0.0", False), + ], +) +def test_returns_failed_validation_on_private_ipv4_address(address: str, private: bool): + """Test returns failed validation on invalid ipv4 CIDR address.""" + assert isinstance(ipv4(address, private=private), ValidationError) + + +@pytest.mark.parametrize( + ("address", "private"), + [ + ("10.1.1.1", True), + ("192.168.1.1", True), + ("169.254.1.1", True), + ("127.0.0.1", True), + ("0.0.0.0", True), + ], +) +def test_returns_valid_on_private_ipv4_address(address: str, private: bool): + """Test returns failed validation on invalid ipv4 CIDR address.""" + assert ipv4(address, private=private) + + +@pytest.mark.parametrize( + ("address", "private"), + [ + ("1.1.1.1", True), + ("192.169.1.1", True), + ("7.53.12.1", True), + ], +) +def test_returns_failed_validation_on_not_private_ipv4_address(address: str, private: bool): + """Test returns failed validation on invalid ipv4 CIDR address.""" + assert isinstance(ipv4(address, private=private), ValidationError) + + +@pytest.mark.parametrize( + ("address", "private"), + [ + ("1.1.1.1", False), + ("192.169.1.1", False), + ("7.53.12.1", False), + ], +) +def test_returns_valid_on_private_ipv4_address(address: str, private: bool): + """Test returns failed validation on invalid ipv4 CIDR address.""" + assert ipv4(address, private=private) From 76140125d9ba9eb9e165a666d15272501a075629 Mon Sep 17 00:00:00 2001 From: inspxctelement Date: Wed, 8 May 2024 21:31:52 -0400 Subject: [PATCH 2/4] chore: tox --- tests/test_ip_address.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_ip_address.py b/tests/test_ip_address.py index dcbb07ff..1c730d60 100644 --- a/tests/test_ip_address.py +++ b/tests/test_ip_address.py @@ -201,6 +201,6 @@ def test_returns_failed_validation_on_not_private_ipv4_address(address: str, pri ("7.53.12.1", False), ], ) -def test_returns_valid_on_private_ipv4_address(address: str, private: bool): +def test_returns_valid_on_private_public_ipv4_address(address: str, private: bool): """Test returns failed validation on invalid ipv4 CIDR address.""" assert ipv4(address, private=private) From 83bd6488f1ff972687b55c3ac121588da77fa02a Mon Sep 17 00:00:00 2001 From: inspxctelement Date: Mon, 13 May 2024 20:22:46 -0400 Subject: [PATCH 3/4] chore: pytest and rm bool --- src/validators/ip_address.py | 4 ++-- tests/test_ip_address.py | 40 ++++++++++++++++++------------------ 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/validators/ip_address.py b/src/validators/ip_address.py index 1de5e798..5e712649 100644 --- a/src/validators/ip_address.py +++ b/src/validators/ip_address.py @@ -33,9 +33,9 @@ def _check_private_ip(value: str, is_private: Optional[bool]): or re.match(r"^172\.(?:1[6-9]|2\d|3[0-1])\.", value) # private or re.match(r"^(?:22[4-9]|23[0-9]|24[0-9]|25[0-5])\.", value) # broadcast ): - return bool(is_private) + return is_private else: - return not bool(is_private) + return not is_private @validator diff --git a/tests/test_ip_address.py b/tests/test_ip_address.py index 1c730d60..e39d95c7 100644 --- a/tests/test_ip_address.py +++ b/tests/test_ip_address.py @@ -150,21 +150,6 @@ def test_returns_failed_validation_on_invalid_ipv6_cidr_address( assert isinstance(ipv6(address, cidr=cidr, strict=strict, host_bit=host_bit), ValidationError) -@pytest.mark.parametrize( - ("address", "private"), - [ - ("10.1.1.1", False), - ("192.168.1.1", False), - ("169.254.1.1", False), - ("127.0.0.1", False), - ("0.0.0.0", False), - ], -) -def test_returns_failed_validation_on_private_ipv4_address(address: str, private: bool): - """Test returns failed validation on invalid ipv4 CIDR address.""" - assert isinstance(ipv4(address, private=private), ValidationError) - - @pytest.mark.parametrize( ("address", "private"), [ @@ -176,7 +161,7 @@ def test_returns_failed_validation_on_private_ipv4_address(address: str, private ], ) def test_returns_valid_on_private_ipv4_address(address: str, private: bool): - """Test returns failed validation on invalid ipv4 CIDR address.""" + """Test returns true on private ipv4 address.""" assert ipv4(address, private=private) @@ -188,8 +173,8 @@ def test_returns_valid_on_private_ipv4_address(address: str, private: bool): ("7.53.12.1", True), ], ) -def test_returns_failed_validation_on_not_private_ipv4_address(address: str, private: bool): - """Test returns failed validation on invalid ipv4 CIDR address.""" +def test_returns_failed_validation_on_invalid_private_ipv4_address(address: str, private: bool): + """Test returns failed validation on invalid private ipv4 address.""" assert isinstance(ipv4(address, private=private), ValidationError) @@ -201,6 +186,21 @@ def test_returns_failed_validation_on_not_private_ipv4_address(address: str, pri ("7.53.12.1", False), ], ) -def test_returns_valid_on_private_public_ipv4_address(address: str, private: bool): - """Test returns failed validation on invalid ipv4 CIDR address.""" +def test_returns_valid_on_public_ipv4_address(address: str, private: bool): + """Test returns true on valid public ipv4 address.""" assert ipv4(address, private=private) + + +@pytest.mark.parametrize( + ("address", "private"), + [ + ("10.1.1.1", False), + ("192.168.1.1", False), + ("169.254.1.1", False), + ("127.0.0.1", False), + ("0.0.0.0", False), + ], +) +def test_returns_failed_validation_on_private_ipv4_address(address: str, private: bool): + """Test returns failed validation on private ipv4 address.""" + assert isinstance(ipv4(address, private=private), ValidationError) From 0623b4a6f39347091bdc85c3baaed0b299cb66bc Mon Sep 17 00:00:00 2001 From: inspxctelement Date: Thu, 16 May 2024 21:12:05 -0400 Subject: [PATCH 4/4] chore: address comments --- src/validators/ip_address.py | 4 ++-- tests/test_ip_address.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/validators/ip_address.py b/src/validators/ip_address.py index 5e712649..1bb5d134 100644 --- a/src/validators/ip_address.py +++ b/src/validators/ip_address.py @@ -34,8 +34,8 @@ def _check_private_ip(value: str, is_private: Optional[bool]): or re.match(r"^(?:22[4-9]|23[0-9]|24[0-9]|25[0-5])\.", value) # broadcast ): return is_private - else: - return not is_private + + return not is_private @validator diff --git a/tests/test_ip_address.py b/tests/test_ip_address.py index e39d95c7..ed6fd7d4 100644 --- a/tests/test_ip_address.py +++ b/tests/test_ip_address.py @@ -160,7 +160,7 @@ def test_returns_failed_validation_on_invalid_ipv6_cidr_address( ("0.0.0.0", True), ], ) -def test_returns_valid_on_private_ipv4_address(address: str, private: bool): +def test_returns_true_on_valid_private_ipv4_address(address: str, private: bool): """Test returns true on private ipv4 address.""" assert ipv4(address, private=private) @@ -186,7 +186,7 @@ def test_returns_failed_validation_on_invalid_private_ipv4_address(address: str, ("7.53.12.1", False), ], ) -def test_returns_valid_on_public_ipv4_address(address: str, private: bool): +def test_returns_true_on_valid_public_ipv4_address(address: str, private: bool): """Test returns true on valid public ipv4 address.""" assert ipv4(address, private=private) @@ -201,6 +201,6 @@ def test_returns_valid_on_public_ipv4_address(address: str, private: bool): ("0.0.0.0", False), ], ) -def test_returns_failed_validation_on_private_ipv4_address(address: str, private: bool): +def test_returns_failed_validation_on_invalid_public_ipv4_address(address: str, private: bool): """Test returns failed validation on private ipv4 address.""" assert isinstance(ipv4(address, private=private), ValidationError)