Classes
ErrorCode
2
▼
Searchable error codes for Kida template errors.
Format: K-{CATEGORY}-{NUMBER}
Categories: LEX (le…
ErrorCode
2
▼
Searchable error codes for Kida template errors.
Format: K-{CATEGORY}-{NUMBER} Categories: LEX (lexer), PAR (parser), RUN (runtime), TPL (template loading)
Each code maps to a documentation URL for quick lookup: https://lbliii.github.io/kida/docs/errors/#k-run-001
Methods
docs_url
0
str
▼
Documentation URL for this error code.
property
docs_url
0
str
▼
def docs_url(self) -> str
Returns
str
category
0
str
▼
Error category (e.g., 'runtime', 'lexer', 'parser', 'template').
property
category
0
str
▼
def category(self) -> str
Returns
str
SourceSnippet
4
▼
Template source context around an error line.
Provides surrounding lines of template source for di…
SourceSnippet
4
▼
Template source context around an error line.
Provides surrounding lines of template source for display in error messages. Used by TemplateRuntimeError and UndefinedError to show the template line where the error occurred.
Attributes
| Name | Type | Description |
|---|---|---|
lines |
tuple[tuple[int, str], ...]
|
Tuple of (line_number, line_content) pairs around the error. |
error_line |
int
|
The 1-based line number where the error occurred. |
column |
int | None
|
Optional column offset for caret pointer. |
Methods
format
0
str
▼
Format snippet in Rust-inspired diagnostic style with colors.
Returns a multi-…
format
0
str
▼
def format(self) -> str
Format snippet in Rust-inspired diagnostic style with colors.
Returns a multi-line string with line numbers and the error line highlighted. Uses terminal colors when supported.
Returns
str
TemplateError
2
▼
Base exception for all Kida template errors.
All template-related exceptions inherit from this cla…
TemplateError
2
▼
Base exception for all Kida template errors.
All template-related exceptions inherit from this class, enabling broad exception handling:
>>> try:
... template.render()
... except TemplateError as e:
... log.error(f"Template error: {e}")
Attributes
| Name | Type | Description |
|---|---|---|
code |
ErrorCode | None
|
Optional ErrorCode for searchable, documentable error identification. |
Methods
format_compact
0
str
▼
Format error as a structured, human-readable summary.
Produces a clean diagnos…
format_compact
0
str
▼
def format_compact(self) -> str
Format error as a structured, human-readable summary.
Produces a clean diagnostic string suitable for terminal display,
without Python traceback noise. Consumers (Chirp, Bengal) can call
this instead of parsingstr(exc).
Format::
K-RUN-001: Undefined variable 'usernme' in base.html:42
|
>42 | <h1>{{ usernme }}</h1>
|
Hint: Use {{ usernme | default('') }} for optional variables
Docs: https://lbliii.github.io/kida/docs/errors/#k-run-001
Returns
str
Multi-line string with error code, message, source snippet,
and documentation URL.
TemplateNotFoundError
1
▼
Template not found by any configured loader.
Raised when `Environment.get_template(name)` cannot l…
TemplateNotFoundError
1
▼
Template not found by any configured loader.
Raised whenEnvironment.get_template(name)cannot locate the template
in any of the loader's search paths.
Attributes
| Name | Type | Description |
|---|---|---|
code |
ErrorCode | None
|
— |
TemplateSyntaxError
3
▼
Parse-time syntax error in template source.
Raised by the Parser when template syntax is invalid. …
TemplateSyntaxError
3
▼
Parse-time syntax error in template source.
Raised by the Parser when template syntax is invalid. Includes source location for error reporting.
Whensource and linenoare provided, the error message includes
a source snippet with the offending line. Ifcol_offsetis also
given, a caret (^) points at the exact column.
Attributes
| Name | Type | Description |
|---|---|---|
code |
ErrorCode | None
|
— |
Methods
format_compact
0
str
▼
Format syntax error as structured terminal diagnostic.
format_compact
0
str
▼
def format_compact(self) -> str
Returns
str
Internal Methods 1 ▼
__init__
6
▼
__init__
6
▼
def __init__(self, message: str, lineno: int | None = None, name: str | None = None, filename: str | None = None, source: str | None = None, col_offset: int | None = None)
Parameters
| Name | Type | Description |
|---|---|---|
message |
— |
|
lineno |
— |
Default:None
|
name |
— |
Default:None
|
filename |
— |
Default:None
|
source |
— |
Default:None
|
col_offset |
— |
Default:None
|
TemplateRuntimeError
9
▼
Render-time error with rich debugging context.
Raised during template rendering when an operation …
TemplateRuntimeError
9
▼
Render-time error with rich debugging context.
Raised during template rendering when an operation fails. Provides detailed information to help diagnose the issue:
- Template name and line number
- The expression that caused the error
- Actual values and their types
- Actionable suggestion for fixing
Output Format:
Runtime Error: 'NoneType' object has no attribute 'title'
Location: article.html:15
Expression: {{ post.title }}
Values:
post = None (NoneType)
Suggestion: Check if 'post' is defined, or use {{ post.title | default('') }}
```
Attributes
| Name | Type | Description |
|---|---|---|
code |
ErrorCode | None
|
— |
message |
— |
Error description |
expression |
— |
Template expression that failed |
values |
— |
Dict of variable names → values for context |
template_name |
— |
Name of the template |
lineno |
— |
Line number in template source |
suggestion |
— |
Actionable fix suggestion |
Methods
format_compact
0
str
▼
Format runtime error as structured terminal diagnostic.
format_compact
0
str
▼
def format_compact(self) -> str
Returns
str
Internal Methods 1 ▼
__init__
9
▼
__init__
9
▼
def __init__(self, message: str, *, expression: str | None = None, values: dict[str, Any] | None = None, template_name: str | None = None, lineno: int | None = None, suggestion: str | None = None, source_snippet: SourceSnippet | None = None, template_stack: list[tuple[str, int]] | None = None, code: ErrorCode | None = None)
Parameters
| Name | Type | Description |
|---|---|---|
message |
— |
|
expression |
— |
Default:None
|
values |
— |
Default:None
|
template_name |
— |
Default:None
|
lineno |
— |
Default:None
|
suggestion |
— |
Default:None
|
source_snippet |
— |
Default:None
|
template_stack |
— |
Default:None
|
code |
— |
Default:None
|
RequiredValueError
2
▼
A required value was None or missing.
Raised by the `| require` filter when a value that must be p…
RequiredValueError
2
▼
A required value was None or missing.
Raised by the| requirefilter when a value that must be present is
None or missing. Useful for validating required context variables.
Attributes
| Name | Type | Description |
|---|---|---|
code |
ErrorCode | None
|
— |
Methods
Internal Methods 1 ▼
__init__
3
▼
__init__
3
▼
def __init__(self, field_name: str, message: str | None = None, **kwargs: Any)
Parameters
| Name | Type | Description |
|---|---|---|
field_name |
— |
|
message |
— |
Default:None
|
**kwargs |
— |
NoneComparisonError
2
▼
Attempted to compare None values, typically during sorting.
Raised when `| sort` or similar operat…
NoneComparisonError
2
▼
Attempted to compare None values, typically during sorting.
Raised when| sortor similar operations encounter None values that
cannot be compared. Provides information about which items have None
values for the sort attribute.
Attributes
| Name | Type | Description |
|---|---|---|
code |
ErrorCode | None
|
— |
Methods
Internal Methods 1 ▼
__init__
4
▼
__init__
4
▼
def __init__(self, left_value: Any, right_value: Any, attribute: str | None = None, **kwargs: Any)
Parameters
| Name | Type | Description |
|---|---|---|
left_value |
— |
|
right_value |
— |
|
attribute |
— |
Default:None
|
**kwargs |
— |
UndefinedError
3
▼
Raised when accessing an undefined variable.
Strict mode is enabled by default in Kida. When a tem…
UndefinedError
3
▼
Raised when accessing an undefined variable.
Strict mode is enabled by default in Kida. When a template references a variable that doesn't exist in the context, this error is raised instead of silently returning None.
Ifavailable_namesis provided, a "Did you mean?" suggestion is
included when a close match is found (usingdifflib.get_close_matches).
To fix:
- Pass the variable in render(): template.render(undefined_var="value")
- Use the default filter: {{ undefined_var | default("fallback") }}
Attributes
| Name | Type | Description |
|---|---|---|
code |
ErrorCode | None
|
— |
Methods
format_compact
0
str
▼
Format undefined variable error as structured terminal diagnostic.
format_compact
0
str
▼
def format_compact(self) -> str
Returns
str
Internal Methods 1 ▼
__init__
6
▼
__init__
6
▼
def __init__(self, name: str, template: str | None = None, lineno: int | None = None, available_names: frozenset[str] | None = None, source_snippet: SourceSnippet | None = None, template_stack: list[tuple[str, int]] | None = None)
Parameters
| Name | Type | Description |
|---|---|---|
name |
— |
|
template |
— |
Default:None
|
lineno |
— |
Default:None
|
available_names |
— |
Default:None
|
source_snippet |
— |
Default:None
|
template_stack |
— |
Default:None
|
Functions
format_template_stack
1
str
▼
Format template call stack for error messages with colors.
format_template_stack
1
str
▼
def format_template_stack(stack: list[tuple[str, int]] | None) -> str
Parameters
| Name | Type | Description |
|---|---|---|
stack |
list[tuple[str, int]] | None |
List of (template_name, line_number) tuples showing include chain |
Returns
str
build_source_snippet
4
SourceSnippet
▼
Build a SourceSnippet from template source.
build_source_snippet
4
SourceSnippet
▼
def build_source_snippet(source: str, error_line: int, *, context_lines: int = 2, column: int | None = None) -> SourceSnippet
Parameters
| Name | Type | Description |
|---|---|---|
source |
str |
Full template source text. |
error_line |
int |
1-based line number of the error. |
context_lines |
int |
Number of lines to show before/after the error line. Default:2
|
column |
int | None |
Optional column offset for caret pointer. Default:None
|
Returns
SourceSnippet