#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>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/django-updates/0107019c04695214-0c977174-1e60-4833-8990-fd4d8fcce91d-000000%40eu-central-1.amazonses.com.

Reply via email to