From d32beef6af5d8066bc677cf50431170a473ebad5 Mon Sep 17 00:00:00 2001 From: itqop Date: Sat, 19 Jul 2025 20:20:41 +0300 Subject: [PATCH] Improve validation for space str --- README.md | 2 +- src/graph/nodes/input_validation.py | 13 ------------- src/models/lead.py | 26 +++++++++++++++++++++----- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 4ba9086..31fdcd6 100644 --- a/README.md +++ b/README.md @@ -109,7 +109,7 @@ docker compose up --build ``` ### 4. Загрузка базы знаний - +Полоджите файлы/папку с md в data/, а после выполните запрос ```bash curl -X POST "http://localhost:8000/api/v1/admin/ingest" \ -H "Authorization: Bearer your_admin_token" diff --git a/src/graph/nodes/input_validation.py b/src/graph/nodes/input_validation.py index 3df97c8..3a2be53 100644 --- a/src/graph/nodes/input_validation.py +++ b/src/graph/nodes/input_validation.py @@ -12,19 +12,6 @@ def input_validation_node(state: EmailGenerationState) -> EmailGenerationState: return state lead_input = LeadInput(**raw_input) - - if not lead_input.contact.strip(): - raise ValidationError("Contact cannot be empty") - - if not lead_input.position.strip(): - raise ValidationError("Position cannot be empty") - - if not lead_input.company_name.strip(): - raise ValidationError("Company name cannot be empty") - - if not lead_input.segment.strip(): - raise ValidationError("Segment cannot be empty") - lead_model = LeadModel.from_input(lead_input) state["lead_input"] = lead_input diff --git a/src/models/lead.py b/src/models/lead.py index 883a2c0..3b8837d 100644 --- a/src/models/lead.py +++ b/src/models/lead.py @@ -1,18 +1,34 @@ from typing import Literal, Optional -from pydantic import BaseModel, ConfigDict, EmailStr, Field +from pydantic import BaseModel, ConfigDict, EmailStr, Field, field_validator class LeadInput(BaseModel): - contact: str = Field(min_length=1, max_length=100) - position: str = Field(min_length=1, max_length=100) - company_name: str = Field(min_length=1, max_length=100) - segment: str = Field(min_length=1, max_length=100) + contact: str = Field(max_length=100) + position: str = Field(max_length=100) + company_name: str = Field(max_length=100) + segment: str = Field(max_length=100) email: Optional[EmailStr] = None locale: Literal["ru", "en"] = "ru" notes: Optional[str] = Field(default=None, max_length=500) model_config = ConfigDict(populate_by_name=True) + @field_validator("contact", "position", "company_name", "segment") + @classmethod + def validate_required_fields(cls, v: str) -> str: + if not v or not v.strip(): + raise ValueError("Field cannot be empty or contain only whitespace") + return v.strip() + + @field_validator("notes") + @classmethod + def validate_notes(cls, v: Optional[str]) -> Optional[str]: + if v is None: + return None + if not v.strip(): + return None + return v.strip() + class LeadModel(BaseModel): contact_name: str