jinja2.exceptions

  1import typing as t
  2
  3if t.TYPE_CHECKING:
  4    from .runtime import Undefined
  5
  6
  7class TemplateError(Exception):
  8    """Baseclass for all template errors."""
  9
 10    def __init__(self, message: t.Optional[str] = None) -> None:
 11        super().__init__(message)
 12
 13    @property
 14    def message(self) -> t.Optional[str]:
 15        return self.args[0] if self.args else None
 16
 17
 18class TemplateNotFound(IOError, LookupError, TemplateError):
 19    """Raised if a template does not exist.
 20
 21    .. versionchanged:: 2.11
 22        If the given name is :class:`Undefined` and no message was
 23        provided, an :exc:`UndefinedError` is raised.
 24    """
 25
 26    # Silence the Python warning about message being deprecated since
 27    # it's not valid here.
 28    message: t.Optional[str] = None
 29
 30    def __init__(
 31        self,
 32        name: t.Optional[t.Union[str, "Undefined"]],
 33        message: t.Optional[str] = None,
 34    ) -> None:
 35        IOError.__init__(self, name)
 36
 37        if message is None:
 38            from .runtime import Undefined
 39
 40            if isinstance(name, Undefined):
 41                name._fail_with_undefined_error()
 42
 43            message = name
 44
 45        self.message = message
 46        self.name = name
 47        self.templates = [name]
 48
 49    def __str__(self) -> str:
 50        return str(self.message)
 51
 52
 53class TemplatesNotFound(TemplateNotFound):
 54    """Like :class:`TemplateNotFound` but raised if multiple templates
 55    are selected.  This is a subclass of :class:`TemplateNotFound`
 56    exception, so just catching the base exception will catch both.
 57
 58    .. versionchanged:: 2.11
 59        If a name in the list of names is :class:`Undefined`, a message
 60        about it being undefined is shown rather than the empty string.
 61
 62    .. versionadded:: 2.2
 63    """
 64
 65    def __init__(
 66        self,
 67        names: t.Sequence[t.Union[str, "Undefined"]] = (),
 68        message: t.Optional[str] = None,
 69    ) -> None:
 70        if message is None:
 71            from .runtime import Undefined
 72
 73            parts = []
 74
 75            for name in names:
 76                if isinstance(name, Undefined):
 77                    parts.append(name._undefined_message)
 78                else:
 79                    parts.append(name)
 80
 81            parts_str = ", ".join(map(str, parts))
 82            message = f"none of the templates given were found: {parts_str}"
 83
 84        super().__init__(names[-1] if names else None, message)
 85        self.templates = list(names)
 86
 87
 88class TemplateSyntaxError(TemplateError):
 89    """Raised to tell the user that there is a problem with the template."""
 90
 91    def __init__(
 92        self,
 93        message: str,
 94        lineno: int,
 95        name: t.Optional[str] = None,
 96        filename: t.Optional[str] = None,
 97    ) -> None:
 98        super().__init__(message)
 99        self.lineno = lineno
100        self.name = name
101        self.filename = filename
102        self.source: t.Optional[str] = None
103
104        # this is set to True if the debug.translate_syntax_error
105        # function translated the syntax error into a new traceback
106        self.translated = False
107
108    def __str__(self) -> str:
109        # for translated errors we only return the message
110        if self.translated:
111            return t.cast(str, self.message)
112
113        # otherwise attach some stuff
114        location = f"line {self.lineno}"
115        name = self.filename or self.name
116        if name:
117            location = f'File "{name}", {location}'
118        lines = [t.cast(str, self.message), "  " + location]
119
120        # if the source is set, add the line to the output
121        if self.source is not None:
122            try:
123                line = self.source.splitlines()[self.lineno - 1]
124            except IndexError:
125                pass
126            else:
127                lines.append("    " + line.strip())
128
129        return "\n".join(lines)
130
131    def __reduce__(self):  # type: ignore
132        # https://bugs.python.org/issue1692335 Exceptions that take
133        # multiple required arguments have problems with pickling.
134        # Without this, raises TypeError: __init__() missing 1 required
135        # positional argument: 'lineno'
136        return self.__class__, (self.message, self.lineno, self.name, self.filename)
137
138
139class TemplateAssertionError(TemplateSyntaxError):
140    """Like a template syntax error, but covers cases where something in the
141    template caused an error at compile time that wasn't necessarily caused
142    by a syntax error.  However it's a direct subclass of
143    :exc:`TemplateSyntaxError` and has the same attributes.
144    """
145
146
147class TemplateRuntimeError(TemplateError):
148    """A generic runtime error in the template engine.  Under some situations
149    Jinja may raise this exception.
150    """
151
152
153class UndefinedError(TemplateRuntimeError):
154    """Raised if a template tries to operate on :class:`Undefined`."""
155
156
157class SecurityError(TemplateRuntimeError):
158    """Raised if a template tries to do something insecure if the
159    sandbox is enabled.
160    """
161
162
163class FilterArgumentError(TemplateRuntimeError):
164    """This error is raised if a filter was called with inappropriate
165    arguments
166    """
class TemplateError(builtins.Exception):
 8class TemplateError(Exception):
 9    """Baseclass for all template errors."""
