knowledge-base / app /schema /__init__.py
gavinzli's picture
Refactor email handling: remove mail module, update service routes, and enhance EmailQuery model with additional parameters
af61c79
raw
history blame
4.64 kB
"""Module containing the data models for the application."""
from datetime import datetime, timedelta
from typing import List, Optional
from pydantic import BaseModel, Field
class EmailQuery(BaseModel):
"""
EmailQuery model representing the structure of an email query.
Attributes:
subject (Optional[str]): The subject of the email to search for.
from_email (Optional[str]): The sender's email address.
to_email (Optional[str]): The recipient's email address.
cc_email (Optional[str]): The CC email address.
has_words (Optional[str]): Words that the email must contain.
not_has_words (Optional[str]): Words that the email must not contain.
size (Optional[int]): The size of the email in bytes.
date_within (Optional[str]): The date within which to search for emails.
after (Optional[str]): The date after which to search for emails.
max_results (Optional[int]): The maximum number of results to return.
"""
subject: Optional[str] = None
from_email: Optional[str] = Field(None, alias="from")
to_email: Optional[str] = Field(None, alias="to")
cc_email: Optional[str] = Field(None, alias="cc")
has_words: Optional[str] = None
not_has_words: Optional[str] = None
size: Optional[int] = None
before: Optional[str] = None
after: Optional[str] = None
@classmethod
def validate_before_after(
cls, before: Optional[str], after: Optional[str]) -> tuple[Optional[str], Optional[str]]:
"""
Validates and adjusts the 'before' and 'after' date parameters.
This method ensures that the 'before' date is greater than the 'after' date.
If 'before' is not provided, it defaults to six months prior to the current date.
Args:
before (Optional[str]): The 'before' date in the format "YYYY/MM/DD". Defaults to None.
after (Optional[str]): The 'after' date in the format "YYYY/MM/DD". Defaults to None.
Returns:
tuple[Optional[str], Optional[str]]:
A tuple containing the validated 'before' and 'after' dates.
Raises:
ValueError: If the 'before' date is not greater than the 'after' date.
"""
if after is None:
after = (datetime.now() - timedelta(days=6 * 30)).strftime("%Y/%m/%d")
if before and before >= after:
raise ValueError("The 'before' date must be greater than the 'after' date.")
return before, after
def __init__(self, **data):
super().__init__(**data)
self.before, self.after = self.validate_before_after(self.before, self.after)
max_results: Optional[int] = 10
class ReqData(BaseModel):
"""
RequestData is a Pydantic model that represents the data structure for a request.
Attributes:
query (str): The query string provided by the user.
chat_id (str): The unique identifier for the chat session.
user_id (str): The unique identifier for the user.
web (Optional[bool]): A flag indicating if the request is from the web. Defaults to False.
"""
query: str
id: Optional[List[str]] = []
site: Optional[List[str]] = []
chat_id: str
user_id: str
web: Optional[bool] = False
class MailReqData(BaseModel):
"""
MailReqData is a data model representing the structure of a mail request.
Attributes:
query (str): The query or message content sent by the user.
"""
query: EmailQuery
class ReqFollowUp(BaseModel):
"""
RequestFollowUp is a Pydantic model that represents a request for follow-up.
Attributes:
query (str): The query string that needs follow-up.
contexts (list[str]): A list of context strings related to the query.
"""
query: str
contexts: list[str]
class FollowUpQ(BaseModel):
"""
FollowUpQ model to represent a follow-up question based on context information.
Attributes:
question (list[str]): A list of follow-up questions based on context information.
"""
questions: list[str] = Field(..., description="3 Follow up questions based on context.")
class ChatHistory(BaseModel):
"""
ChatHistory model representing a chat session.
Attributes:
chat_id (str): The unique identifier for the chat session.
user_id (str): The unique identifier for the user.
"""
chat_id: str
user_id: str
class ChatSession(BaseModel):
"""
ChatSession model representing a chat session.
Attributes:
user_id (str): The unique identifier for the user.
"""
user_id: str