sh_cpl/src/cpl_cli/command_handler.py

34 lines
1.2 KiB
Python
Raw Normal View History

2021-03-08 22:29:28 +01:00
import os
2021-03-04 07:18:36 +01:00
from cpl.application.application_runtime_abc import ApplicationRuntimeABC
2021-03-03 19:37:35 +01:00
from cpl.dependency_injection.service_abc import ServiceABC
2021-03-08 22:02:16 +01:00
from cpl.dependency_injection.service_provider_abc import ServiceProviderABC
2021-03-08 22:29:28 +01:00
from cpl_cli.error import Error
2021-03-04 19:06:53 +01:00
from cpl_cli.command_model import CommandModel
2021-03-03 19:37:35 +01:00
class CommandHandler(ServiceABC):
2021-03-04 19:06:53 +01:00
def __init__(self, runtime: ApplicationRuntimeABC, services: ServiceProviderABC):
2021-03-03 19:37:35 +01:00
ServiceABC.__init__(self)
2021-03-04 07:18:36 +01:00
self._runtime = runtime
2021-03-04 19:06:53 +01:00
self._services = services
2021-03-04 07:18:36 +01:00
2021-03-04 19:06:53 +01:00
self._commands: list[CommandModel] = []
2021-03-03 19:37:35 +01:00
2021-03-04 19:06:53 +01:00
def add_command(self, cmd: CommandModel):
2021-03-03 19:37:35 +01:00
self._commands.append(cmd)
2021-03-04 19:06:53 +01:00
def remove_command(self, cmd: CommandModel):
2021-03-03 19:37:35 +01:00
self._commands.remove(cmd)
def handle(self, cmd: str, args: list[str]):
for command in self._commands:
if cmd == command.name or cmd in command.aliases:
2021-03-08 22:29:28 +01:00
if command.is_project_needed and not os.path.isfile(os.path.join(self._runtime.working_directory, 'cpl.json')):
Error.error('The command requires to be run in an CPL project, but a project could not be found.')
return
2021-03-04 19:06:53 +01:00
self._services.get_service(command.command).run(args)