Improved help command
This commit is contained in:
		@@ -1,5 +1,5 @@
 | 
			
		||||
import sys
 | 
			
		||||
import textwrap
 | 
			
		||||
from typing import Optional
 | 
			
		||||
 | 
			
		||||
from cpl_core.console.console import Console
 | 
			
		||||
from cpl_core.console.foreground_color_enum import ForegroundColorEnum
 | 
			
		||||
@@ -21,10 +21,7 @@ class HelpService(CommandABC):
 | 
			
		||||
    def help_message(self) -> str:
 | 
			
		||||
        return textwrap.dedent("""\
 | 
			
		||||
        Lists available command and their short descriptions.
 | 
			
		||||
        Usage: cpl help <command>
 | 
			
		||||
        
 | 
			
		||||
        Arguments:
 | 
			
		||||
            command     The command to display the help message for
 | 
			
		||||
        Usage: cpl help
 | 
			
		||||
        """)
 | 
			
		||||
 | 
			
		||||
    def run(self, args: list[str]):
 | 
			
		||||
@@ -33,20 +30,9 @@ class HelpService(CommandABC):
 | 
			
		||||
        :param args:
 | 
			
		||||
        :return:
 | 
			
		||||
        """
 | 
			
		||||
        # if len(args) > 0:
 | 
			
		||||
        #     command_name = args[0]
 | 
			
		||||
        #     command: Optional[CommandABC] = None
 | 
			
		||||
        #     for cmd in self._commands:
 | 
			
		||||
        #         if cmd.name == command_name or command_name in cmd.aliases:
 | 
			
		||||
        #             command = self._services.get_service(cmd.command)
 | 
			
		||||
        #
 | 
			
		||||
        #     if command is None:
 | 
			
		||||
        #         Console.error(f'Invalid argument: {command_name}')
 | 
			
		||||
        #         return
 | 
			
		||||
        #
 | 
			
		||||
        #     Console.write_line(command.help_message)
 | 
			
		||||
        #
 | 
			
		||||
        #     return
 | 
			
		||||
        if len(args) > 0:
 | 
			
		||||
            Console.error(f'Unexpected argument(s): {", ".join(args)}')
 | 
			
		||||
            sys.exit()
 | 
			
		||||
 | 
			
		||||
        Console.write_line('Available Commands:')
 | 
			
		||||
        commands = [
 | 
			
		||||
@@ -68,3 +54,4 @@ class HelpService(CommandABC):
 | 
			
		||||
            Console.write(f'\n\t{name} ')
 | 
			
		||||
            Console.set_foreground_color(ForegroundColorEnum.default)
 | 
			
		||||
            Console.write(f'{description}')
 | 
			
		||||
        Console.write_line('\nRun \'cpl <command> --help\' for command specific information\'s')
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
from abc import abstractmethod, ABC
 | 
			
		||||
 | 
			
		||||
from cpl_core.configuration.executable_argument import ExecutableArgument
 | 
			
		||||
from cpl_core.console import Console
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CommandABC(ExecutableArgument):
 | 
			
		||||
@@ -12,3 +13,14 @@ class CommandABC(ExecutableArgument):
 | 
			
		||||
    @property
 | 
			
		||||
    @abstractmethod
 | 
			
		||||
    def help_message(self) -> str: pass
 | 
			
		||||
 | 
			
		||||
    def execute(self, args: list[str]):
 | 
			
		||||
        Console.write_line(args)
 | 
			
		||||
        if 'help' in args:
 | 
			
		||||
            Console.write_line(self.help_message)
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        self.run(args)
 | 
			
		||||
 | 
			
		||||
    @abstractmethod
 | 
			
		||||
    def run(self, args: list[str]): pass
 | 
			
		||||
 
 | 
			
		||||
@@ -1,18 +1,5 @@
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
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.help_service import HelpService
 | 
			
		||||
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.version_service import VersionService
 | 
			
		||||
from cpl_cli.error import Error
 | 
			
		||||
from cpl_cli.live_server.live_server_service import LiveServerService
 | 
			
		||||
from cpl_cli.publish.publisher_abc import PublisherABC
 | 
			
		||||
@@ -43,18 +30,4 @@ class Startup(StartupABC):
 | 
			
		||||
        services.add_transient(PublisherABC, PublisherService)
 | 
			
		||||
        services.add_transient(LiveServerService)
 | 
			
		||||
 | 
			
		||||
        services.add_transient(AddService)
 | 
			
		||||
        services.add_transient(BuildService)
 | 
			
		||||
        services.add_transient(CustomScriptService)
 | 
			
		||||
        services.add_transient(GenerateService)
 | 
			
		||||
        services.add_transient(HelpService)
 | 
			
		||||
        services.add_transient(InstallService)
 | 
			
		||||
        services.add_transient(NewService)
 | 
			
		||||
        services.add_transient(PublishService)
 | 
			
		||||
        services.add_transient(RemoveService)
 | 
			
		||||
        services.add_transient(StartService)
 | 
			
		||||
        services.add_transient(UninstallService)
 | 
			
		||||
        services.add_transient(UpdateService)
 | 
			
		||||
        services.add_transient(VersionService)
 | 
			
		||||
 | 
			
		||||
        return services.build_service_provider()
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
import os
 | 
			
		||||
from typing import Optional
 | 
			
		||||
 | 
			
		||||
from cpl_cli import CommandABC
 | 
			
		||||
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
 | 
			
		||||
@@ -87,11 +88,23 @@ class StartupArgumentExtension(StartupExtensionABC):
 | 
			
		||||
        config.create_console_argument(ArgumentTypeEnum.Executable, '', 'version', ['v', 'V'], VersionService)
 | 
			
		||||
 | 
			
		||||
        config.for_each_argument(
 | 
			
		||||
            lambda a: a.add_console_argument(ArgumentTypeEnum.Executable, '--', 'help', ['h', 'H'], HelpService)
 | 
			
		||||
            lambda a: a.add_console_argument(ArgumentTypeEnum.Flag, '--', 'help', ['h', 'H'])
 | 
			
		||||
        )
 | 
			
		||||
        config.create_console_argument(ArgumentTypeEnum.Executable, '', 'help', ['h', 'H'], HelpService)
 | 
			
		||||
 | 
			
		||||
        self._read_cpl_environment(config, env)
 | 
			
		||||
 | 
			
		||||
    def configure_services(self, service: ServiceCollectionABC, env: ApplicationEnvironmentABC):
 | 
			
		||||
        pass
 | 
			
		||||
    def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC):
 | 
			
		||||
        services.add_transient(CommandABC, AddService)
 | 
			
		||||
        services.add_transient(CommandABC, BuildService)
 | 
			
		||||
        services.add_transient(CommandABC, CustomScriptService)
 | 
			
		||||
        services.add_transient(CommandABC, GenerateService)
 | 
			
		||||
        services.add_transient(CommandABC, HelpService)
 | 
			
		||||
        services.add_transient(CommandABC, InstallService)
 | 
			
		||||
        services.add_transient(CommandABC, NewService)
 | 
			
		||||
        services.add_transient(CommandABC, PublishService)
 | 
			
		||||
        services.add_transient(CommandABC, RemoveService)
 | 
			
		||||
        services.add_transient(CommandABC, StartService)
 | 
			
		||||
        services.add_transient(CommandABC, UninstallService)
 | 
			
		||||
        services.add_transient(CommandABC, UpdateService)
 | 
			
		||||
        services.add_transient(CommandABC, VersionService)
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ import sys
 | 
			
		||||
from collections.abc import Callable
 | 
			
		||||
from typing import Union, Type, Optional
 | 
			
		||||
 | 
			
		||||
from cpl_cli.command_abc import CommandABC
 | 
			
		||||
from cpl_core.configuration.argument_abc import ArgumentABC
 | 
			
		||||
from cpl_core.configuration.argument_builder import ArgumentBuilder
 | 
			
		||||
from cpl_core.configuration.argument_type_enum import ArgumentTypeEnum
 | 
			
		||||
@@ -281,6 +282,5 @@ class Configuration(ConfigurationABC):
 | 
			
		||||
        self._parse_arguments(executables, arg_list, self._argument_types)
 | 
			
		||||
 | 
			
		||||
        for exe in executables:
 | 
			
		||||
            service: ExecutableArgument = services.get_service(exe.executable_type)
 | 
			
		||||
            service.run(self._additional_arguments)
 | 
			
		||||
 | 
			
		||||
            cmd: CommandABC = services.get_service(exe.executable_type)
 | 
			
		||||
            cmd.execute(self._additional_arguments)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user