Coverage for src/dmxfy/cli/cli.py: 51%
55 statements
« prev ^ index » next coverage.py v7.10.1, created at 2025-08-12 11:38 +0800
« prev ^ index » next coverage.py v7.10.1, created at 2025-08-12 11:38 +0800
1import sys
2from typing import NoReturn, Any
4from prompt_toolkit import PromptSession
5from prompt_toolkit.history import FileHistory
6from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
7import os
9from dmxfy.client.client import TranslationClient
10from dmxfy.exceptions.exceptions import DMXFYException
13class CLI:
14 """Command-line interface for DMXFY"""
16 def __init__(self) -> None:
17 self.client = TranslationClient()
18 self.target_lang = "英语"
19 self.source_lang = "简体中文"
20 self.prompt_str = "汉译英> "
22 # Create history file path in user's home directory
23 history_file = os.path.expanduser("~/.dmxfy_history")
25 # Create prompt session with history
26 self.session: PromptSession[Any] = PromptSession(
27 history=FileHistory(history_file),
28 auto_suggest=AutoSuggestFromHistory(),
29 enable_history_search=True
30 )
32 def run(self) -> NoReturn:
33 """Run the CLI interface"""
34 print("Welcome to DMXFY - 大语言模型翻译器")
35 print("Type '\\e' to switch to English-to-Chinese translation")
36 print("Type '\\c' to switch to Chinese-to-English translation")
37 print("Press Ctrl+C or Ctrl+D to exit")
38 print("Use Up/Down arrow keys to navigate history")
39 print("Use Ctrl+R for reverse history search")
41 while True:
42 try:
43 text = self.session.prompt(self.prompt_str)
44 except KeyboardInterrupt:
45 print("\nGoodbye!")
46 sys.exit(0)
47 except EOFError:
48 print("\nGoodbye!")
49 sys.exit(0)
51 if text.startswith("\\e"):
52 self._switch_to_en_to_ch()
53 elif text.startswith("\\c"):
54 self._switch_to_ch_to_en()
55 else:
56 self._translate(text)
58 def _switch_to_en_to_ch(self) -> None:
59 """Switch to English-to-Chinese translation mode"""
60 self.target_lang = "简体中文"
61 self.source_lang = "英语"
62 self.prompt_str = "En2Ch> "
63 print("Translate English to Chinese")
65 def _switch_to_ch_to_en(self) -> None:
66 """Switch to Chinese-to-English translation mode"""
67 self.target_lang = "英语"
68 self.source_lang = "简体中文"
69 self.prompt_str = "汉译英> "
70 print("翻译成英文")
72 def _translate(self, text: str) -> None:
73 """Translate text and print the result"""
74 if not text.strip():
75 return
77 try:
78 result = self.client.translate(
79 text, source_lang=self.source_lang, target_lang=self.target_lang
80 )
81 print(result)
82 except DMXFYException as e:
83 print(f"Error: {e}", file=sys.stderr)