#36809: Allow EmailValidator to customize error messages depending on the part that
failed validation
-------------------------------------+-------------------------------------
Reporter: Daniel E Onetti | Owner: Daniel E
Type: | Onetti
Cleanup/optimization | Status: assigned
Component: Core (Other) | Version: dev
Severity: Normal | Resolution:
Keywords: EmailValidator | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 1
Needs tests: 1 | Patch needs improvement: 1
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by jaffar Khan):
* cc: jaffar Khan (added)
Comment:
I want to work on this ticket as the current owner seem to no longer
active.
I think it is more genuine way to separate checks of username and domain
as Natalia proposed. I defined two methods **validate_username()** and
**validate_domain()** as:
{{{
def validate_username(self, user_part):
if not self.user_regex.match(user_part):
raise ValidationError(self.message, code=self.code,
params={"value": user_part})
def validate_domain(self, domain_part):
if domain_part not in self.domain_allowlist and not
self.domain_regex.match(domain_part):
raise ValidationError(self.message, code=self.code,
params={"value": domain_part})
}}}
then inside call, I called these two methods and removed the username and
domain checks as it looks no longer necessary:
{{{
def __call__(self, value):
# The maximum length of an email is 320 characters per RFC 3696
# section 3.
if not value or "@" not in value or len(value) > 320:
raise ValidationError(self.message, code=self.code,
params={"value": value})
user_part, domain_part = value.rsplit("@", 1)
self.validate_username(user_part)
self.validate_domain(domain_part)
}}}
I think it will be a more developer-friendly way. Please let me know
whether to create a PR.
--
Ticket URL: <
https://code.djangoproject.com/ticket/36809#comment:8>