Update routing
Browse files
main.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
| 1 |
import os
|
| 2 |
import requests
|
| 3 |
-
from fastapi import FastAPI, UploadFile, File, Form, Query, Request
|
|
|
|
| 4 |
from fastapi.middleware.cors import CORSMiddleware
|
| 5 |
from fastapi.concurrency import run_in_threadpool # <--- FIX: Added Threadpool
|
| 6 |
import uvicorn
|
|
@@ -54,7 +55,14 @@ async def proxy_process(request: Request, file: UploadFile = File(...), password
|
|
| 54 |
file_bytes = await file.read()
|
| 55 |
headers = {"Authorization": f"Bearer {HF_TOKEN}"}
|
| 56 |
files = {"file": (file.filename, file_bytes, file.content_type)}
|
| 57 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
|
| 59 |
# FIX: Define the blocking request
|
| 60 |
def make_post():
|
|
@@ -70,5 +78,58 @@ async def proxy_process(request: Request, file: UploadFile = File(...), password
|
|
| 70 |
except Exception as e:
|
| 71 |
return {"success": False, "message": f"Proxy Error (Internal): {str(e)}"}
|
| 72 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 73 |
if __name__ == "__main__":
|
| 74 |
-
uvicorn.run(app, host="0.0.0.0", port=int(os.getenv("PORT", 7860)))
|
|
|
|
| 1 |
import os
|
| 2 |
import requests
|
| 3 |
+
from fastapi import FastAPI, UploadFile, File, Form, Query, Request, Body
|
| 4 |
+
from fastapi.responses import Response
|
| 5 |
from fastapi.middleware.cors import CORSMiddleware
|
| 6 |
from fastapi.concurrency import run_in_threadpool # <--- FIX: Added Threadpool
|
| 7 |
import uvicorn
|
|
|
|
| 55 |
file_bytes = await file.read()
|
| 56 |
headers = {"Authorization": f"Bearer {HF_TOKEN}"}
|
| 57 |
files = {"file": (file.filename, file_bytes, file.content_type)}
|
| 58 |
+
form = await request.form()
|
| 59 |
+
data = {}
|
| 60 |
+
for key, value in form.multi_items():
|
| 61 |
+
if key == "file" or hasattr(value, "filename"):
|
| 62 |
+
continue
|
| 63 |
+
data[key] = str(value)
|
| 64 |
+
data.setdefault("password", password)
|
| 65 |
+
data.setdefault("username", username)
|
| 66 |
|
| 67 |
# FIX: Define the blocking request
|
| 68 |
def make_post():
|
|
|
|
| 78 |
except Exception as e:
|
| 79 |
return {"success": False, "message": f"Proxy Error (Internal): {str(e)}"}
|
| 80 |
|
| 81 |
+
|
| 82 |
+
@app.post("/proxy_batch_stage")
|
| 83 |
+
async def proxy_batch_stage(payload: dict = Body(...)):
|
| 84 |
+
username = str(payload.get("username", ""))
|
| 85 |
+
base_url = DEV_URL if username.strip().lower() == "devtest" else PROD_URL
|
| 86 |
+
target_url = f"{base_url}/batch_stage"
|
| 87 |
+
headers = {"Authorization": f"Bearer {HF_TOKEN}"}
|
| 88 |
+
|
| 89 |
+
def make_post():
|
| 90 |
+
return requests.post(target_url, headers=headers, json=payload, timeout=120)
|
| 91 |
+
|
| 92 |
+
try:
|
| 93 |
+
response = await run_in_threadpool(make_post)
|
| 94 |
+
response.raise_for_status()
|
| 95 |
+
return response.json()
|
| 96 |
+
except requests.exceptions.RequestException as e:
|
| 97 |
+
return {"success": False, "message": f"Proxy Error (Hugging Face): {str(e)}", "rows": []}
|
| 98 |
+
except Exception as e:
|
| 99 |
+
return {"success": False, "message": f"Proxy Error (Internal): {str(e)}", "rows": []}
|
| 100 |
+
|
| 101 |
+
|
| 102 |
+
@app.get("/proxy_preview/{session_id}/{row_id}/{preview_type}")
|
| 103 |
+
async def proxy_preview(session_id: str, row_id: str, preview_type: str, username: str = Query(""), size: str = Query("thumb")):
|
| 104 |
+
base_url = DEV_URL if username.strip().lower() == "devtest" else PROD_URL
|
| 105 |
+
target_url = f"{base_url}/preview/{session_id}/{row_id}/{preview_type}"
|
| 106 |
+
headers = {"Authorization": f"Bearer {HF_TOKEN}"}
|
| 107 |
+
|
| 108 |
+
def make_get():
|
| 109 |
+
return requests.get(target_url, headers=headers, params={"size": size}, timeout=30)
|
| 110 |
+
|
| 111 |
+
response = await run_in_threadpool(make_get)
|
| 112 |
+
if response.status_code >= 400:
|
| 113 |
+
return Response(content=response.content, status_code=response.status_code, media_type=response.headers.get("content-type", "text/plain"))
|
| 114 |
+
return Response(content=response.content, media_type=response.headers.get("content-type", "image/jpeg"))
|
| 115 |
+
|
| 116 |
+
|
| 117 |
+
@app.post("/proxy_preview_session_clear")
|
| 118 |
+
async def proxy_preview_session_clear(payload: dict = Body(...)):
|
| 119 |
+
username = str(payload.get("username", ""))
|
| 120 |
+
base_url = DEV_URL if username.strip().lower() == "devtest" else PROD_URL
|
| 121 |
+
target_url = f"{base_url}/preview_session/clear"
|
| 122 |
+
headers = {"Authorization": f"Bearer {HF_TOKEN}"}
|
| 123 |
+
|
| 124 |
+
def make_post():
|
| 125 |
+
return requests.post(target_url, headers=headers, json=payload, timeout=20)
|
| 126 |
+
|
| 127 |
+
try:
|
| 128 |
+
response = await run_in_threadpool(make_post)
|
| 129 |
+
response.raise_for_status()
|
| 130 |
+
return response.json()
|
| 131 |
+
except Exception as e:
|
| 132 |
+
return {"success": False, "message": f"Proxy Error: {str(e)}"}
|
| 133 |
+
|
| 134 |
if __name__ == "__main__":
|
| 135 |
+
uvicorn.run(app, host="0.0.0.0", port=int(os.getenv("PORT", 7860)))
|