diff --git a/app/celery_worker.py b/app/celery_worker.py index edaf737e..103635f0 100644 --- a/app/celery_worker.py +++ b/app/celery_worker.py @@ -6,7 +6,7 @@ from app.config import settings from app.celery_app import celery # Ensure tasks are loaded -from app import tasks # <— This imports app/tasks.py so Celery can register 'process_document' +from app import tasks # <— This imports app/tasks.py so Celery can register tasks # **Ensure all tasks are imported before Celery starts** from app.tasks.upload_to_s3 import upload_to_s3 @@ -15,7 +15,10 @@ from app.tasks.refine_text_with_gpt import refine_text_with_gpt from app.tasks.extract_metadata_with_gpt import extract_metadata_with_gpt from app.tasks.embed_metadata_into_pdf import embed_metadata_into_pdf - +# Import new send tasks +from app.tasks.upload_to_dropbox import upload_to_dropbox +from app.tasks.upload_to_paperless import upload_to_paperless +from app.tasks.upload_to_nextcloud import upload_to_nextcloud celery.conf.task_routes = { "app.tasks.*": {"queue": "default"}, @@ -24,4 +27,3 @@ celery.conf.task_routes = { @celery.task def test_task(): return "Celery is working!" - diff --git a/app/main.py b/app/main.py index c1bba2f6..95621816 100644 --- a/app/main.py +++ b/app/main.py @@ -4,6 +4,9 @@ import os from fastapi import FastAPI, HTTPException from app.config import settings from app.tasks.upload_to_s3 import upload_to_s3 +from app.tasks.upload_to_dropbox import upload_to_dropbox +from app.tasks.upload_to_paperless import upload_to_paperless +from app.tasks.upload_to_nextcloud import upload_to_nextcloud app = FastAPI(title="Document Processing API") @@ -20,10 +23,37 @@ def process(file_path: str): # If file_path is not absolute, treat it as relative to settings.workdir. if not os.path.isabs(file_path): - file_path = os.path.join(settings.workdir, file_path) + file_path = os.path.join(settings.workdir, 'processed', file_path) if not os.path.exists(file_path): raise HTTPException(status_code=400, detail=f"File {file_path} not found.") task = upload_to_s3.delay(file_path) return {"task_id": task.id, "status": "queued"} + +@app.post("/send_to_dropbox/") +def send_to_dropbox(file_path: str): + if not os.path.isabs(file_path): + file_path = os.path.join(settings.workdir, 'processed', file_path) + if not os.path.exists(file_path): + raise HTTPException(status_code=400, detail=f"File {file_path} not found.") + task = upload_to_dropbox.delay(file_path) + return {"task_id": task.id, "status": "queued"} + +@app.post("/send_to_paperless/") +def send_to_paperless(file_path: str): + if not os.path.isabs(file_path): + file_path = os.path.join(settings.workdir, 'processed', file_path) + if not os.path.exists(file_path): + raise HTTPException(status_code=400, detail=f"File {file_path} not found.") + task = upload_to_paperless.delay(file_path) + return {"task_id": task.id, "status": "queued"} + +@app.post("/send_to_nextcloud/") +def send_to_nextcloud(file_path: str): + if not os.path.isabs(file_path): + file_path = os.path.join(settings.workdir, 'processed', file_path) + if not os.path.exists(file_path): + raise HTTPException(status_code=400, detail=f"File {file_path} not found.") + task = upload_to_nextcloud.delay(file_path) + return {"task_id": task.id, "status": "queued"} diff --git a/app/tasks/upload_to_dropbox.py b/app/tasks/upload_to_dropbox.py new file mode 100644 index 00000000..b9353800 --- /dev/null +++ b/app/tasks/upload_to_dropbox.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python3 + +from app.config import settings +from app.tasks.retry_config import BaseTaskWithRetry +from app.celery_app import celery + +@celery.task(base=BaseTaskWithRetry) +def upload_to_dropbox(file_path: str): + """Simulate uploading a file to Dropbox.""" + print(f"[INFO] Simulating upload to Dropbox: {file_path}") + return {"status": "Completed", "file": file_path} diff --git a/app/tasks/upload_to_nextcloud.py b/app/tasks/upload_to_nextcloud.py new file mode 100644 index 00000000..57b36f43 --- /dev/null +++ b/app/tasks/upload_to_nextcloud.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python3 + +from app.config import settings +from app.tasks.retry_config import BaseTaskWithRetry +from app.celery_app import celery + +@celery.task(base=BaseTaskWithRetry) +def upload_to_nextcloud(file_path: str): + """Simulate uploading a file to Nextcloud.""" + print(f"[INFO] Simulating upload to Nextcloud: {file_path}") + return {"status": "Completed", "file": file_path} diff --git a/app/tasks/upload_to_paperless.py b/app/tasks/upload_to_paperless.py new file mode 100644 index 00000000..588f5926 --- /dev/null +++ b/app/tasks/upload_to_paperless.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python3 + +from app.config import settings +from app.tasks.retry_config import BaseTaskWithRetry +from app.celery_app import celery + +@celery.task(base=BaseTaskWithRetry) +def upload_to_paperless(file_path: str): + """Simulate uploading a file to Paperless.""" + print(f"[INFO] Simulating upload to Paperless: {file_path}") + return {"status": "Completed", "file": file_path}