dynamic_args = None\r
dynamic_kwargs = None\r
\r
- if 'arguments' in ast:\r
- for argument in ast['arguments']:\r
- value = parse_variable(argument['value'])\r
+ variable = parse_variable(ast)\r
\r
- if 'key' in argument:\r
- kwargs.append(\r
- nodes.Keyword(argument['key'], value)\r
- )\r
- else:\r
- args.append(value)\r
+ filter_node = None\r
+ last_filter = None\r
+ start_variable = variable\r
\r
- return nodes.Filter(\r
+ while not isinstance(variable, nodes.Name):\r
+ if isinstance(variable, nodes.Call):\r
+ last_filter = filter_node\r
+ filter_node = variable\r
+\r
+ variable = variable.node\r
+\r
+ new_filter = nodes.Filter(\r
node,\r
- ast['name'],\r
+ variable.name,\r
args,\r
kwargs,\r
dynamic_args,\r
lineno=lineno_from_parseinfo(ast['parseinfo'])\r
)\r
\r
+ if filter_node is not None:\r
+ new_filter.args = filter_node.args\r
+ new_filter.kwargs = filter_node.kwargs\r
+\r
+ if last_filter is None:\r
+ return new_filter\r
+\r
+ last_filter.node = new_filter\r
+\r
+ return last_filter\r
+\r
def parse_variable_tuple(ast, variable_context):\r
identifiers = []\r
\r
with open('parsed_jinja.py', 'w') as jinja_ast_file:\r
pprint.pprint(jinja_ast, indent=2, stream=jinja_ast_file)\r
\r
- print("New Parser", new_parse_end - new_parse_start, file=sys.stderr)\r
- print("Jinja Parser", jinja_parse_end - jinja_parse_start, file=sys.stderr)\r
+ print("New Parser", new_parse_end - new_parse_start)\r
+ print("Jinja Parser", jinja_parse_end - jinja_parse_start)\r