# views.py
import time
import requests
from django.conf import settings
from django.http import HttpResponse, JsonResponse
API_URL = settings.FLASH_MD_API_URL # "https://api.markpdf.tech"
API_KEY = settings.FLASH_MD_API_KEY
def poll_job(job_id: str) -> str:
while True:
time.sleep(5)
res = requests.get(
f"{API_URL}/jobs/{job_id}",
headers={"x-api-key": API_KEY},
timeout=30,
)
data = res.json()
if data["status"] == "completed":
return data["body"]
if data["status"] == "failed":
raise Exception(data.get("error", "Job failed"))
def convert_document(request):
if request.method != "POST":
return JsonResponse({"error": "POST only"}, status=405)
uploaded = request.FILES.get("file")
if not uploaded:
return JsonResponse({"error": "Missing file"}, status=400)
res = requests.post(
f"{API_URL}/convert/raw",
params={"filename": uploaded.name, "mode": "fast"},
headers={
"x-api-key": API_KEY,
"content-type": uploaded.content_type or "application/octet-stream",
},
data=uploaded.read(),
timeout=300,
)
if res.status_code == 200:
return HttpResponse(res.text, content_type="text/markdown; charset=utf-8")
if res.status_code == 202:
job = res.json()
markdown = poll_job(job["job_id"])
return HttpResponse(markdown, content_type="text/markdown; charset=utf-8")
return HttpResponse(res.text, status=res.status_code)