Spaces:
Sleeping
Sleeping
Update app/routers/content.py
Browse files- app/routers/content.py +10 -6
app/routers/content.py
CHANGED
|
@@ -5,6 +5,7 @@ from app.database import get_db
|
|
| 5 |
from app import models, schemas
|
| 6 |
from app.ingest import extract_from_pdf, extract_from_url
|
| 7 |
from app.tasks import task_generate_draft
|
|
|
|
| 8 |
|
| 9 |
router = APIRouter(prefix="/content", tags=["content"])
|
| 10 |
|
|
@@ -29,7 +30,6 @@ async def create_draft(
|
|
| 29 |
raw = text or ""
|
| 30 |
source_ref = "text"
|
| 31 |
|
| 32 |
-
|
| 33 |
draft = models.Draft(
|
| 34 |
source_type=source_type, source_ref=source_ref,
|
| 35 |
raw_text=raw[:20000], content_type=content_type, tone=tone,
|
|
@@ -37,12 +37,17 @@ async def create_draft(
|
|
| 37 |
)
|
| 38 |
db.add(draft); db.commit(); db.refresh(draft)
|
| 39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
|
| 41 |
-
task_generate_draft.delay(draft.id)
|
| 42 |
-
# 生成完了後はstatus=pendingになる。UIはポーリングで取得。
|
| 43 |
return draft
|
| 44 |
|
| 45 |
-
|
| 46 |
@router.post("/{draft_id}/approve", response_model=schemas.DraftOut)
|
| 47 |
async def approve_draft(draft_id: int, payload: schemas.ApproveInput, db: Session = Depends(get_db)):
|
| 48 |
draft = db.get(models.Draft, draft_id)
|
|
@@ -60,10 +65,9 @@ async def approve_draft(draft_id: int, payload: schemas.ApproveInput, db: Sessio
|
|
| 60 |
db.add(draft); db.commit(); db.refresh(draft)
|
| 61 |
return draft
|
| 62 |
|
| 63 |
-
|
| 64 |
@router.get("/{draft_id}", response_model=schemas.DraftOut)
|
| 65 |
async def get_draft(draft_id: int, db: Session = Depends(get_db)):
|
| 66 |
draft = db.get(models.Draft, draft_id)
|
| 67 |
if not draft:
|
| 68 |
raise RuntimeError("not found")
|
| 69 |
-
return draft
|
|
|
|
| 5 |
from app import models, schemas
|
| 6 |
from app.ingest import extract_from_pdf, extract_from_url
|
| 7 |
from app.tasks import task_generate_draft
|
| 8 |
+
from app.config import settings
|
| 9 |
|
| 10 |
router = APIRouter(prefix="/content", tags=["content"])
|
| 11 |
|
|
|
|
| 30 |
raw = text or ""
|
| 31 |
source_ref = "text"
|
| 32 |
|
|
|
|
| 33 |
draft = models.Draft(
|
| 34 |
source_type=source_type, source_ref=source_ref,
|
| 35 |
raw_text=raw[:20000], content_type=content_type, tone=tone,
|
|
|
|
| 37 |
)
|
| 38 |
db.add(draft); db.commit(); db.refresh(draft)
|
| 39 |
|
| 40 |
+
# Queue if broker exists, otherwise generate synchronously so Spaces demo works
|
| 41 |
+
try:
|
| 42 |
+
if settings.CELERY_BROKER_URL:
|
| 43 |
+
task_generate_draft.delay(draft.id)
|
| 44 |
+
else:
|
| 45 |
+
task_generate_draft(draft.id) # run inline
|
| 46 |
+
except Exception:
|
| 47 |
+
task_generate_draft(draft.id)
|
| 48 |
|
|
|
|
|
|
|
| 49 |
return draft
|
| 50 |
|
|
|
|
| 51 |
@router.post("/{draft_id}/approve", response_model=schemas.DraftOut)
|
| 52 |
async def approve_draft(draft_id: int, payload: schemas.ApproveInput, db: Session = Depends(get_db)):
|
| 53 |
draft = db.get(models.Draft, draft_id)
|
|
|
|
| 65 |
db.add(draft); db.commit(); db.refresh(draft)
|
| 66 |
return draft
|
| 67 |
|
|
|
|
| 68 |
@router.get("/{draft_id}", response_model=schemas.DraftOut)
|
| 69 |
async def get_draft(draft_id: int, db: Session = Depends(get_db)):
|
| 70 |
draft = db.get(models.Draft, draft_id)
|
| 71 |
if not draft:
|
| 72 |
raise RuntimeError("not found")
|
| 73 |
+
return draft
|