Пример #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
Пример #2
0
 def reduce_LBRACKET_OptExprList_RBRACKET(self, *kids):
     elements = kids[1].val
     self.val = qlast.Array(elements=elements)
Пример #3
0
 def visit_Array(self, node):
     return qlast.Array(elements=[
         self.visit(e) for e in node.elements
     ])
Пример #4
0
 def reduce_LBRACKET_OptExprList_RBRACKET(self, *kids):
     elements = kids[1].val
     if elements:
         self.val = qlast.Array(elements=elements)
     else:
         self.val = qlast.EmptyCollection()
Пример #5
0
 def visit_ListLiteral(self, node):
     return qlast.Array(elements=self.visit(node.value))