From 76112870e298b739588a255c6af7aa036301a0c6 Mon Sep 17 00:00:00 2001 From: lekss361 Date: Sun, 17 May 2026 21:32:23 +0000 Subject: [PATCH] =?UTF-8?q?fix(pilot):=20drop=20pydantic=20EmailStr=20?= =?UTF-8?q?=E2=80=94=20email-validator=20dep=20missing=20=E2=86=92=20backe?= =?UTF-8?q?nd=20startup=20crash=20(#337)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/api/v1/pilot.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/backend/app/api/v1/pilot.py b/backend/app/api/v1/pilot.py index 7ff2b4e4..a925b86f 100644 --- a/backend/app/api/v1/pilot.py +++ b/backend/app/api/v1/pilot.py @@ -11,7 +11,7 @@ import logging from typing import Annotated, Any, Literal from fastapi import APIRouter, Depends, Request -from pydantic import BaseModel, EmailStr, Field +from pydantic import BaseModel, Field from sqlalchemy import text from sqlalchemy.orm import Session @@ -25,7 +25,10 @@ router = APIRouter() class PilotRequestInput(BaseModel): name: str = Field(min_length=2, max_length=200) phone: str | None = Field(default=None, max_length=50) - email: EmailStr | None = None + # Note: was EmailStr but `email-validator` package not in deps → ImportError + # on backend startup → container unhealthy → whole deploy fails. Using plain + # str + minimal regex; full validation can happen on frontend/CRM side. + email: str | None = Field(default=None, max_length=200, pattern=r"^[^@\s]+@[^@\s]+\.[^@\s]+$") company: str | None = Field(default=None, max_length=200) message: str | None = Field(default=None, max_length=2000) source: Literal["landing", "analyze_page", "other"] = "landing"