Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
    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
Esempio n. 4
0
 def reduce_LPAREN_RPAREN(self, *kids):
     self.val = qlast.Tuple(elements=[])
Esempio n. 5
0
 def reduce_LPAREN_Expr_COMMA_OptExprList_RPAREN(self, *kids):
     self.val = qlast.Tuple(elements=[kids[1].val] + kids[3].val)