Skip to content

Commit c15d24e

Browse files
authored
chore: update dependencies for support pydantic V2 and adapt code in consequences (#195)
1 parent fab70e4 commit c15d24e

File tree

6 files changed

+506
-440
lines changed

6 files changed

+506
-440
lines changed

fastapi_mail/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
from aiosmtplib.api import DEFAULT_TIMEOUT
44
from jinja2 import Environment, FileSystemLoader
5-
from pydantic import BaseSettings as Settings
65
from pydantic import DirectoryPath, EmailStr, conint
6+
from pydantic_settings import BaseSettings as Settings
77

88

99
class ConnectionConfig(Settings):

fastapi_mail/email_utils/email_check.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import dns.exception
66
import dns.resolver
7+
from email_validator import EmailNotValidError, validate_email
78

89
try:
910
from redis import asyncio as aioredis
@@ -19,8 +20,6 @@
1920
except ImportError:
2021
request_lib = False
2122

22-
from pydantic import EmailStr
23-
2423
from fastapi_mail.errors import ApiError, DBProvaiderError
2524

2625

@@ -168,7 +167,11 @@ async def init_redis(self) -> bool:
168167

169168
def validate_email(self, email: str) -> bool:
170169
"""Validate email address"""
171-
EmailStr.validate(email)
170+
try:
171+
emailinfo = validate_email(email, check_deliverability=False)
172+
email = emailinfo.normalized
173+
except EmailNotValidError:
174+
raise EmailNotValidError
172175
return True
173176

174177
async def fetch_temp_email_domains(self) -> Union[List[str], Any]:
@@ -370,9 +373,13 @@ async def fetch_info(self) -> bool:
370373

371374
def validate_email(self, email: str) -> bool:
372375
"""Validate email address"""
373-
if EmailStr.validate(email):
374-
return True
375-
return False
376+
377+
try:
378+
emailinfo = validate_email(email, check_deliverability=False)
379+
email = emailinfo.normalized
380+
except EmailNotValidError:
381+
return False
382+
return True
376383

377384
def catch_all_check(self) -> bool:
378385
"""

fastapi_mail/schemas.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from mimetypes import MimeTypes
55
from typing import Dict, List, Optional, Union
66

7-
from pydantic import BaseModel, EmailStr, root_validator, validator
7+
from pydantic import BaseModel, ConfigDict, EmailStr, field_validator, model_validator
88
from starlette.datastructures import Headers, UploadFile
99

1010
from fastapi_mail.errors import WrongFile
@@ -48,7 +48,7 @@ class MessageSchema(BaseModel):
4848
multipart_subtype: MultipartSubtypeEnum = MultipartSubtypeEnum.mixed
4949
headers: Optional[Dict] = None
5050

51-
@validator("attachments")
51+
@field_validator("attachments")
5252
def validate_file(cls, v):
5353
temp = []
5454
mime = MimeTypes()
@@ -88,17 +88,16 @@ def validate_file(cls, v):
8888
)
8989
return temp
9090

91-
@root_validator
91+
@model_validator(mode="after")
9292
def validate_alternative_body(cls, values):
9393
"""
9494
Validate alternative_body field
9595
"""
9696
if (
97-
values["multipart_subtype"] != MultipartSubtypeEnum.alternative
98-
and values["alternative_body"]
97+
values.multipart_subtype != MultipartSubtypeEnum.alternative
98+
and values.alternative_body
9999
):
100-
values["alternative_body"] = None
100+
values.alternative_body = None
101101
return values
102102

103-
class Config:
104-
arbitrary_types_allowed = True
103+
model_config = ConfigDict(arbitrary_types_allowed=True)

0 commit comments

Comments
 (0)