Spaces:
Sleeping
Sleeping
File size: 2,558 Bytes
a957bcd 14fd956 d3af375 d32fe66 dce9570 c2e3603 b916cdf d3af375 b916cdf 1299710 dce9570 c2e3603 d3af375 c2e3603 d28c58d c2e3603 dce9570 2926b0b c73e7bc 4b5a56f dce9570 1299710 2926b0b 2d683a3 2926b0b d32fe66 c2e3603 a957bcd c2e3603 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
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"
@app.get("/")
async def read_root(request: Request):
return templates.TemplateResponse("index.html", {"request": request, "text": "server is running"})
# Определяем единственный POST endpoint
@app.post("/echo")
def echo_text(text_request: TextRequest):
# Просто возвращаем поле text из запроса
return {"echoed_text": text_request.text}
# Endpoint для загрузки файла
@app.post("/upload/")
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))
|