daswer123's picture
Update app.py
83fdaf0 verified
import gradio as gr
from converter import MarkdownToDocxConverter
from datetime import datetime
import os
import requests
converter = MarkdownToDocxConverter()
def convert_markdown_to_docx(markdown_text: str, file_input: str, url_input: str):
# Приоритет: URL > Файл > Текст
if url_input:
try:
response = requests.get(url_input)
response.raise_for_status()
# Пытаемся получить "сырое" содержимое для таких сайтов, как GitHub Gist
if "gist.github.com" in url_input and not url_input.endswith("/raw"):
raw_url = url_input + "/raw"
response = requests.get(raw_url)
response.raise_for_status()
markdown_text = response.text
except requests.exceptions.RequestException as e:
raise gr.Error(f"Ошибка при скачивании файла по URL: {e}")
elif file_input:
with open(file_input.name, "r", encoding='utf-8') as file:
markdown_text = file.read()
if not markdown_text.strip():
raise gr.Error("Нет входных данных для конвертации. Введите текст, загрузите файл или укажите URL.")
output_dir = "output"
os.makedirs(output_dir, exist_ok=True)
output_filename = f"output_{datetime.now().strftime('%Y%m%d_%H%M%S')}.docx"
output_path = os.path.join(output_dir, output_filename)
converter.convert(markdown_text, output_path)
return output_path
demo = gr.Blocks(title="Markdown to DOCX Converter")
with demo:
gr.Markdown("# Markdown to DOCX Converter")
with gr.Row():
with gr.Column():
with gr.Tab("Текст"):
markdown_input = gr.TextArea(label="Markdown Input", value="", lines=15)
with gr.Tab("Файл"):
file_input = gr.File(label="Загрузите Markdown файл")
with gr.Tab("URL"):
url_input = gr.Textbox(label="Введите URL Markdown файла", placeholder="https://gist.github.com/...")
with gr.Column():
gr.Markdown("### Результат")
docx_output = gr.File(label="Скачать DOCX")
convert_button = gr.Button("Конвертировать", variant="primary")
convert_button.click(
convert_markdown_to_docx,
inputs=[markdown_input, file_input, url_input],
outputs=docx_output
)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0")