root/trunk/twisted/names/resolve.py

Revision 24441, 1.6 KB (checked in by thijs, 2 years ago)

Merge maintainer-email-2438: Get rid of references to maintainer email addresses from code.

Author: thijs
Reviewer: exarkun
Fixes: #2438

Line 
1# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
2# See LICENSE for details.
3
4
5"""
6Lookup a name using multiple resolvers.
7
8Future Plans: This needs someway to specify which resolver answered
9the query, or someway to specify (authority|ttl|cache behavior|more?)
10
11@author: Jp Calderone
12"""
13
14from twisted.internet import defer, interfaces
15from twisted.names import dns
16from zope.interface import implements
17import common
18
19class FailureHandler:
20    def __init__(self, resolver, query, timeout):
21        self.resolver = resolver
22        self.query = query
23        self.timeout = timeout
24
25
26    def __call__(self, failure):
27        # AuthoritativeDomainErrors should halt resolution attempts
28        failure.trap(dns.DomainError, defer.TimeoutError, NotImplementedError)
29        return self.resolver(self.query, self.timeout)
30
31
32class ResolverChain(common.ResolverBase):
33    """Lookup an address using multiple C{IResolver}s"""
34
35    implements(interfaces.IResolver)
36
37
38    def __init__(self, resolvers):
39        common.ResolverBase.__init__(self)
40        self.resolvers = resolvers
41
42
43    def _lookup(self, name, cls, type, timeout):
44        q = dns.Query(name, type, cls)
45        d = self.resolvers[0].query(q, timeout)
46        for r in self.resolvers[1:]:
47            d = d.addErrback(
48                FailureHandler(r.query, q, timeout)
49            )
50        return d
51
52
53    def lookupAllRecords(self, name, timeout = None):
54        d = self.resolvers[0].lookupAllRecords(name, timeout)
55        for r in self.resolvers[1:]:
56            d = d.addErrback(
57                FailureHandler(r.lookupAllRecords, name, timeout)
58            )
59        return d
Note: See TracBrowser for help on using the browser.