10
11    def __init__(self, message: t.Optional[str] = None) -> None:
12        super().__init__(message)
13
14    @property
15    def message(self) -> t.Optional[str]:
16        return self.args[0] if self.args else None

Baseclass for all template errors.

TemplateError(message: Optional[str] = None)
11    def __init__(self, message: t.Optional[str] = None) -> None:
12        super().__init__(message)
message: Optional[str]
14    @property
15    def message(self) -> t.Optional[str]:
16        return self.args[0] if self.args else None
Inherited Members
builtins.BaseException
with_traceback
add_note
args
class TemplateNotFound(builtins.OSError, builtins.LookupError, TemplateError):
19class TemplateNotFound(IOError, LookupError, TemplateError):
20    """Raised if a template does not exist.
21
22    .. versionchanged:: 2.11
23        If the given name is :class:`Undefined` and no message was
24        provided, an :exc:`UndefinedError` is raised.
25    """
26
27    # Silence the Python warning about message being deprecated since
28    # it's not valid here.
29    message: t.Optional[str] = None
30
31    def __init__(
32        self,
33        name: t.Optional[t.Union[str, "Undefined"]],
34        message: t.Optional[str] = None,
35    ) -> None:
36        IOError.__init__(self, name)
37
38        if message is None:
39            from .runtime import Undefined
40
41            if isinstance(name, Undefined):
42                name._fail_with_undefined_error()
43
44            message = name
45
46        self.message = message
47        self.name = name
48        self.templates = [name]
49
50    def __str__(self) -> str:
51        return str(self.message)

Raised if a template does not exist.

Changed in version 2.11: If the given name is Undefined and no message was provided, an UndefinedError is raised.

TemplateNotFound( name: Union[str, jinja2.runtime.Undefined, NoneType], message: Optional[str] = None)
31    def __init__(
32        self,
33        name: t.Optional[t.Union[str, "Undefined"]],
34        message: t.Optional[str] = None,
35    ) -> None:
36        IOError.__init__(self, name)
37
38        if message is None:
39            from .runtime import Undefined
40
41            if isinstance(name, Undefined):
42                name._fail_with_undefined_error()
43
44            message = name
45
46        self.message = message
47        self.name = name
48        self.templates = [name]
message: Optional[str] = None
name
templates
Inherited Members
builtins.OSError
errno
strerror
filename
filename2
characters_written
builtins.BaseException
with_traceback
add_note
args
class TemplatesNotFound(TemplateNotFound):
54class TemplatesNotFound(TemplateNotFound):
55    """Like :class:`TemplateNotFound` but raised if multiple templates
56    are selected.  This is a subclass of :class:`TemplateNotFound`
57    exception, so just catching the base exception will catch both.
58
59    .. versionchanged:: 2.11
60        If a name in the list of names is :class:`Undefined`, a message
61        about it being undefined is shown rather than the empty string.
62
63    .. versionadded:: 2.2
64    """
65
66    def __init__(
67        self,
68        names: t.Sequence[t.Union[str, "Undefined"]] = (),
69        message: t.Optional[str] = None,
70    ) -> None:
71        if message is None:
72            from .runtime import Undefined
73
74            parts = []
75
76            for name in names:
77                if isinstance(name, Undefined):
78                    parts.append(name._undefined_message)
79                else:
80                    parts.append(name)
81
82            parts_str = ", ".join(map(str, parts))
83            message = f"none of the templates given were found: {parts_str}"
84
85        super().__init__(names[-1] if names else None, message)
86        self.templates = list(names)

Like TemplateNotFound but raised if multiple templates are selected. This is a subclass of TemplateNotFound exception, so just catching the base exception will catch both.

Changed in version 2.11: If a name in the list of names is Undefined, a message about it being undefined is shown rather than the empty string.

New in version 2.2.

