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()