From 2e0a10256584bbdf727d552ccdef66f54e66332a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Tue, 4 Feb 2020 05:31:01 +0100 Subject: [PATCH] :mute: Log email-validator not installed only when used (#946) --- fastapi/openapi/models.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/fastapi/openapi/models.py b/fastapi/openapi/models.py index 4ca963dfc..a7c4460fa 100644 --- a/fastapi/openapi/models.py +++ b/fastapi/openapi/models.py @@ -1,5 +1,5 @@ from enum import Enum -from typing import Any, Dict, List, Optional, Union +from typing import Any, Callable, Dict, Iterable, List, Optional, Union from fastapi.logger import logger from pydantic import BaseModel @@ -21,13 +21,19 @@ try: # TODO: remove when removing support for Pydantic < 1.0.0 from pydantic.types import EmailStr # type: ignore except ImportError: # pragma: no cover - logger.info( - "email-validator not installed, email fields will be treated as str.\n" - "To install, run: pip install email-validator" - ) class EmailStr(str): # type: ignore - pass + @classmethod + def __get_validators__(cls) -> Iterable[Callable]: + yield cls.validate + + @classmethod + def validate(cls, v: Any) -> str: + logger.warning( + "email-validator not installed, email fields will be treated as str.\n" + "To install, run: pip install email-validator" + ) + return str(v) class Contact(BaseModel):