Files
nimbusflow/backend/cli/main.py

93 lines
2.8 KiB
Python

"""
Main CLI coordination and entry point.
"""
import argparse
import sys
from .base import NimbusFlowCLI, CLIError
from .commands import (
# Member commands
cmd_members_list, cmd_members_show, setup_members_parser,
# Schedule commands
cmd_schedules_list, cmd_schedules_show, cmd_schedules_accept,
cmd_schedules_decline, setup_schedules_parser,
# Service commands
cmd_services_list, setup_services_parser,
)
def setup_parser() -> argparse.ArgumentParser:
"""Set up the command-line argument parser."""
parser = argparse.ArgumentParser(
prog="python -m backend.cli",
description="NimbusFlow CLI - Manage the scheduling system",
formatter_class=argparse.RawDescriptionHelpFormatter
)
subparsers = parser.add_subparsers(dest="command", help="Available commands")
# Set up all command parsers using the modular functions
setup_members_parser(subparsers)
setup_schedules_parser(subparsers)
setup_services_parser(subparsers)
return parser
def main():
"""Main CLI entry point."""
parser = setup_parser()
args = parser.parse_args()
if not args.command:
parser.print_help()
return
try:
cli = NimbusFlowCLI()
# Route commands to their respective handlers
if args.command == "members":
if args.members_action == "list":
cmd_members_list(cli, args)
elif args.members_action == "show":
cmd_members_show(cli, args)
else:
print("❌ Unknown members action. Use 'list' or 'show'")
elif args.command == "schedules":
if args.schedules_action == "list":
cmd_schedules_list(cli, args)
elif args.schedules_action == "show":
cmd_schedules_show(cli, args)
elif args.schedules_action == "accept":
cmd_schedules_accept(cli, args)
elif args.schedules_action == "decline":
cmd_schedules_decline(cli, args)
else:
print("❌ Unknown schedules action. Use 'list', 'show', 'accept', or 'decline'")
elif args.command == "services":
if args.services_action == "list":
cmd_services_list(cli, args)
else:
print("❌ Unknown services action. Use 'list'")
else:
print(f"❌ Unknown command: {args.command}")
except CLIError as e:
print(f"❌ Error: {e}")
return 1
except KeyboardInterrupt:
print("\n🛑 Interrupted by user")
return 1
except Exception as e:
print(f"❌ Unexpected error: {e}")
return 1
finally:
if 'cli' in locals():
cli.close()
return 0