Quellcode für text_lint.operations.validators.validate_combine

"""ValidateCombine class."""

from typing import TYPE_CHECKING, List

from text_lint.config import SAVED_NAME_REGEX
from text_lint.operations.mixins.parameter_validation import (
    validator_factories,
)
from text_lint.operations.validators.args.lookup_expression import (
    LookupExpressionSetArg,
)
from text_lint.operations.validators.bases.validator_base import ValidatorBase
from text_lint.results.tree import ResultTree
from text_lint.utilities.translations import _, f

if TYPE_CHECKING:  # pragma: no cover
  from text_lint.linter.states import ValidatorState
  from text_lint.operations.validators.args.lookup_expression import (
      AliasYamlLookupExpressionSet,
  )
  from text_lint.results.forest import AliasLookupResult

YAML_EXAMPLE_COMPONENTS = (
    _("combine validator example"),
)
YAML_EXAMPLE = """

- name: {0}
  operation: validate_combine
  saved:
    - source1.capture(1)
    - source2.capture(1)
    - ~source3_name
  new_saved: new_source

""".format(*YAML_EXAMPLE_COMPONENTS)


[Doku] class ValidateCombine(ValidatorBase): """A validator to combine result lookups into a new save id.""" hint = _("combines a set of lookups into a new save id") operation = "validate_combine" yaml_example = YAML_EXAMPLE msg_fmt_combine = _("COMBINE: '{0}' into '{1}'")
[Doku] def __init__( self, name: str, new_saved: str, saved: "AliasYamlLookupExpressionSet", ) -> None: """Initialize ValidateCombine instances. :param name: The configured name of this validator. :param new_saved: The new saved id to create. :param saved: A list of YAML lookup expressions to evaluate. :raises: TypeError """ self.new_saved = new_saved super().__init__(name) self.new_tree = ResultTree.create(value=new_saved) self.saved_results = LookupExpressionSetArg.create(saved)
[Doku] class Parameters(ValidatorBase.Parameters): """Parameter validation for this operation.""" # pylint: disable=duplicate-code new_saved = { "type": str, "validators": [validator_factories.create_matches_regex(SAVED_NAME_REGEX)], }
[Doku] def apply(self, state: "ValidatorState") -> None: """Apply the ValidateCombine validator logic.""" for requested_lookup_to_combine in self.saved_results: result = state.lookup_expression(requested_lookup_to_combine) self._create_children(result, self.new_tree.children) state.log( f( self.msg_fmt_combine, requested_lookup_to_combine.name, self.new_tree.value, ), indent=True, ) state.save(self.new_tree)
def _create_children( self, result: "AliasLookupResult", created: List[ResultTree], ) -> None: if isinstance(result, str): instance = ResultTree.create(value=result) created.append(instance) else: for element in result: self._create_children(element, created)