gradio-deepl / app.py
ffreemt
Update split_text, >5000 chars OK
22ba884
"""Failed attempt to fix "This event loop is already running" in Widows:
from platform import platform
if platform().lower().startswith("windows"):
from install import install
try:
import nest_asyncio
except ModuleNotFoundError:
try:
install("nest-asyncio")
import nest_asyncio
except Exception as exc:
print(exc)
raise SystemExit(1)
nest_asyncio.apply()
from gevent import monkey
monkey.patch_all()
# """
# pylint: disable=broad-except
# from gevent import monkey
# monkey.patch_all()
# import nest_asyncio
# nest_asyncio.apply()
import asyncio
from multiprocessing import Process # , freeze_support
import gradio as gr
import httpx
# from deepl_fastapi.run_uvicorn import main
# from deepl_fastapi_pw.run_uvicorn_async import main
from deepl_fastapi_pw.deepl_server_async import main
from logzero import logger
# from deepl_scraper_pw.deepl_tr import deepl_tr
from split_text import split_text
arun = asyncio.get_event_loop().run_until_complete
def deepl(text, from_lang, to_lang):
"""Translate."""
try:
text = str(text).strip()
except Exception:
text = ""
if not text:
return "Put something there, man."
# "http://127.0.0.1:8000/text/?q=test%20me&to_lang=zh"
url = "http://127.0.0.1:8000/text/"
url = "http://127.0.0.1:8001/text/"
res_tot = ""
text_tot = text[:]
slash = "_slash_"
text_tot = text_tot.replace("/", slash)
_ = split_text(text_tot)
len_ = len(_)
logger.info("Split to %s", len_)
for idx, chunk in enumerate(_):
logger.info("%s/%s", idx + 1, len_)
try:
# resp = httpx.get(f"{url}?q={text}&from_lang={from_lang}&to_lang={to_lang}")
resp = httpx.post(
url,
json={
"text": chunk,
"from_lang": from_lang,
"to_lang": to_lang,
},
timeout=90,
)
resp.raise_for_status()
except Exception as exc:
logger.error(exc)
return str(exc)
try:
jdata = resp.json()
except Exception as exc:
logger.error(exc)
return str(exc)
try:
# res = jdata.get("trtext")
res = jdata.get("result")
except Exception as exc:
logger.error(exc)
res = str(exc)
if res_tot:
res_tot = res_tot + "\n" + res
else:
res_tot = res
_ = """
try:
# _ = deepl_tr(text, from_lang, to_lang)
_ = arun(deepl_tr(text, from_lang, to_lang))
except Exception as exc:
logger.error(exc)
return str(exc)
# """
# return res
res_tot = res_tot.replace(slash, "/")
return res_tot
if __name__ == "__main__":
# freeze_support()
Process(target=main).start()
iface = gr.Interface(
fn=deepl,
inputs=[
gr.Textbox(
placeholder="Paste text here (not limited to 5000 chars)",
lines=7,
),
gr.Textbox(label="from_lang", value="en", lines=1),
gr.Textbox(label="to_lang", value="zh", lines=1),
],
outputs="textarea",
allow_flagging="never",
)
iface.launch()