Skip to content

jinja

jinja

Jinja template remedies for self-healing.

Provides suggested fixes for Jinja template errors: - SuggestJinjaFixRemedy: Suggests fixes for common template issues

Attributes

Classes

SuggestJinjaFixRemedy

Bases: BaseRemedy

Suggests fixes for Jinja template errors.

Triggers when: - Error relates to Jinja template rendering - Error message contains template syntax or undefined variable info

This is a SUGGESTED remedy because: - Fixing templates requires modifying config files - User should verify the suggested fix is correct

Functions
diagnose
diagnose(context)

Check for Jinja template issues.

Source code in src/marianne/healing/remedies/jinja.py
def diagnose(self, context: "ErrorContext") -> Diagnosis | None:
    """Check for Jinja template issues."""
    # Check for Jinja-related error codes
    jinja_codes = ("E304", "E305", "E201")  # Template errors
    # Also check message patterns
    if (
        context.error_code not in jinja_codes
        and not self._is_jinja_error(context.error_message)
    ):
        return None

    # Try to identify specific Jinja issues
    diagnosis = self._diagnose_syntax_error(context)
    if diagnosis:
        return diagnosis

    diagnosis = self._diagnose_undefined_variable(context)
    if diagnosis:
        return diagnosis

    diagnosis = self._diagnose_unclosed_block(context)
    if diagnosis:
        return diagnosis

    return None
apply
apply(context)

This remedy only suggests - user must manually fix.

The actual fix requires modifying the config file, which should be done by the user or with their explicit approval.

Source code in src/marianne/healing/remedies/jinja.py
def apply(self, context: "ErrorContext") -> RemedyResult:
    """This remedy only suggests - user must manually fix.

    The actual fix requires modifying the config file, which
    should be done by the user or with their explicit approval.
    """
    diagnosis = self.diagnose(context)
    if not diagnosis:
        return RemedyResult(
            success=False,
            message="Could not diagnose Jinja error",
            action_taken="nothing",
        )

    # For typo fixes with high confidence, we could offer to fix
    # But for now, this is guidance-only
    return RemedyResult(
        success=True,
        message=f"Suggested fix: {diagnosis.suggestion}",
        action_taken="suggestion provided",
    )