root / trunk / twisted / names / hosts.py

Revision 16333, 1.6 kB (checked in by exarkun, 3 years ago)

Merge names-whitespace-1583

Author: exarkun
Reviewer: radix
Fixes #1583

This removes a bunch of trailing whitespace and adds some missing copyright
headers.

Line 
1 # Copyright (c) 2001-2004 Twisted Matrix Laboratories.
2 # See LICENSE for details.
3
4
5 from twisted.names import dns
6 from twisted.persisted import styles
7 from twisted.python import failure
8 from twisted.internet import defer
9
10 from twisted.names import common
11
12 def searchFileFor(file, name):
13     try:
14         fp = open(file)
15     except:
16         return None
17
18     lines = fp.readlines()
19     for line in lines:
20         idx = line.find('#')
21         if idx != -1:
22             line = line[:idx]
23         if not line:
24             continue
25         parts = line.split()
26         if name.lower() in [s.lower() for s in parts[1:]]:
27             return parts[0]
28     return None
29
30
31
32 class Resolver(common.ResolverBase, styles.Versioned):
33     """A resolver that services hosts(5) format files."""
34     #TODO: IPv6 support
35
36     persistenceVersion = 1
37
38     def upgradeToVersion1(self):
39         # <3 exarkun
40         self.typeToMethod = {}
41         for (k, v) in common.typeToMethod.items():
42             self.typeToMethod[k] = getattr(self, v)
43
44
45     def __init__(self, file='/etc/hosts', ttl = 60 * 60):
46         common.ResolverBase.__init__(self)
47         self.file = file
48         self.ttl = ttl
49
50
51     def lookupAddress(self, name, timeout = None):
52         res = searchFileFor(self.file, name)
53         if res:
54             return defer.succeed([
55                 (dns.RRHeader(name, dns.A, dns.IN, self.ttl, dns.Record_A(res, self.ttl)),), (), ()
56             ])
57         return defer.fail(failure.Failure(dns.DomainError(name)))
58
59
60     # When we put IPv6 support in, this'll need a real impl
61     lookupAllRecords = lookupAddress
Note: See TracBrowser for help on using the browser.