diff --git a/src/cpl_cli/cli.py b/src/cpl_cli/cli.py index 3b121d9e..0ffc20c3 100644 --- a/src/cpl_cli/cli.py +++ b/src/cpl_cli/cli.py @@ -109,6 +109,10 @@ class CLI(ApplicationABC): 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 diff --git a/src/cpl_cli/command_handler_service.py b/src/cpl_cli/command_handler_service.py index 0f53df43..afb1e26a 100644 --- a/src/cpl_cli/command_handler_service.py +++ b/src/cpl_cli/command_handler_service.py @@ -1,4 +1,5 @@ import os +import subprocess from abc import ABC from typing import Optional @@ -6,6 +7,7 @@ from cpl.configuration.configuration_abc import ConfigurationABC from cpl.console.console import Console from cpl.dependency_injection.service_provider_abc import ServiceProviderABC from cpl.utils.string import String +from cpl_cli.command.custom_script_service import CustomScriptService from cpl_cli.configuration.workspace_settings import WorkspaceSettings from cpl_cli.error import Error from cpl_cli.command_model import CommandModel @@ -57,7 +59,6 @@ class CommandHandler(ABC): workspace: Optional[WorkspaceSettings] = None if os.path.isfile(os.path.join(self._env.working_directory, 'cpl-workspace.json')): - # self._config.add_json_file('cpl-workspace.json', optional=True, output=False) workspace = self._config.get_configuration(WorkspaceSettings) if command.is_project_needed: @@ -111,5 +112,27 @@ class CommandHandler(ABC): self._config.add_json_file(project_json, optional=True, output=False) - self._services.get_service(command.command).run(args) + # pre scripts Console.write('\n') + self._handle_pre_or_post_scripts(True, workspace, command) + self._services.get_service(command.command).run(args) + # post scripts + Console.write('\n\n') + self._handle_pre_or_post_scripts(False, workspace, command) + Console.write('\n') + + def _handle_pre_or_post_scripts(self, pre: bool, workspace: WorkspaceSettings, command: CommandModel): + script_type = 'pre-' if pre else 'post-' + if workspace is not None and len(workspace.scripts) > 0: + for script in workspace.scripts: + if script_type in script and script.split(script_type)[1] == command.name: + script_name = script + script_cmd = workspace.scripts[script] + if script_cmd in workspace.scripts: + script_name = workspace.scripts[script] + + css: CustomScriptService = self._services.get_service(CustomScriptService) + if css is None: + continue + + css.run([script_name])