from urllib.parse import urljoin from fastapi import HTTPException, UploadFile from httpx import AsyncClient, Response from app.config import settings async def upload_file(file: UploadFile, remote_server_url: str) -> Response: try: file_content = await file.read() async with AsyncClient() as ac: response = await ac.post( remote_server_url, files={"file": file_content}, timeout=20, ) if response.status_code != 200: raise HTTPException(status_code=response.status_code, detail=response.json()["detail"]) return response except Exception as e: raise HTTPException(status_code=500, detail=str(e)) async def upload_file_returning_str(file: UploadFile, sub_str: str) -> str: remote_server_url = urljoin(settings.IMAGE_UPLOAD_SERVER, sub_str) response = await upload_file(file, remote_server_url) image_url = response.json()["image_url"] image_url = urljoin(settings.IMAGE_UPLOAD_SERVER, image_url) return image_url