diff --git a/src/cpl_cli/_templates/generate/validator_template.py b/src/cpl_cli/_templates/generate/validator_template.py new file mode 100644 index 00000000..e5ed47a5 --- /dev/null +++ b/src/cpl_cli/_templates/generate/validator_template.py @@ -0,0 +1,41 @@ +import textwrap +from string import Template + +from cpl_core.utils.string import String +from cpl_cli._templates.template_file_abc import TemplateFileABC + + +class ValidatorTemplate(TemplateFileABC): + + def __init__(self, name: str, schematic: str, schematic_upper: str, path: str): + TemplateFileABC.__init__(self) + + self._name = f'{String.convert_to_snake_case(name)}_{schematic}.py' + self._class_name = f'{String.first_to_upper(name)}{schematic_upper}' + self._path = path + self._value = textwrap.dedent("""\ + from cpl_core.configuration.validator_abc import ValidatorABC + + + class $Name(ValidatorABC): + + def __init__(self): + ValidatorABC.__init__(self) + + def validate(self) -> bool: + return True + """) + + @property + def name(self) -> str: + return self._name + + @property + def path(self) -> str: + return self._path + + @property + def value(self) -> str: + return Template(self._value).substitute( + Name=self._class_name + ) diff --git a/src/cpl_cli/command/generate_service.py b/src/cpl_cli/command/generate_service.py index 1661a58c..4ec3dc86 100644 --- a/src/cpl_cli/command/generate_service.py +++ b/src/cpl_cli/command/generate_service.py @@ -2,6 +2,7 @@ import os import sys import textwrap +from cpl_cli._templates.generate.validator_template import ValidatorTemplate from cpl_core.configuration.configuration_abc import ConfigurationABC from cpl_core.console.foreground_color_enum import ForegroundColorEnum from cpl_core.console.console import Console @@ -50,6 +51,10 @@ class GenerateService(CommandABC): "thread": { "Upper": "Thread", "Template": ThreadTemplate + }, + "validator": { + "Upper": "Validator", + "Template": ValidatorTemplate } } @@ -73,6 +78,7 @@ class GenerateService(CommandABC): service settings thread + validator """) @staticmethod @@ -89,7 +95,9 @@ class GenerateService(CommandABC): 'class (c|C)', 'enum (e|E)', 'service (s|S)', - 'settings (st|ST)' + 'settings (st|ST)', + 'thread (t|T)', + 'validator (v|V)' ] Console.write_line('Available Schematics:') for name in schematics: diff --git a/src/cpl_cli/startup_argument_extension.py b/src/cpl_cli/startup_argument_extension.py index a9de79f2..026e572a 100644 --- a/src/cpl_cli/startup_argument_extension.py +++ b/src/cpl_cli/startup_argument_extension.py @@ -68,7 +68,8 @@ class StartupArgumentExtension(StartupExtensionABC): .add_console_argument(ArgumentTypeEnum.Variable, '', 'enum', ['e', 'E'], ' ') \ .add_console_argument(ArgumentTypeEnum.Variable, '', 'service', ['s', 'S'], ' ') \ .add_console_argument(ArgumentTypeEnum.Variable, '', 'settings', ['st', 'ST'], ' ') \ - .add_console_argument(ArgumentTypeEnum.Variable, '', 'thread', ['t', 't'], ' ') + .add_console_argument(ArgumentTypeEnum.Variable, '', 'thread', ['t', 'T'], ' ') \ + .add_console_argument(ArgumentTypeEnum.Variable, '', 'validator', ['v', 'V'], ' ') config.create_console_argument(ArgumentTypeEnum.Executable, '', 'install', ['i', 'I'], InstallService, True) \ .add_console_argument(ArgumentTypeEnum.Flag, '--', 'virtual', ['v', 'V']) \ .add_console_argument(ArgumentTypeEnum.Flag, '--', 'simulate', ['s', 'S']) diff --git a/src/cpl_core/configuration/configuration.py b/src/cpl_core/configuration/configuration.py index 96966d18..0e5acf8a 100644 --- a/src/cpl_core/configuration/configuration.py +++ b/src/cpl_core/configuration/configuration.py @@ -287,16 +287,17 @@ class Configuration(ConfigurationABC): if prevent: continue - abort = False - for validator_type in exe.validators: - validator: ValidatorABC = services.get_service(validator_type) - result = validator.validate() - abort = not result - if abort: - break + if exe.validators is not None: + abort = False + for validator_type in exe.validators: + validator: ValidatorABC = services.get_service(validator_type) + result = validator.validate() + abort = not result + if abort: + break - if abort: - continue + if abort: + continue cmd: CommandABC = services.get_service(exe.executable_type) self.add_configuration('ACTIVE_EXECUTABLE', exe.name)