import os import sys from typing import Optional from cpl_core.application.application_abc import ApplicationABC from cpl_core.configuration.configuration_abc import ConfigurationABC from cpl_core.console.console import Console from cpl_core.dependency_injection import ServiceProviderABC from cpl_cli.command.add_service import AddService from cpl_cli.command.build_service import BuildService from cpl_cli.command.custom_script_service import CustomScriptService from cpl_cli.command.generate_service import GenerateService from cpl_cli.command.install_service import InstallService from cpl_cli.command.new_service import NewService from cpl_cli.command.publish_service import PublishService from cpl_cli.command.remove_service import RemoveService from cpl_cli.command.start_service import StartService from cpl_cli.command.uninstall_service import UninstallService from cpl_cli.command.update_service import UpdateService from cpl_cli.command_handler_service import CommandHandler from cpl_cli.command_model import CommandModel from cpl_cli.configuration.workspace_settings import WorkspaceSettings from cpl_cli.error import Error from cpl_cli.command.help_service import HelpService from cpl_cli.command.version_service import VersionService class CLI(ApplicationABC): def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): """ CPL CLI """ ApplicationABC.__init__(self, config, services) # self._command_handler: Optional[CommandHandler] = None self._options: list[str] = [] def configure(self): pass # self._command_handler: CommandHandler = self._services.get_service(CommandHandler) # # self._command_handler.add_command(CommandModel('add', ['a', 'a'], AddService, False, False, False)) # self._command_handler.add_command(CommandModel('build', ['b', 'B'], BuildService, False, True, True)) # self._command_handler.add_command(CommandModel('generate', ['g', 'G'], GenerateService, False, True, False)) # self._command_handler.add_command(CommandModel('help', ['h', 'H'], HelpService, False, False, False)) # self._command_handler.add_command(CommandModel('install', ['i', 'I'], InstallService, False, True, True)) # self._command_handler.add_command(CommandModel('new', ['n', 'N'], NewService, False, False, True)) # self._command_handler.add_command(CommandModel('publish', ['p', 'P'], PublishService, False, True, True)) # self._command_handler.add_command(CommandModel('remove', ['r', 'R'], RemoveService, True, True, False)) # self._command_handler.add_command(CommandModel('start', ['s', 'S'], StartService, False, True, True)) # self._command_handler.add_command(CommandModel('uninstall', ['ui', 'UI'], UninstallService, False, True, True)) # self._command_handler.add_command(CommandModel('update', ['u', 'U'], UpdateService, False, True, True)) # self._command_handler.add_command(CommandModel('version', ['v', 'V'], VersionService, False, False, False)) # # if os.path.isfile(os.path.join(self._environment.working_directory, 'cpl-workspace.json')): # workspace: Optional[WorkspaceSettings] = self._configuration.get_configuration(WorkspaceSettings) # for script in workspace.scripts: # self._command_handler.add_command(CommandModel(script, [], CustomScriptService, True, True, False)) # # self._command_handler.add_command(CommandModel('--help', ['-h', '-H'], HelpService, False, False, False)) # self._options.append('--help') def main(self): """ Entry point of the CPL CLI :return: """ try: pass # command = None # args = [] # if len(self._configuration.additional_arguments) > 0: # is_option = False # for opt in self._options: # if opt in self._configuration.additional_arguments: # is_option = True # command = opt # args = self._configuration.additional_arguments # args.remove(opt) # # if not is_option: # command = self._configuration.additional_arguments[0] # if len(self._configuration.additional_arguments) > 1: # args = self._configuration.additional_arguments[1:] # else: # for cmd in self._command_handler.commands: # result = self._configuration.get_configuration(cmd.name) # result_args: list[str] = self._configuration.get_configuration(f'{cmd.name}AdditionalArguments') # is_option = False # if result is None: # continue # # for opt in self._options: # if opt == result: # is_option = True # command = opt # # elif result_args is not None and opt in result_args: # is_option = True # command = opt # result_args.remove(opt) # # if is_option: # args.append(cmd.name) # if result_args is not None: # for arg in result_args: # args.append(arg) # # elif result is not None: # command = cmd.name # args.append(result) # # for arg in result_args: # args.append(arg) # # else: # Error.error(f'Unexpected command') # return # # if command is None: # Error.error(f'Expected command') # return # # self._command_handler.handle(command, args) except KeyboardInterrupt: Console.write_line() sys.exit()