summaryrefslogtreecommitdiff
path: root/dns/node.py
diff options
context:
space:
mode:
authorBob Halley <halley@dnspython.org>2020-07-30 09:21:03 -0700
committerBob Halley <halley@dnspython.org>2020-08-10 18:14:30 -0700
commit238131c3cf2bf920d9d84bc3e623705f83a8d64e (patch)
tree172c46a262f2ff83b5bd7ebce71df4017eb891aa /dns/node.py
parentcef16575c31a9b0fe03f128ede23e8991cbebe77 (diff)
downloaddnspython-238131c3cf2bf920d9d84bc3e623705f83a8d64e.tar.gz
Transaction support.
Diffstat (limited to 'dns/node.py')
-rw-r--r--dns/node.py30
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")