48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
import asyncio
|
|
import click
|
|
|
|
from greek_lang.container import init_main_container
|
|
from greek_lang.languages import LanguageEnum
|
|
from greek_lang.translator import translate
|
|
|
|
|
|
async def _translate(word: str, source_code: str, target_code: str) -> None:
|
|
try:
|
|
source_lang = LanguageEnum(source_code.lower())
|
|
target_lang = LanguageEnum(target_code.lower())
|
|
except KeyError as exc:
|
|
raise click.BadParameter(f"Unsupported language code: {exc.args[0]}") from exc
|
|
|
|
async with init_main_container():
|
|
result = await translate(word, source_lang, target_lang=target_lang)
|
|
|
|
click.echo(result)
|
|
|
|
|
|
@click.command(help="Перевод слова между языками библиотеки greek_lang.")
|
|
@click.argument("word")
|
|
@click.option(
|
|
"-s",
|
|
"--source",
|
|
"source_code",
|
|
default="el",
|
|
show_default=True,
|
|
type=click.Choice([lang.name for lang in LanguageEnum], case_sensitive=False),
|
|
help="Код исходного языка (ISO-639-1, как в LanguageEnum).",
|
|
)
|
|
@click.option(
|
|
"-t",
|
|
"--target",
|
|
"target_code",
|
|
default="ru",
|
|
show_default=True,
|
|
type=click.Choice([lang.name for lang in LanguageEnum], case_sensitive=False),
|
|
help="Код языка перевода (ISO-639-1, как в LanguageEnum).",
|
|
)
|
|
def cli(word: str, source_code: str, target_code: str) -> None:
|
|
"""Обёртка, которая запускает асинхронный перевод через asyncio."""
|
|
asyncio.run(_translate(word, source_code, target_code))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
cli() |