"""Exceptions for the linter lookup operations."""
from typing import TYPE_CHECKING
from text_lint.config import LOOKUP_STATIC_VALUE_MARKER
from text_lint.utilities.translations import _, f
from text_lint.utilities.whitespace import make_visible
if TYPE_CHECKING: # pragma: no cover
from text_lint.operations.lookups.bases.lookup_base import LookupBase
[Doku]
class LookupExceptionBase(ValueError):
"""Base class for lookup exceptions."""
[Doku]
class LookupFailure(LookupExceptionBase):
"""Raised when a lookup operation fails."""
msg_fmt_lookup_operation = _(" LOOKUP OPERATION: {0}")
msg_fmt_schema_operation_name = _(" SCHEMA OPERATION NAME: {0}")
msg_fmt_lookup_definition = _(" LOOKUP DEFINITION:")
msg_fmt_result_source = _(" SAVE ID: '{0}'")
msg_fmt_lookups = _(" LOOKUPS: {0}")
msg_fmt_failed_lookup = _(" FAILED LOOKUP: '{0}'")
msg_fmt_hint = _(" HINT: '{0}'")
[Doku]
def __init__(
self,
translated_description: str,
lookup: "LookupBase",
) -> None:
"""Initialize LookupFailure exceptions.
:param translated_description: A translated description of the failure.
:param lookup: The lookup operation encountering the failure.
"""
message = translated_description
message += f(
self.msg_fmt_lookup_operation,
lookup.__class__.__name__,
nl=1,
)
message += f(
self.msg_fmt_schema_operation_name,
make_visible(lookup.requesting_operation_name),
nl=1,
)
message += f(
self.msg_fmt_lookup_definition,
nl=1,
)
message += f(
self.msg_fmt_result_source,
make_visible(lookup.lookup_expression.source),
nl=1,
)
message += f(
self.msg_fmt_lookups,
make_visible(
[
parsed_lookup.name
for parsed_lookup in lookup.lookup_expression.lookups
]
),
nl=1,
)
message += f(
self.msg_fmt_failed_lookup,
make_visible(lookup.lookup_name),
nl=1,
)
message += f(
self.msg_fmt_hint,
lookup.hint,
nl=1,
)
super().__init__(message)
[Doku]
class LookupSyntaxInvalid(LookupExceptionBase):
"""Raised when a malformed lookup is parsed."""
[Doku]
class LookupUnknown(LookupExceptionBase):
"""Raised when an unknown lookup is encountered."""
msg_fmt_lookup_unknown_description = _(
"Could not process this unknown lookup."
)
msg_fmt_lookup_operation = _(" LOOKUP OPERATION: {0}")
msg_fmt_schema_operation_name = _(" SCHEMA OPERATION NAME: {0}")
msg_fmt_lookup_definition = _(" LOOKUP DEFINITION:")
msg_fmt_result_source = _(" SAVE ID: '{0}'")
msg_fmt_lookups = _(" LOOKUPS: {0}")
msg_fmt_failed_lookup = _(" FAILED LOOKUP: '{0}'")
msg_fmt_hint = _(" HINT: '{0}'")
msg_fmt_lookup_unknown_hint = _(
"to lookup a specific value, prefix the name with '{0}'"
)
[Doku]
def __init__(
self,
lookup: "LookupBase",
) -> None:
"""Initialize LookupUnknown exceptions.
:param lookup: The lookup operation encountering the unknown lookup type.
"""
message = f(
self.msg_fmt_lookup_unknown_description,
nl=1,
)
message += f(
self.msg_fmt_lookup_operation,
lookup.__class__.__name__,
nl=1,
)
message += f(
self.msg_fmt_schema_operation_name,
make_visible(lookup.requesting_operation_name),
nl=1,
)
message += f(
self.msg_fmt_lookup_definition,
nl=1,
)
message += f(
self.msg_fmt_result_source,
make_visible(lookup.lookup_expression.source),
nl=1,
)
message += f(
self.msg_fmt_lookups,
make_visible(
[
parsed_lookup.name
for parsed_lookup in lookup.lookup_expression.lookups
]
),
nl=1,
)
message += f(
self.msg_fmt_failed_lookup,
make_visible(lookup.lookup_name),
nl=1,
)
message += f(
self.msg_fmt_hint,
self.msg_fmt_lookup_unknown_hint.format(LOOKUP_STATIC_VALUE_MARKER),
nl=1,
)
super().__init__(message)