summaryrefslogtreecommitdiff
path: root/project2/proj2_s4498062/dns/cache.py
diff options
context:
space:
mode:
authorCamil Staps2016-05-23 22:01:31 +0200
committerCamil Staps2016-05-23 22:01:31 +0200
commit7500f59ce0dbd8d376c008001dd638ad2844ab2b (patch)
tree7c7ce48b737ed7a34534375ee2891e026b26455a /project2/proj2_s4498062/dns/cache.py
parentAssignment 7, deel 2 (diff)
Framework 2
Diffstat (limited to 'project2/proj2_s4498062/dns/cache.py')
-rw-r--r--project2/proj2_s4498062/dns/cache.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/project2/proj2_s4498062/dns/cache.py b/project2/proj2_s4498062/dns/cache.py
new file mode 100644
index 0000000..e148d3a
--- /dev/null
+++ b/project2/proj2_s4498062/dns/cache.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python2
+
+"""A cache for resource records
+
+This module contains a class which implements a cache for DNS resource records,
+you still have to do most of the implementation. The module also provides a
+class and a function for converting ResourceRecords from and to JSON strings.
+It is highly recommended to use these.
+"""
+
+import json
+
+from dns.resource import ResourceRecord, RecordData
+from dns.types import Type
+from dns.classes import Class
+
+
+class ResourceEncoder(json.JSONEncoder):
+ """ Conver ResourceRecord to JSON
+
+ Usage:
+ string = json.dumps(records, cls=ResourceEncoder, indent=4)
+ """
+ def default(self, obj):
+ if isinstance(obj, ResourceRecord):
+ return {
+ "name": obj.name,
+ "type": Type.to_string(obj.type_),
+ "class": Class.to_string(obj.class_),
+ "ttl": obj.ttl,
+ "rdata": obj.rdata.data
+ }
+ return json.JSONEncoder.default(self, obj)
+
+
+def resource_from_json(dct):
+ """ Convert JSON object to ResourceRecord
+
+ Usage:
+ records = json.loads(string, object_hook=resource_from_json)
+ """
+ name = dct["name"]
+ type_ = Type.from_string(dct["type"])
+ class_ = Class.from_string(dct["class"])
+ ttl = dct["ttl"]
+ rdata = RecordData.create(type_, dct["rdata"])
+ return ResourceRecord(name, type_, class_, ttl, rdata)
+
+
+class RecordCache(object):
+ """ Cache for ResourceRecords """
+
+ def __init__(self, ttl):
+ """ Initialize the RecordCache
+
+ Args:
+ ttl (int): TTL of cached entries (if > 0)
+ """
+ self.records = []
+ self.ttl = ttl
+
+ def lookup(self, dname, type_, class_):
+ """ Lookup resource records in cache
+
+ Lookup for the resource records for a domain name with a specific type
+ and class.
+
+ Args:
+ dname (str): domain name
+ type_ (Type): type
+ class_ (Class): class
+ """
+ pass
+
+ def add_record(self, record):
+ """ Add a new Record to the cache
+
+ Args:
+ record (ResourceRecord): the record added to the cache
+ """
+ pass
+
+ def read_cache_file(self):
+ """ Read the cache file from disk """
+ pass
+
+ def write_cache_file(self):
+ """ Write the cache file to disk """
+ pass