diff options
Diffstat (limited to 'dns/node.py')
-rw-r--r-- | dns/node.py | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/dns/node.py b/dns/node.py index b7e21b5..8e1451f 100644 --- a/dns/node.py +++ b/dns/node.py @@ -183,3 +183,33 @@ class Node: self.delete_rdataset(replacement.rdclass, replacement.rdtype, replacement.covers) self.rdatasets.append(replacement) + + +@dns.immutable.immutable +class ImmutableNode(Node): + + """An ImmutableNode is an immutable set of rdatasets.""" + + def __init__(self, node): + super().__init__() + self.rdatasets = tuple( + [dns.rdataset.ImmutableRdataset(rds) for rds in node.rdatasets] + ) + + def find_rdataset(self, rdclass, rdtype, covers=dns.rdatatype.NONE, + create=False): + if create: + raise TypeError("immutable") + return super().find_rdataset(rdclass, rdtype, covers, False) + + def get_rdataset(self, rdclass, rdtype, covers=dns.rdatatype.NONE, + create=False): + if create: + raise TypeError("immutable") + return super().get_rdataset(rdclass, rdtype, covers, False) + + def delete_rdataset(self, rdclass, rdtype, covers=dns.rdatatype.NONE): + raise TypeError("immutable") + + def replace_rdataset(self, replacement): + raise TypeError("immutable") |