Package dns :: Module ttl
[hide private]
[frames] | no frames]

Source Code for Module dns.ttl

 1  # Copyright (C) 2003-2007, 2009-2011 Nominum, Inc. 
 2  # 
 3  # Permission to use, copy, modify, and distribute this software and its 
 4  # documentation for any purpose with or without fee is hereby granted, 
 5  # provided that the above copyright notice and this permission notice 
 6  # appear in all copies. 
 7  # 
 8  # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES 
 9  # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 
10  # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR 
11  # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 
12  # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 
13  # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT 
14  # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
15   
16  """DNS TTL conversion.""" 
17   
18  import dns.exception 
19   
20 -class BadTTL(dns.exception.SyntaxError):
21 pass
22
23 -def from_text(text):
24 """Convert the text form of a TTL to an integer. 25 26 The BIND 8 units syntax for TTLs (e.g. '1w6d4h3m10s') is supported. 27 28 @param text: the textual TTL 29 @type text: string 30 @raises dns.ttl.BadTTL: the TTL is not well-formed 31 @rtype: int 32 """ 33 34 if text.isdigit(): 35 total = long(text) 36 else: 37 if not text[0].isdigit(): 38 raise BadTTL 39 total = 0L 40 current = 0L 41 for c in text: 42 if c.isdigit(): 43 current *= 10 44 current += long(c) 45 else: 46 c = c.lower() 47 if c == 'w': 48 total += current * 604800L 49 elif c == 'd': 50 total += current * 86400L 51 elif c == 'h': 52 total += current * 3600L 53 elif c == 'm': 54 total += current * 60L 55 elif c == 's': 56 total += current 57 else: 58 raise BadTTL("unknown unit '%s'" % c) 59 current = 0 60 if not current == 0: 61 raise BadTTL("trailing integer") 62 if total < 0L or total > 2147483647L: 63 raise BadTTL("TTL should be between 0 and 2^31 - 1 (inclusive)") 64 return total
65