[Python-checkins] cpython: Issue #20480: Add ipaddress.reverse_pointer. Patch by Leon Weber.

eric.smith python-checkins at python.org
Mon Apr 14 18:58:31 CEST 2014


http://hg.python.org/cpython/rev/5992d2c9522c
changeset: 90270:5992d2c9522c
parent: 90268:ab7f57e92629
user: Eric V. Smith <eric at trueblade.com>
date: Mon Apr 14 12:58:07 2014 -0400
summary:
 Issue #20480: Add ipaddress.reverse_pointer. Patch by Leon Weber.
files:
 Doc/library/ipaddress.rst | 15 +++++++++++++
 Lib/ipaddress.py | 29 ++++++++++++++++++++++++++
 Lib/test/test_ipaddress.py | 8 +++++++
 Misc/ACKS | 1 +
 Misc/NEWS | 2 +
 5 files changed, 55 insertions(+), 0 deletions(-)
diff --git a/Doc/library/ipaddress.rst b/Doc/library/ipaddress.rst
--- a/Doc/library/ipaddress.rst
+++ b/Doc/library/ipaddress.rst
@@ -146,6 +146,20 @@
 the appropriate length (most significant octet first). This is 4 bytes
 for IPv4 and 16 bytes for IPv6.
 
+ .. attribute:: reverse_pointer
+
+ The name of the reverse DNS PTR record for the IP address, e.g.::
+
+ >>> ipaddress.ip_address("127.0.0.1").reverse_pointer
+ '1.0.0.127.in-addr.arpa'
+ >>> ipaddress.ip_address("2001:db8::1").reverse_pointer
+ '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa'
+
+ This is the name that could be used for performing a PTR lookup, not the
+ resolved hostname itself.
+
+ .. versionadded:: 3.5
+
 .. attribute:: is_multicast
 
 ``True`` if the address is reserved for multicast use. See
@@ -226,6 +240,7 @@
 :class:`IPv4Address` class:
 
 .. attribute:: packed
+ .. attribute:: reverse_pointer
 .. attribute:: version
 .. attribute:: max_prefixlen
 .. attribute:: is_multicast
diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py
--- a/Lib/ipaddress.py
+++ b/Lib/ipaddress.py
@@ -436,6 +436,17 @@
 return str(self)
 
 @property
+ def reverse_pointer(self):
+ """The name of the reverse DNS pointer for the IP address, e.g.:
+ >>> ipaddress.ip_address("127.0.0.1").reverse_pointer
+ '1.0.0.127.in-addr.arpa'
+ >>> ipaddress.ip_address("2001:db8::1").reverse_pointer
+ '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa'
+
+ """
+ return self._reverse_pointer()
+
+ @property
 def version(self):
 msg = '%200s has no version specified' % (type(self),)
 raise NotImplementedError(msg)
@@ -1221,6 +1232,15 @@
 return True
 return False
 
+ def _reverse_pointer(self):
+ """Return the reverse DNS pointer name for the IPv4 address.
+
+ This implements the method described in RFC1035 3.5.
+
+ """
+ reverse_octets = str(self).split('.')[::-1]
+ return '.'.join(reverse_octets) + '.in-addr.arpa'
+
 @property
 def max_prefixlen(self):
 return self._max_prefixlen
@@ -1784,6 +1804,15 @@
 return '%s/%d' % (':'.join(parts), self._prefixlen)
 return ':'.join(parts)
 
+ def _reverse_pointer(self):
+ """Return the reverse DNS pointer name for the IPv6 address.
+
+ This implements the method described in RFC3596 2.5.
+
+ """
+ reverse_chars = self.exploded[::-1].replace(':', '')
+ return '.'.join(reverse_chars) + '.ip6.arpa'
+
 @property
 def max_prefixlen(self):
 return self._max_prefixlen
diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py
--- a/Lib/test/test_ipaddress.py
+++ b/Lib/test/test_ipaddress.py
@@ -1593,6 +1593,14 @@
 addr3.exploded)
 self.assertEqual('192.168.178.1', addr4.exploded)
 
+ def testReversePointer(self):
+ addr1 = ipaddress.IPv4Address('127.0.0.1')
+ addr2 = ipaddress.IPv6Address('2001:db8::1')
+ self.assertEqual('1.0.0.127.in-addr.arpa', addr1.reverse_pointer)
+ self.assertEqual('1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.' +
+ 'b.d.0.1.0.0.2.ip6.arpa',
+ addr2.reverse_pointer)
+
 def testIntRepresentation(self):
 self.assertEqual(16909060, int(self.ipv4_address))
 self.assertEqual(42540616829182469433547762482097946625,
diff --git a/Misc/ACKS b/Misc/ACKS
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1392,6 +1392,7 @@
 David Watson
 Aaron Watters
 Henrik Weber
+Leon Weber
 Corran Webster
 Glyn Webster
 Phil Webster
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -37,6 +37,8 @@
 - Issue #12546: Allow \x00 to be used as a fill character when using str, int,
 float, and complex __format__ methods.
 
+- Issue #20480: Add ipaddress.reverse_pointer. Patch by Leon Weber.
+
 Library
 -------
 
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /