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: # Resolve IP to domain name. no_match = False try: self.reverse_domain = (name_to_domain( ip_to_domain_name(self.ip_str, ip_type='4'))) except ValueError: no_match = True if (no_match or self.reverse_domain is None or self.reverse_domain.name in ('arpa', 'in-addr.arpa', 'ipv6.arpa')): raise ValidationError("No reverse Domain found for {0} " .format(self.ip_str)) self.ip_upper = 0 self.ip_lower = int(ip)
def ip_to_domain_name(ip, ip_type='4', uppercase=False): """Convert an ip to dns zone form. The ip is assumed to be in valid format.""" if not isinstance(ip, basestring): raise ValidationError("Ip is not of type string.") validate_ip_type(ip_type) octets = ip.split('.') if ip_type == '4': name = '.in-addr.arpa' if ip_type == '6': name = '.ipv6.arpa' if uppercase: name = name.uppercase name = '.'.join(list(reversed(octets))) + name return name
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)