form level error handling at the field level

This commit is contained in:
David Kennedy 2023-10-19 17:26:26 -04:00
parent 150e89d2ee
commit 43b6d1e380
No known key found for this signature in database
GPG key ID: 6528A5386E66B96B
2 changed files with 12 additions and 7 deletions

View file

@ -5,7 +5,10 @@ from django.core.validators import MinValueValidator, MaxValueValidator, RegexVa
from django.forms import formset_factory from django.forms import formset_factory
from phonenumber_field.widgets import RegionalPhoneNumberWidget from phonenumber_field.widgets import RegionalPhoneNumberWidget
from registrar.utility.errors import NameserverError from registrar.utility.errors import (
NameserverError,
NameserverErrorCodes as nsErrorCodes
)
from ..models import Contact, DomainInformation, Domain from ..models import Contact, DomainInformation, Domain
from .common import ( from .common import (
@ -70,9 +73,9 @@ class DomainNameserverForm(forms.Form):
# make sure there's a nameserver if an ip is passed # make sure there's a nameserver if an ip is passed
if ip: if ip:
ip_list = [ip.strip() for ip in ip.split(",")] ip_list = [ip.strip() for ip in ip.split(",")]
if len(server) < len(ip_list): if not server and len(ip_list) > 0:
# If 'server' is empty, disallow 'ip' input # If 'server' is empty, disallow 'ip' input
raise forms.ValidationError("Name server must be provided to enter IP address.") self.add_error('server', "Nameserver must be provided to enter IP address.")
# if there's a nameserver and an ip, validate nameserver/ip combo # if there's a nameserver and an ip, validate nameserver/ip combo
@ -84,7 +87,12 @@ class DomainNameserverForm(forms.Form):
try: try:
Domain.checkHostIPCombo(domain, server, ip_list) Domain.checkHostIPCombo(domain, server, ip_list)
except NameserverError as e: except NameserverError as e:
raise forms.ValidationError(str(e)) if e.code == nsErrorCodes.GLUE_RECORD_NOT_ALLOWED:
self.add_error('server', "Name server address does not match domain name")
elif e.code == nsErrorCodes.MISSING_IP:
self.add_error('ip', "Subdomains require an IP address")
else:
self.add_error('ip', str(e))
return cleaned_data return cleaned_data

View file

@ -314,7 +314,6 @@ class Domain(TimeStampedModel, DomainHelper):
NameserverError (if exception hit) NameserverError (if exception hit)
Returns: Returns:
None""" None"""
logger.info("checkHostIPCombo is called on %s, %s", name, nameserver)
if cls.isSubdomain(name, nameserver) and (ip is None or ip == [] or ip == ['']): if cls.isSubdomain(name, nameserver) and (ip is None or ip == [] or ip == ['']):
raise NameserverError(code=nsErrorCodes.MISSING_IP, nameserver=nameserver) raise NameserverError(code=nsErrorCodes.MISSING_IP, nameserver=nameserver)
@ -330,7 +329,6 @@ class Domain(TimeStampedModel, DomainHelper):
raise NameserverError( raise NameserverError(
code=nsErrorCodes.INVALID_IP, nameserver=nameserver, ip=ip code=nsErrorCodes.INVALID_IP, nameserver=nameserver, ip=ip
) )
logger.info("got no errors")
return None return None
@classmethod @classmethod
@ -340,7 +338,6 @@ class Domain(TimeStampedModel, DomainHelper):
returns: returns:
isValid (boolean)-True for valid ip address""" isValid (boolean)-True for valid ip address"""
try: try:
logger.info(f"in valid_ip_addr: {ipToTest}")
ip = ipaddress.ip_address(ipToTest) ip = ipaddress.ip_address(ipToTest)
logger.info(ip.version) logger.info(ip.version)
return ip.version == 6 or ip.version == 4 return ip.version == 6 or ip.version == 4