Spaces:
Runtime error
Runtime error
| from __future__ import annotations | |
| from pathlib import Path | |
| import shutil | |
| from typing import List, Optional | |
| from fastapi import UploadFile | |
| from src.config import UPLOAD_DIR | |
| from src.db import Document, User, init_db | |
| def _ensure_user_dir(username: str) -> Path: | |
| path = Path(UPLOAD_DIR) / username | |
| path.mkdir(parents=True, exist_ok=True) | |
| return path | |
| def save_document(username: str, file: UploadFile) -> Document: | |
| """Persist an uploaded file and return its database entry.""" | |
| init_db() | |
| user, _ = User.get_or_create(username=username) | |
| dest_dir = _ensure_user_dir(username) | |
| dest = dest_dir / file.filename | |
| with dest.open('wb') as buffer: | |
| shutil.copyfileobj(file.file, buffer) | |
| doc = Document.create(user=user, file_path=str(dest), original_name=file.filename) | |
| return doc | |
| def list_documents(username: str) -> List[Document]: | |
| """Return all documents for ``username`` sorted by creation time.""" | |
| init_db() | |
| try: | |
| user = User.get(User.username == username) | |
| except User.DoesNotExist: | |
| return [] | |
| docs = Document.select().where(Document.user == user).order_by(Document.created_at) | |
| return list(docs) | |
| def get_document(username: str, doc_id: int) -> Optional[Document]: | |
| """Retrieve a single document for ``username`` by id.""" | |
| init_db() | |
| try: | |
| user = User.get(User.username == username) | |
| except User.DoesNotExist: | |
| return None | |
| try: | |
| return Document.get(Document.id == doc_id, Document.user == user) | |
| except Document.DoesNotExist: | |
| return None | |
| def read_content(doc: Document) -> str: | |
| """Read and return the text content of ``doc``. Errors yield empty string.""" | |
| try: | |
| return Path(doc.file_path).read_text(encoding='utf-8', errors='replace') | |
| except Exception: | |
| return '' | |