From b76e57b6000cc42795544731400d3529e78536d6 Mon Sep 17 00:00:00 2001 From: Brian Wellington Date: Tue, 21 Apr 2020 13:04:43 -0700 Subject: [PATCH] Add dns.rdata.Rdata.to_generic() --- dns/rdata.py | 10 ++++++++++ tests/test_rdata.py | 13 +++++++++++++ 2 files changed, 23 insertions(+) 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() -- 2.47.3