Coverage for polar/kit/email.py: 86%
20 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 17:15 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 17:15 +0000
1import functools 1a
2from typing import Annotated 1a
4import email_validator 1a
5from email_validator import EmailNotValidError, caching_resolver 1a
6from email_validator import validate_email as _validate_email 1a
7from pydantic import AfterValidator, EmailStr 1a
8from pydantic_core import PydanticCustomError 1a
10from polar.config import settings 1a
12if settings.is_testing(): 12 ↛ 13line 12 didn't jump to line 13 because the condition on line 12 was never true1a
13 email_validator.TEST_ENVIRONMENT = True
15_email_dns_resolver = caching_resolver() 1a
17validate_email = functools.partial( 1a
18 _validate_email, check_deliverability=True, dns_resolver=_email_dns_resolver
19)
22def _validate_email_dns(email: str) -> str: 1a
23 try: 1b
24 validate_email(email) 1b
25 except EmailNotValidError as e: 1b
26 raise PydanticCustomError( 1b
27 "value_error",
28 "{email} is not a valid email address: {reason}",
29 {"email": email, "reason": str(e)},
30 ) from e
31 else:
32 return email
35EmailStrDNS = Annotated[EmailStr, AfterValidator(_validate_email_dns)] 1a
38__all__ = ["EmailNotValidError", "validate_email", "EmailStrDNS"] 1a