email tem work now need uses to create the system with rback

pull/1/head
ahmed.mujtaba 2026-08-03 21:29:32 +05:00
parent d48048bb7a
commit caab412f96
3 changed files with 51 additions and 7 deletions

View File

@ -1 +1,32 @@
"""Inbox helpers — attachment loading and other non-routing checks."""
from __future__ import annotations
import base64
from pathlib import Path
from inbox.models import Inbox_Messages
def load_message_files(message: Inbox_Messages) -> list[dict]:
"""Read files from file_path when they exist on disk."""
if not message.file_path:
return []
files: list[dict] = []
for path_str in message.file_path.split(","):
path = Path(path_str.strip())
if not path.is_file():
continue
try:
raw = path.read_bytes()
except OSError:
continue
files.append(
{
"file_name": path.name,
"content_base64": base64.b64encode(raw).decode("ascii"),
"size": len(raw),
}
)
return files

View File

@ -17,8 +17,10 @@ def serialize_message(message: Inbox_Messages) -> dict:
sender_name = name
attachment_name = None
if message.file_path:
attachment_name = Path(message.file_path).name
if message.file_name:
attachment_name = message.file_name.split(",")[0].strip() or None
elif message.file_path:
attachment_name = Path(message.file_path.split(",")[0].strip()).name or None
return {
"id": str(message.id),
@ -31,6 +33,7 @@ def serialize_message(message: Inbox_Messages) -> dict:
"unread": not message.message_read,
"attachment": message.attachment,
"attachment_name": attachment_name,
"file_name": message.file_name,
"message_to": message.message_to,
"message_cc": message.message_cc,
"message_bcc": message.message_bcc,

View File

@ -1,13 +1,12 @@
import httpx,os,uuid
import httpx,os
from fastapi import HTTPException
from inbox.models import Inbox_Messages
from inbox.file_decoder import decode_attachment, AttachmentDecodeError
from inbox.serializers import serialize_message
from inbox.plugins import load_message_files
from dotenv import load_dotenv
load_dotenv()
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import func,or_
from sqlmodel import select
from pydantic import BaseModel
class Email:
@ -48,13 +47,24 @@ class Email:
async def get_inbox_messages(self,top,skip,search=None):
messages=await Inbox_Messages.get_inbox_messages(self.session,top,skip,search)
return [serialize_message(m) for m in messages]
items=[]
for m in messages:
item=serialize_message(m)
files=load_message_files(m)
if files:
item["files"]=files
items.append(item)
return items
async def get_inbox_message_by_id(self,record_id):
message=await Inbox_Messages.get_inbox_message_by_id(self.session,record_id)
if not message:
raise HTTPException(status_code=404,detail="Message not found")
return serialize_message(message)
item=serialize_message(message)
files=load_message_files(message)
if files:
item["files"]=files
return item
async def count_inbox_messages(self,search=None):
return await Inbox_Messages.count_inbox_messages(self.session,search)