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

1import functools 1a

2from typing import Annotated 1a

3 

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

9 

10from polar.config import settings 1a

11 

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 

14 

15_email_dns_resolver = caching_resolver() 1a

16 

17validate_email = functools.partial( 1a

18 _validate_email, check_deliverability=True, dns_resolver=_email_dns_resolver 

19) 

20 

21 

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 

33 

34 

35EmailStrDNS = Annotated[EmailStr, AfterValidator(_validate_email_dns)] 1a

36 

37 

38__all__ = ["EmailNotValidError", "validate_email", "EmailStrDNS"] 1a