"""Lookup expression YAML argument definitions."""
from typing import Dict, Iterator, List, Optional
from text_lint.operations.lookups.parsers.lookup_expressions import (
ParsedLookup,
parse_lookup_expression,
)
from text_lint.operations.mixins.parameter_validation import (
ParameterValidationMixin,
)
from text_lint.utilities.translations import _
AliasYamlLookupExpressionSet = List[str]
AliasResultOptions = Dict[str, Optional["AliasResultOptions"]]
[docs]
class LookupExpressionSetArg:
"""A set of YAML argument definitions for lookup expressions."""
msg_fmt_invalid_lookup_expression_set = _(
"The value '{0}' is not a valid set of lookup expressions"
)
[docs]
def __init__(self, lookup_expression_set: List["LookupExpression"]) -> None:
"""Instantiate LookupExpressionSetArg instances.
:param lookup_expression_set: A list of LookupExpression instances.
"""
self._lookup_expression_set = lookup_expression_set
[docs]
def __iter__(self) -> Iterator["LookupExpression"]:
"""Implement the iter operator for LookupExpressionSetArg instances.
:returns: An iterable traversing each contained lookup expression.
"""
return iter(self._lookup_expression_set)
[docs]
def __len__(self) -> int:
"""Implement the len operator for LookupExpressionSetArg instances.
:returns: The number of lookup expressions in this set.
"""
return len(self._lookup_expression_set)
[docs]
@classmethod
def create(
cls,
yaml_input: AliasYamlLookupExpressionSet,
) -> "LookupExpressionSetArg":
"""Create an instance from YAML input.
:param yaml_input: A list of lookup expressions from YAML.
:returns: The created instance.
"""
created_set = []
for yaml_set in yaml_input:
created_set.append(LookupExpression(yaml_set))
if not isinstance(yaml_input, (list, tuple)):
raise TypeError(
cls.msg_fmt_invalid_lookup_expression_set.format(yaml_input)
)
return cls(lookup_expression_set=created_set)
[docs]
class LookupExpression(ParameterValidationMixin):
"""A lookup expression definition."""
lookups: List[ParsedLookup]
name: str
source: str
[docs]
def __init__(
self,
lookup_expression: str,
) -> None:
"""Instantiate LookupExpression instances.
:param lookup_expression: A string representation of a lookup expression.
"""
self.name = lookup_expression
self.validate_parameters()
self.source, self.lookups = parse_lookup_expression(lookup_expression)
[docs]
class Parameters:
"""Validation configuration for this lookup expression's parameters."""
name = {"type": str}