]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
Add dns.rdata.Rdata.to_generic() 453/head
authorBrian Wellington <bwelling@xbill.org>
Tue, 21 Apr 2020 20:04:43 +0000 (13:04 -0700)
committerBrian Wellington <bwelling@xbill.org>
Tue, 21 Apr 2020 20:04:43 +0000 (13:04 -0700)
dns/rdata.py
tests/test_rdata.py

index ed56535232bf4e463cfa77a833e7615ed7a54f1c..f9421a87efd8e043587e0e1753af13de47a33cd3 100644 (file)
@@ -21,6 +21,7 @@ from importlib import import_module
 from io import BytesIO
 import base64
 import binascii
+import io
 import inspect
 
 import dns.exception
@@ -166,6 +167,15 @@ class Rdata(object):
 
         raise NotImplementedError
 
+    def to_generic(self, origin=None):
+        """Creates a dns.rdata.GenericRdata equivalent of this rdata.
+
+        Returns a ``dns.rdata.GenericRdata``.
+        """
+        f = io.BytesIO()
+        self.to_wire(f, origin=origin)
+        return dns.rdata.GenericRdata(self.rdclass, self.rdtype, f.getvalue())
+
     def to_digestable(self, origin=None):
         """Convert rdata to a format suitable for digesting in hashes.  This
         is also the DNSSEC canonical form.
index aed88041f3f70dc35d4aa8ee1f0c29a3c4a1c915..63a30baa934554246ff8efd357a758ba38a85d23 100644 (file)
@@ -64,5 +64,18 @@ class RdataTestCase(unittest.TestCase):
             with self.assertRaises(AttributeError):
                 mx.replace(invalid_parameter=1)
 
+    def test_to_generic(self):
+        a = dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, "1.2.3.4")
+        self.assertEqual(str(a.to_generic()), r'\# 4 01020304')
+
+        mx = dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.MX, "10 foo.")
+        self.assertEqual(str(mx.to_generic()), r'\# 7 000a03666f6f00')
+
+        origin = dns.name.from_text('example')
+        ns = dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS,
+                                 "foo.example.", relativize_to=origin)
+        self.assertEqual(str(ns.to_generic(origin=origin)),
+                         r'\# 13 03666f6f076578616d706c6500')
+
 if __name__ == '__main__':
     unittest.main()