def clean_ip(self, update_reverse_domain=True): """The clean method in Ip is different from the rest. It needs to be called with the update_reverse_domain flag. Sometimes we need to not update the reverse domain of an IP (i.e. when we are deleting a reverse_domain). """ # TODO, it's a f*****g hack. Car babies. validate_ip_type(self.ip_type) self._validate_ip_str() if self.ip_type == '4': try: ip = ipaddr.IPv4Address(self.ip_str) self.ip_str = str(ip) except ipaddr.AddressValueError, e: raise ValidationError("Invalid Ip address {0}". format(self.ip_str)) if update_reverse_domain: self.reverse_domain = ip_to_reverse_domain(self.ip_str, ip_type='4') self.ip_upper = 0 self.ip_lower = int(ip)
format(self.ip_str)) if update_reverse_domain: self.reverse_domain = ip_to_reverse_domain(self.ip_str, ip_type='4') self.ip_upper = 0 self.ip_lower = int(ip) else: try: ip = ipaddr.IPv6Address(self.ip_str) self.ip_str = str(ip) except ipaddr.AddressValueError, e: raise ValidationError("Invalid ip {0} for IPv6s.". format(self.ip_str)) if update_reverse_domain: self.reverse_domain = ip_to_reverse_domain(self.ip_str, ip_type='6') self.ip_upper, self.ip_lower = ipv6_to_longs(int(ip)) def __int__(self): if self.ip_type == '4': self.ip_lower if self.ip_type == '6': return (self.ip_upper * (2 ** 64)) + self.ip_lower def _validate_ip_str(self): if isinstance(self.ip_str, str) or isinstance(self.ip_str, unicode): return else: raise ValidationError("Plase provide the string representation" "of the IP")