/usr/share/doc/python-dns/examples/caching.py is in python-dns 2.3.6-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54  | # 
# From: KevinL <darius@bofh.net.au>
#   A simple dns answer cache - it's author notes:
#     "It's probably really bodgy code, tho - it was my early python..."
#   So don't send him abusive messages if you hate it. 
#
class DNSCache:
    """
    Covers the DNS object, keeps a cache of answers.  Clumsy as hell.
    """
    forCache = {}
    revCache = {}
    # cache failures for this long, in seconds
    negCache = 3600
    def __init__(self):
       import DNS
       DNS.ParseResolvConf()
    def lookup(self,IP = None,name = None):
        import DNS
	now = time.time()
        if (not IP) and (not name):
            return None
        if IP:
            if type(IP) != type(''):
                return None
            a = string.split(IP, '.')
            a.reverse()  
            name = string.join(a, '.')+'.in-addr.arpa'
            cache = self.revCache
            qt = 'ptr'
        else:
            if type(name) != type(''):
                return None
            cache = self.forCache
            qt = 'a'
        if cache.has_key(name):
	    # Check if it's timed out or not
            if cache[name][1] < now:
                del(cache[name])
            else:
                return(cache[name][0])
        x = DNS.DnsRequest(name,qtype=qt)
        try:
            x.req()
        except:
            return 'Timeout'
        if len(x.response.answers) > 0:
            cache[name] = ( x.response.answers[0]['data'], x.time_finish + 
			    x.response.answers[0]['ttl'])
        else:
            cache[name] = (None,now+self.negCache)
        return cache[name][0]
 |