bpo-46415: Use f-string for ValueError in ipaddress.ip_{address,network,interface} helper functions (#30642)

`IPv*Network` and `IPv*Interface` constructors accept a 2-tuple of
(address description, netmask) as the address parameter.
When the tuple-based address is used errors are not propagated
correctly through the `ipaddress.ip_*` helper because of the %-formatting now expecting several arguments:

	In [7]: ipaddress.ip_network(("192.168.100.0", "fooo"))
        ...
	TypeError: not all arguments converted during string formatting

Compared to:

	In [8]: ipaddress.IPv4Network(("192.168.100.0", "foo"))
        ...
	NetmaskValueError: 'foo' is not a valid netmask

Use an f-string to make sure the error is always properly formatted.

Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
This commit is contained in:
Thomas Cellerier 2022-05-03 14:12:58 +02:00 committed by GitHub
parent ec8d3adb99
commit 52dc9c3066
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 9 deletions

View file

@ -1132,6 +1132,14 @@ class IpaddrUnitTest(unittest.TestCase):
self.assertEqual(ipaddress.IPv4Interface((3221225985, 24)),
ipaddress.IPv4Interface('192.0.2.1/24'))
# Invalid netmask
with self.assertRaises(ValueError):
ipaddress.IPv4Network(('192.0.2.1', '255.255.255.255.0'))
# Invalid netmask using factory
with self.assertRaises(ValueError):
ipaddress.ip_network(('192.0.2.1', '255.255.255.255.0'))
# issue #16531: constructing IPv6Network from an (address, mask) tuple
def testIPv6Tuple(self):
# /128
@ -1191,6 +1199,14 @@ class IpaddrUnitTest(unittest.TestCase):
ipaddress.IPv6Network((ip_scoped, 96))
# strict=False and host bits set
# Invalid netmask
with self.assertRaises(ValueError):
ipaddress.IPv6Network(('2001:db8::1', '255.255.255.0'))
# Invalid netmask using factory
with self.assertRaises(ValueError):
ipaddress.ip_network(('2001:db8::1', '255.255.255.0'))
# issue57
def testAddressIntMath(self):
self.assertEqual(ipaddress.IPv4Address('1.1.1.1') + 255,