Coverage for src / mysingle / cli / __main__.py: 0%

53 statements  

« prev     ^ index     » next       coverage.py v7.12.0, created at 2025-12-02 00:58 +0900

1""" 

2MySingle CLI - 통합 명령줄 도구. 

3 

4현재 제공 기능: 

5- 버전 관리 

6- Proto 관리 

7 

8향후 확장: 패키지 관리, 서비스 스캐폴딩 등 

9""" 

10 

11from __future__ import annotations 

12 

13import argparse 

14import sys 

15 

16from .utils import console, print_error, print_header, print_info 

17 

18 

19def show_interactive_menu() -> int: 

20 """대화형 메뉴를 표시하고 사용자 선택을 처리합니다.""" 

21 from rich.prompt import Prompt 

22 

23 print_header("🚀 MySingle CLI") 

24 

25 console.print("[cyan]사용 가능한 명령:[/cyan]\n") 

26 console.print(" [green]1.[/green] version - 패키지 버전 관리") 

27 console.print(" [green]2.[/green] proto - Proto 파일 관리") 

28 console.print(" [green]3.[/green] help - 도움말 표시") 

29 console.print(" [green]q.[/green] quit - 종료\n") 

30 

31 choice = Prompt.ask("명령을 선택하세요", choices=["1", "2", "3", "q"], default="q") 

32 

33 if choice == "q": 

34 print_info("종료합니다.") 

35 return 0 

36 elif choice == "1": 

37 # Version subcommand interactive mode 

38 from .core import version as version_cmd 

39 

40 return version_cmd.execute_interactive() 

41 elif choice == "2": 

42 # Proto subcommand - redirect to mysingle-proto 

43 print_info("Proto 관리는 'mysingle-proto' 명령을 사용하세요.") 

44 console.print("\n예시:") 

45 console.print(" mysingle-proto init") 

46 console.print(" mysingle-proto generate") 

47 console.print(" mysingle-proto status\n") 

48 return 0 

49 elif choice == "3": 

50 # Show help 

51 main_with_args(["--help"]) 

52 return 0 

53 

54 return 0 

55 

56 

57def main_with_args(argv: list[str] | None = None) -> int: 

58 """명령줄 인자를 처리하는 메인 함수.""" 

59 parser = argparse.ArgumentParser( 

60 prog="mysingle", 

61 description="MySingle 플랫폼 CLI", 

62 formatter_class=argparse.RawDescriptionHelpFormatter, 

63 ) 

64 

65 subparsers = parser.add_subparsers(dest="command", help="사용 가능한 명령") 

66 

67 # Version command 

68 from .core import version as version_cmd 

69 

70 version_parser = subparsers.add_parser( 

71 "version", 

72 help="패키지 버전 관리", 

73 description="패키지 버전을 업데이트하고 릴리즈를 생성합니다", 

74 ) 

75 version_cmd.setup_parser(version_parser) 

76 

77 # Parse arguments 

78 args = parser.parse_args(argv) 

79 

80 if not args.command: 

81 return show_interactive_menu() 

82 

83 # Execute command 

84 if args.command == "version": 

85 return version_cmd.execute(args) 

86 

87 return 0 

88 

89 

90def main() -> int: 

91 """메인 진입점.""" 

92 try: 

93 return main_with_args() 

94 except KeyboardInterrupt: 

95 print_error("\n사용자에 의해 중단되었습니다.") 

96 return 130 

97 except Exception as e: 

98 print_error(f"예상치 못한 오류가 발생했습니다: {e}") 

99 return 1 

100 

101 

102if __name__ == "__main__": 

103 sys.exit(main())