| import uuid |
| import tempfile |
| import os |
| from appwrite.client import Client |
| from appwrite.services.storage import Storage |
| from appwrite.input_file import InputFile |
| from services.observability import setup_logger |
|
|
| logger = setup_logger(__name__) |
| from config import ( |
| APP_WRITE_PROJECT_ID, |
| APP_WRITE_API_ENDPOINT, |
| APP_WRITE_API_KEY, |
| APP_WRITE_BUCKET_ID |
| ) |
|
|
| client = Client() |
| client.set_endpoint(APP_WRITE_API_ENDPOINT) |
| client.set_project(APP_WRITE_PROJECT_ID) |
| client.set_key(APP_WRITE_API_KEY) |
|
|
| storage = Storage(client) |
|
|
| async def upload_document_to_appwrite(content: str, format: str) -> str: |
| """ |
| Uploads a generated document to Appwrite storage and returns a view/download URL. |
| """ |
| if format not in ["csv", "md"]: |
| format = "md" |
| |
| file_id = str(uuid.uuid4()) |
| filename = f"report_{file_id}.{format}" |
| |
| temp_path = os.path.join(tempfile.gettempdir(), filename) |
| with open(temp_path, "w", encoding="utf-8") as f: |
| f.write(content) |
| |
| try: |
| result = storage.create_file( |
| bucket_id=APP_WRITE_BUCKET_ID, |
| file_id=file_id, |
| file=InputFile.from_path(temp_path) |
| ) |
| |
| url = f"{APP_WRITE_API_ENDPOINT}/storage/buckets/{APP_WRITE_BUCKET_ID}/files/{file_id}/view?project={APP_WRITE_PROJECT_ID}" |
| return url |
| except Exception as e: |
| logger.error(f"Appwrite Upload Error: {e}") |
| return f"Error uploading file: {e}" |
| finally: |
| if os.path.exists(temp_path): |
| os.remove(temp_path) |
|
|