def _get_ast(self, context): value = self.new_value new_value_empty = \ (value is None or (isinstance(value, collections.Container) and not value)) old_value_empty = \ (self.old_value is None or (isinstance(self.old_value, collections.Container) and not self.old_value)) if new_value_empty and not old_value_empty: op = qlast.DropAttributeValue( name=qlast.ObjectRef(module='', name=self.property)) return op if new_value_empty and old_value_empty: return if isinstance(value, s_expr.ExpressionText): value = edgeql.parse(str(value)) elif utils.is_nontrivial_container(value): value = qlast.Tuple(elements=[ qlast.Constant(value=el) for el in value ]) elif isinstance(value, nlang.WordCombination): forms = value.as_dict() if len(forms) > 1: items = [] for k, v in forms.items(): items.append(( qlast.Constant(value=k), qlast.Constant(value=v) )) value = qlast.Array(elements=[ qlast.Tuple(elements=[k, v]) for k, v in items ]) else: value = qlast.Constant(value=str(value)) else: value = qlast.Constant(value=value) as_expr = isinstance(value, qlast.ExpressionText) op = qlast.CreateAttributeValue( name=qlast.ObjectRef(module='', name=self.property), value=value, as_expr=as_expr) return op
def reduce_LBRACKET_OptExprList_RBRACKET(self, *kids): elements = kids[1].val self.val = qlast.Array(elements=elements)
def visit_Array(self, node): return qlast.Array(elements=[ self.visit(e) for e in node.elements ])
def reduce_LBRACKET_OptExprList_RBRACKET(self, *kids): elements = kids[1].val if elements: self.val = qlast.Array(elements=elements) else: self.val = qlast.EmptyCollection()
def visit_ListLiteral(self, node): return qlast.Array(elements=self.visit(node.value))