Package dns :: Package rdtypes :: Package ANY :: Module GPOS
[hide private]
[frames] | no frames]

Source Code for Module dns.rdtypes.ANY.GPOS

  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  import dns.exception 
 17  import dns.rdata 
 18  import dns.tokenizer 
 19   
20 -def _validate_float_string(what):
21 if what[0] == '-' or what[0] == '+': 22 what = what[1:] 23 if what.isdigit(): 24 return 25 (left, right) = what.split('.') 26 if left == '' and right == '': 27 raise dns.exception.FormError 28 if not left == '' and not left.isdigit(): 29 raise dns.exception.FormError 30 if not right == '' and not right.isdigit(): 31 raise dns.exception.FormError
32
33 -class GPOS(dns.rdata.Rdata):
34 """GPOS record 35 36 @ivar latitude: latitude 37 @type latitude: string 38 @ivar longitude: longitude 39 @type longitude: string 40 @ivar altitude: altitude 41 @type altitude: string 42 @see: RFC 1712""" 43 44 __slots__ = ['latitude', 'longitude', 'altitude'] 45
46 - def __init__(self, rdclass, rdtype, latitude, longitude, altitude):
47 super(GPOS, self).__init__(rdclass, rdtype) 48 if isinstance(latitude, float) or \ 49 isinstance(latitude, int) or \ 50 isinstance(latitude, long): 51 latitude = str(latitude) 52 if isinstance(longitude, float) or \ 53 isinstance(longitude, int) or \ 54 isinstance(longitude, long): 55 longitude = str(longitude) 56 if isinstance(altitude, float) or \ 57 isinstance(altitude, int) or \ 58 isinstance(altitude, long): 59 altitude = str(altitude) 60 _validate_float_string(latitude) 61 _validate_float_string(longitude) 62 _validate_float_string(altitude) 63 self.latitude = latitude 64 self.longitude = longitude 65 self.altitude = altitude
66
67 - def to_text(self, origin=None, relativize=True, **kw):
68 return '%s %s %s' % (self.latitude, self.longitude, self.altitude)
69
70 - def from_text(cls, rdclass, rdtype, tok, origin = None, relativize = True):
71 latitude = tok.get_string() 72 longitude = tok.get_string() 73 altitude = tok.get_string() 74 tok.get_eol() 75 return cls(rdclass, rdtype, latitude, longitude, altitude)
76 77 from_text = classmethod(from_text) 78
79 - def to_wire(self, file, compress = None, origin = None):
80 l = len(self.latitude) 81 assert l < 256 82 byte = chr(l) 83 file.write(byte) 84 file.write(self.latitude) 85 l = len(self.longitude) 86 assert l < 256 87 byte = chr(l) 88 file.write(byte) 89 file.write(self.longitude) 90 l = len(self.altitude) 91 assert l < 256 92 byte = chr(l) 93 file.write(byte) 94 file.write(self.altitude)
95
96 - def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin = None):
97 l = ord(wire[current]) 98 current += 1 99 rdlen -= 1 100 if l > rdlen: 101 raise dns.exception.FormError 102 latitude = wire[current : current + l].unwrap() 103 current += l 104 rdlen -= l 105 l = ord(wire[current]) 106 current += 1 107 rdlen -= 1 108 if l > rdlen: 109 raise dns.exception.FormError 110 longitude = wire[current : current + l].unwrap() 111 current += l 112 rdlen -= l 113 l = ord(wire[current]) 114 current += 1 115 rdlen -= 1 116 if l != rdlen: 117 raise dns.exception.FormError 118 altitude = wire[current : current + l].unwrap() 119 return cls(rdclass, rdtype, latitude, longitude, altitude)
120 121 from_wire = classmethod(from_wire) 122
123 - def _cmp(self, other):
124 v = cmp(self.latitude, other.latitude) 125 if v == 0: 126 v = cmp(self.longitude, other.longitude) 127 if v == 0: 128 v = cmp(self.altitude, other.altitude) 129 return v
130
131 - def _get_float_latitude(self):
132 return float(self.latitude)
133
134 - def _set_float_latitude(self, value):
135 self.latitude = str(value)
136 137 float_latitude = property(_get_float_latitude, _set_float_latitude, 138 doc="latitude as a floating point value") 139
140 - def _get_float_longitude(self):
141 return float(self.longitude)
142
143 - def _set_float_longitude(self, value):
144 self.longitude = str(value)
145 146 float_longitude = property(_get_float_longitude, _set_float_longitude, 147 doc="longitude as a floating point value") 148
149 - def _get_float_altitude(self):
150 return float(self.altitude)
151
152 - def _set_float_altitude(self, value):
153 self.altitude = str(value)
154 155 float_altitude = property(_get_float_altitude, _set_float_altitude, 156 doc="altitude as a floating point value")
157