if 'variable' in ast:\r
return parse_variable(ast)\r
\r
+ if 'comparator' in ast:\r
+ return parse_conditional_expression_comparator(ast)\r
+\r
+ if 'logical_operator' in ast:\r
+ return parse_conditional_expression_logical(ast)\r
+\r
+ if 'test_function' in ast:\r
+ return parse_conditional_expression_test(ast)\r
+\r
return None\r
\r
+def parse_conditional_expression_comparator(ast):\r
+ operand_map = {\r
+ '>': 'gt',\r
+ '>=': 'gteq',\r
+ '==': 'eq',\r
+ '!=': 'ne',\r
+ '<': 'lt',\r
+ '<=': 'lteq',\r
+ }\r
+\r
+ return nodes.Compare(\r
+ parse_variable(ast['left']),\r
+ [\r
+ nodes.Operand(\r
+ operand_map[ast['comparator']],\r
+ parse_variable(ast['right'])\r
+ )\r
+ ],\r
+ lineno=lineno_from_parseinfo(ast['parseinfo'])\r
+ )\r
+\r
+def parse_conditional_expression_logical(ast):\r
+ node_class_map = {\r
+ 'and': nodes.And,\r
+ 'or': nodes.Or,\r
+ }\r
+\r
+ node_class = node_class_map[ast['logical_operator']]\r
+\r
+ return node_class(\r
+ parse_conditional_expression(ast['left']),\r
+ parse_conditional_expression(ast['right']),\r
+ lineno=lineno_from_parseinfo(ast['parseinfo'])\r
+ )\r
+\r
+def parse_conditional_expression_test(ast):\r
+ node = parse_variable(ast['test_variable'])\r
+ test_function = parse_variable(ast['test_function'])\r
+\r
+ name = test_function.name\r
+ args = []\r
+ kwargs = []\r
+ dynamic_args = None\r
+ dynamic_kwargs = None\r
+\r
+ return nodes.Test(\r
+ node,\r
+ name,\r
+ args,\r
+ kwargs,\r
+ dynamic_args,\r
+ dynamic_kwargs,\r
+ lineno=lineno_from_parseinfo(ast['parseinfo'])\r
+ )\r
+\r
def parse_literal(ast):\r
if 'literal_type' not in ast:\r
raise\r