Spaces:
Sleeping
Sleeping
from fastapi import FastAPI, HTTPException, Body, Request, File, UploadFile, BackgroundTasks | |
from pydantic import BaseModel | |
import logging | |
from fastapi.responses import JSONResponse | |
from fastapi.templating import Jinja2Templates | |
import httpx | |
# Настройка логгера | |
logger = logging.getLogger(__name__) | |
logger.setLevel(logging.INFO) | |
# Создание обработчика для вывода в консоль | |
console_handler = logging.StreamHandler() | |
console_handler.setLevel(logging.INFO) | |
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') | |
console_handler.setFormatter(formatter) | |
logger.addHandler(console_handler) | |
app = FastAPI() | |
# Определяем модель данных для запроса | |
class TextRequest(BaseModel): | |
text: str | |
# Подключаем шаблоны Jinja2 | |
templates = Jinja2Templates(directory="templates") | |
async def send_post_request(url: str, filename: str): | |
logger.info(f"POST request must be sent to {url} with filename: {filename}") | |
try: | |
async with httpx.AsyncClient() as client: | |
response = await client.post(url, data={"text": filename}) | |
# Проверяем статус код ответа | |
if response.status_code != 200: | |
raise HTTPException(status_code=response.status_code, detail="Request failed") | |
except Exception as e: | |
raise HTTPException(status_code=500, detail=f"Failed to send POST request: {str(e)}") | |
# Главная страница с текстом "server is running" | |
async def read_root(request: Request): | |
return templates.TemplateResponse("index.html", {"request": request, "text": "server is running"}) | |
# Определяем единственный POST endpoint | |
def echo_text(text_request: TextRequest): | |
# Просто возвращаем поле text из запроса | |
return {"echoed_text": text_request.text} | |
# Endpoint для загрузки файла | |
async def upload_file_and_post(file: UploadFile = File(...), url: str = "", background_tasks: BackgroundTasks = BackgroundTasks()): | |
try: | |
# Добавляем задачу на отправку POST запроса в фоновые задачи | |
background_tasks.add_task(send_post_request, url, file.filename) | |
# Возвращаем имя файла в ответе | |
return JSONResponse(content={"filename": file.filename}) | |
except Exception as e: | |
raise HTTPException(status_code=500, detail=str(e)) | |