"""LookupBase class."""
import abc
from typing import TYPE_CHECKING, List, Union
from text_lint.exceptions.lookups import LookupFailure
from text_lint.operations.bases.operation_base import OperationBase
from text_lint.operations.mixins.parameter_validation import (
ParameterValidationMixin,
validator_factories,
)
from text_lint.utilities.translations import _, f
if TYPE_CHECKING: # pragma: no cover
from text_lint.linter import states
from text_lint.operations.validators.args.lookup_expression import (
LookupExpression,
)
AliasLookupParams = List[Union[int, str]]
[Doku]
class LookupBase(
OperationBase["states.LookupState"],
ParameterValidationMixin,
abc.ABC,
):
"""Lookup operation base class."""
is_positional = False
msg_fmt_invalid_parameters = _("Received invalid parameters: '{0}' !")
[Doku]
def __init__(
self,
lookup_name: str,
lookup_expression: "LookupExpression",
lookup_params: "AliasLookupParams",
requesting_operation_name: str,
) -> None:
"""Initialize LookupBase instances.
:param lookup_name: The name of this lookup operation.
:param lookup_expression: The lookup expression this lookup is a part of.
:param lookup_params: The parameters being used with this lookup operation.
:param requesting_operation_name: The name of the validation operation.
:raises: LookupFailure
"""
self.lookup_name = lookup_name
self.lookup_expression = lookup_expression
self.lookup_params = lookup_params
self.requesting_operation_name = requesting_operation_name
self.validate_parameters()
[Doku]
class Parameters:
"""Parameter validation for this operation."""
lookup_name = {"type": str}
lookup_params = {
"type":
list,
"validators":
[validator_factories.create_is_equal(
0,
conversion_function=len,
),],
}
[Doku]
@abc.abstractmethod
def apply(
self,
state: "states.LookupState",
) -> None:
"""Apply this operation to the given state object.
:param state: The state object to apply this operation to.
:raises: LookupFailure
"""
[Doku]
def validate_parameters(self) -> None:
"""Validate the operation's parameters.
:raises: LookupFailure
"""
try:
super().validate_parameters()
except TypeError as exc:
raise LookupFailure(
translated_description=f(
self.msg_fmt_invalid_parameters,
self.lookup_params,
nl=1,
),
lookup=self,
) from exc