diff options
Diffstat (limited to 'jinja2')
-rw-r--r-- | jinja2/asyncfilters.py | 2 | ||||
-rw-r--r-- | jinja2/nodes.py | 7 |
2 files changed, 9 insertions, 0 deletions
diff --git a/jinja2/asyncfilters.py b/jinja2/asyncfilters.py index d12afaf4..5c1f46d7 100644 --- a/jinja2/asyncfilters.py +++ b/jinja2/asyncfilters.py @@ -47,6 +47,8 @@ def dualfilter(normal_filter, async_filter): if wrap_evalctx: wrapper.evalcontextfilter = True + wrapper.asyncfiltervariant = True + return wrapper diff --git a/jinja2/nodes.py b/jinja2/nodes.py index 76f7814c..4d62cccb 100644 --- a/jinja2/nodes.py +++ b/jinja2/nodes.py @@ -592,6 +592,13 @@ class Filter(Expr): filter_ = self.environment.filters.get(self.name) if filter_ is None or getattr(filter_, 'contextfilter', False): raise Impossible() + + # We cannot constant handle async filters, so we need to make sure + # to not go down this path. + if eval_ctx.environment.is_async and \ + getattr(filter_, 'asyncfiltervariant', False): + raise Impossible() + obj = self.node.as_const(eval_ctx) args = [obj] + [x.as_const(eval_ctx) for x in self.args] if getattr(filter_, 'evalcontextfilter', False): |