TemplatesNotFound( names: Sequence[Union[str, jinja2.runtime.Undefined]] = (), message: Optional[str] = None)
66    def __init__(
67        self,
68        names: t.Sequence[t.Union[str, "Undefined"]] = (),
69        message: t.Optional[str] = None,
70    ) -> None:
71        if message is None:
72            from .runtime import Undefined
73
74            parts = []
75
76            for name in names:
77                if isinstance(name, Undefined):
78                    parts.append(name._undefined_message)
79                else:
80                    parts.append(name)
81
82            parts_str = ", ".join(map(str, parts))
83            message = f"none of the templates given were found: {parts_str}"
84
85        super().__init__(names[-1] if names else None, message)
86        self.templates = list(names)
templates
Inherited Members
TemplateNotFound
message
name
builtins.OSError
errno
strerror
filename
filename2
characters_written
builtins.BaseException
with_traceback
add_note
args
class TemplateSyntaxError(TemplateError):
 89class TemplateSyntaxError(TemplateError):
 90    """Raised to tell the user that there is a problem with the template."""
 91
 92    def __init__(
 93        self,
 94        message: str,
 95        lineno: int,
 96        name: t.Optional[str] = None,
 97        filename: t.Optional[str] = None,
 98    ) -> None:
 99        super().__init__(message)
100        self.lineno = lineno
101        self.name = name
102        self.filename = filename
103        self.source: t.Optional[str] = None
104
105        # this is set to True if the debug.translate_syntax_error
106        # function translated the syntax error into a new traceback
107        self.translated = False
108
109    def __str__(self) -> str:
110        # for translated errors we only return the message
111        if self.translated:
112            return t.cast(str, self.message)
113
114        # otherwise attach some stuff
115        location = f"line {self.lineno}"
116        name = self.filename or self.name
117        if name:
118            location = f'File "{name}", {location}'
119        lines = [t.cast(str, self.message), "  " + location]
120
121        # if the source is set, add the line to the output
122        if self.source is not None:
123            try:
124                line = self.source.splitlines()[self.lineno - 1]
125            except IndexError:
126                pass
127            else:
128                lines.append("    " + line.strip())
129
130        return "\n".join(lines)
131
132    def __reduce__(self):  # type: ignore
133        # https://bugs.python.org/issue1692335 Exceptions that take
134        # multiple required arguments have problems with pickling.
135        # Without this, raises TypeError: __init__() missing 1 required
136        # positional argument: 'lineno'
137        return self.__class__, (self.message, self.lineno, self.name, self.filename)

Raised to tell the user that there is a problem with the template.

TemplateSyntaxError( message: str, lineno: int, name: Optional[str] = None, filename: Optional[str] = None)
 92    def __init__(
 93        self,
 94        message: str,
 95        lineno: int,
 96        name: t.Optional[str] = None,
 97        filename: t.Optional[str] = None,
 98    ) -> None:
 99        super().__init__(message)
100        self.lineno = lineno
101        self.name = name
102        self.filename = filename
103        self.source: t.Optional[str] = None
104
105        # this is set to True if the debug.translate_syntax_error
106        # function translated the syntax error into a new traceback
107        self.translated = False
lineno
name
filename
source: Optional[str]
translated
Inherited Members
TemplateError
message
builtins.BaseException
with_traceback
add_note
args
class TemplateAssertionError(TemplateSyntaxError):
140class TemplateAssertionError(TemplateSyntaxError):
141    """Like a template syntax error, but covers cases where something in the
142    template caused an error at compile time that wasn't necessarily caused
143    by a syntax error.  However it's a direct subclass of
144    :exc:`TemplateSyntaxError` and has the same attributes.
145    """

Like a template syntax error, but covers cases where something in the template caused an error at compile time that wasn't necessarily caused by a syntax error. However it's a direct subclass of TemplateSyntaxError and has the same attributes.

Inherited Members
TemplateSyntaxError
TemplateSyntaxError
lineno
name
filename
source
translated
TemplateError
message
builtins.BaseException
with_traceback
add_note
args
class TemplateRuntimeError(TemplateError):
148class TemplateRuntimeError(TemplateError):
149    """A generic runtime error in the template engine.  Under some situations
150    Jinja may raise this exception.
151    """

A generic runtime error in the template engine. Under some situations Jinja may raise this exception.

Inherited Members
TemplateError
TemplateError
message
builtins.BaseException
with_traceback
add_note
args
class UndefinedError(TemplateRuntimeError):
154class UndefinedError(TemplateRuntimeError):
155    """Raised if a template tries to operate on :class:`Undefined`."""

Raised if a template tries to operate on Undefined.

Inherited Members
TemplateError
TemplateError
message
builtins.BaseException
with_traceback
add_note
args
class SecurityError(TemplateRuntimeError):
158class SecurityError(TemplateRuntimeError):
159    """Raised if a template tries to do something insecure if the
160    sandbox is enabled.
161    """

Raised if a template tries to do something insecure if the sandbox is enabled.

Inherited Members
TemplateError
TemplateError
message
builtins.BaseException
with_traceback
add_note
args
class FilterArgumentError(TemplateRuntimeError):
164class FilterArgumentError(TemplateRuntimeError):
165    """This error is raised if a filter was called with inappropriate
166    arguments
167    """

This error is raised if a filter was called with inappropriate arguments

Inherited Members
TemplateError
TemplateError
message
builtins.BaseException
with_traceback
add_note
args