From: Brian Wellington Date: Tue, 21 Apr 2020 20:04:43 +0000 (-0700) Subject: Add dns.rdata.Rdata.to_generic() X-Git-Tag: v2.0.0rc1~298^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b76e57b6000cc42795544731400d3529e78536d6;p=thirdparty%2Fdnspython.git Add dns.rdata.Rdata.to_generic() --- diff --git a/dns/rdata.py b/dns/rdata.py index ed565352..f9421a87 100644 --- a/dns/rdata.py +++ b/dns/rdata.py @@ -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. diff --git a/tests/test_rdata.py b/tests/test_rdata.py index aed88041..63a30baa 100644 --- a/tests/test_rdata.py +++ b/tests/test_rdata.py @@ -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()