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 _get_ast(self, schema, context): value = self.new_value new_value_empty = \ (value is None or (isinstance(value, collections.abc.Container) and not value)) old_value_empty = \ (self.old_value is None or (isinstance(self.old_value, collections.abc.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.BaseConstant.from_python(el) for el in value ]) else: value = qlast.BaseConstant.from_python(value) as_expr = isinstance(value, qlast.ExpressionText) op = qlast.SetField( name=qlast.ObjectRef(module='', name=self.property), value=value, as_expr=as_expr) return op
def visit_Tuple(self, node): if node.named: result = qlast.NamedTuple(elements=[ qlast.TupleElement(name=el.name, val=self.visit(el.val)) for el in node.elements ]) else: result = qlast.Tuple( elements=[self.visit(e.val) for e in node.elements]) return result
def reduce_LPAREN_RPAREN(self, *kids): self.val = qlast.Tuple(elements=[])
def reduce_LPAREN_Expr_COMMA_OptExprList_RPAREN(self, *kids): self.val = qlast.Tuple(elements=[kids[1].val] + kids[3].val)