Beispiel #1
0
def test_parses_multi_byte_characters():
    # type: () -> None
    result = parse(
        u"""
        # This comment has a \u0A0A multi-byte character.
        { field(arg: "Has a \u0A0A multi-byte character.") }
    """,
        no_location=True,
        no_source=True,
    )
    assert result == ast.Document(definitions=[
        ast.OperationDefinition(
            operation="query",
            name=None,
            variable_definitions=None,
            directives=[],
            selection_set=ast.SelectionSet(selections=[
                ast.Field(
                    alias=None,
                    name=ast.Name(value=u"field"),
                    arguments=[
                        ast.Argument(
                            name=ast.Name(value=u"arg"),
                            value=ast.StringValue(
                                value=u"Has a \u0a0a multi-byte character."),
                        )
                    ],
                    directives=[],
                    selection_set=None,
                )
            ]),
        )
    ])
def test_parses_double_value_enum():
    # type: () -> None
    body = "enum Hello { WO, RLD }"
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(
        definitions=[
            ast.EnumTypeDefinition(
                name=ast.Name(value="Hello", loc=loc(5, 10)),
                directives=[],
                values=[
                    ast.EnumValueDefinition(
                        name=ast.Name(value="WO", loc=loc(13, 15)),
                        directives=[],
                        loc=loc(13, 15),
                    ),
                    ast.EnumValueDefinition(
                        name=ast.Name(value="RLD", loc=loc(17, 20)),
                        directives=[],
                        loc=loc(17, 20),
                    ),
                ],
                loc=loc(0, 22),
            )
        ],
        loc=loc(0, 22),
    )

    assert doc == expected
Beispiel #3
0
def _get_basic_schema_ast(query_type):
    """Create a basic AST Document representing a nearly blank schema.

    The output AST contains a single query type, whose name is the input string. The query type
    is guaranteed to be the second entry of Document definitions, after the schema definition.
    The query type has no fields.

    Args:
        query_type: str, name of the query type for the schema

    Returns:
        Document, representing a nearly blank schema
    """
    blank_ast = ast_types.Document(definitions=[
        ast_types.SchemaDefinition(
            operation_types=[
                ast_types.OperationTypeDefinition(
                    operation='query',
                    type=ast_types.NamedType(name=ast_types.Name(
                        value=query_type)),
                )
            ],
            directives=[],
        ),
        ast_types.ObjectTypeDefinition(
            name=ast_types.Name(value=query_type),
            fields=[],
            interfaces=[],
            directives=[],
        ),
    ])
    return blank_ast
def test_parses_multi_byte_characters():
    result = parse(u'''
        # This comment has a \u0A0A multi-byte character.
        { field(arg: "Has a \u0A0A multi-byte character.") }
    ''',
                   no_location=True,
                   no_source=True)
    assert result == ast.Document(definitions=[
        ast.OperationDefinition(
            operation='query',
            name=None,
            variable_definitions=None,
            directives=[],
            selection_set=ast.SelectionSet(selections=[
                ast.Field(
                    alias=None,
                    name=ast.Name(value=u'field'),
                    arguments=[
                        ast.Argument(
                            name=ast.
                            Name(value=u'arg'),
                            value=ast
                            .StringValue(
                                value=u'Has a \u0a0a multi-byte character.'))
                    ],
                    directives=[],
                    selection_set=None)
            ]))
    ])
def test_parses_simple_interface():
    # type: () -> None
    body = """
interface Hello {
  world: String
}
"""
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(
        definitions=[
            ast.InterfaceTypeDefinition(
                name=ast.Name(value="Hello", loc=loc(11, 16)),
                directives=[],
                fields=[
                    ast.FieldDefinition(
                        name=ast.Name(value="world", loc=loc(21, 26)),
                        arguments=[],
                        type=ast.NamedType(
                            name=ast.Name(value="String", loc=loc(28, 34)),
                            loc=loc(28, 34),
                        ),
                        directives=[],
                        loc=loc(21, 34),
                    )
                ],
                loc=loc(1, 36),
            )
        ],
        loc=loc(1, 37),
    )

    assert doc == expected
Beispiel #6
0
def test_parses_simple_type_inheriting_multiple_interfaces():
    # type: () -> None
    body = "type Hello implements Wo & rld { }"
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(
        definitions=[
            ast.ObjectTypeDefinition(
                name=ast.Name(value="Hello", loc=loc(5, 10)),
                interfaces=[
                    ast.NamedType(
                        name=ast.Name(value="Wo", loc=loc(22, 24)), loc=loc(22, 24)
                    ),
                    ast.NamedType(
                        name=ast.Name(value="rld", loc=loc(26, 29)), loc=loc(26, 29)
                    ),
                ],
                directives=[],
                fields=[],
                loc=loc(0, 33),
            )
        ],
        loc=loc(0, 33),
    )
    assert doc == expected
Beispiel #7
0
def test_parses_simple_input_object():
    body = '''
input Hello {
  world: String
}'''
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(definitions=[
        ast.InputObjectTypeDefinition(
            name=ast.Name(value='Hello', loc=loc(7, 12)),
            directives=[],
            fields=[
                ast.InputValueDefinition(name=ast.Name(value='world',
                                                       loc=loc(17, 22)),
                                         type=ast.NamedType(name=ast.Name(
                                             value='String', loc=loc(24, 30)),
                                                            loc=loc(24, 30)),
                                         default_value=None,
                                         directives=[],
                                         loc=loc(17, 30))
            ],
            loc=loc(1, 32))
    ],
                            loc=loc(1, 32))
    assert doc == expected
def test_parses_simple_type():
    # type: () -> None
    body = """
type Hello {
  world: String
}"""

    doc = parse(body)
    loc = create_loc_fn(body)

    expected = ast.Document(
        definitions=[
            ast.ObjectTypeDefinition(
                name=ast.Name(value="Hello", loc=loc(6, 11)),
                interfaces=[],
                directives=[],
                fields=[
                    ast.FieldDefinition(
                        name=ast.Name(value="world", loc=loc(16, 21)),
                        arguments=[],
                        type=ast.NamedType(
                            name=ast.Name(value="String", loc=loc(23, 29)),
                            loc=loc(23, 29),
                        ),
                        directives=[],
                        loc=loc(16, 29),
                    )
                ],
                loc=loc(1, 31),
            )
        ],
        loc=loc(1, 31),
    )
    assert doc == expected
def test_parses_simple_input_object():
    # type: () -> None
    body = """
input Hello {
  world: String
}"""
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(
        definitions=[
            ast.InputObjectTypeDefinition(
                name=ast.Name(value="Hello", loc=loc(7, 12)),
                directives=[],
                fields=[
                    ast.InputValueDefinition(
                        name=ast.Name(value="world", loc=loc(17, 22)),
                        type=ast.NamedType(
                            name=ast.Name(value="String", loc=loc(24, 30)),
                            loc=loc(24, 30),
                        ),
                        default_value=None,
                        directives=[],
                        loc=loc(17, 30),
                    )
                ],
                loc=loc(1, 32),
            )
        ],
        loc=loc(1, 32),
    )
    assert doc == expected
Beispiel #10
0
def test_simple_non_null_type():
    body = '''
type Hello {
  world: String!
}'''

    doc = parse(body)
    loc = create_loc_fn(body)
    expected = ast.Document(definitions=[
        ast.ObjectTypeDefinition(
            name=ast.Name(value='Hello', loc=loc(6, 11)),
            interfaces=[],
            directives=[],
            fields=[
                ast.FieldDefinition(name=ast.Name(value='world',
                                                  loc=loc(16, 21)),
                                    arguments=[],
                                    type=ast.NonNullType(type=ast.NamedType(
                                        name=ast.Name(value='String',
                                                      loc=loc(23, 29)),
                                        loc=loc(23, 29)),
                                                         loc=loc(23, 30)),
                                    directives=[],
                                    loc=loc(16, 30))
            ],
            loc=loc(1, 32))
    ],
                            loc=loc(1, 32))
    assert doc == expected
def test_parses_simple_field_with_list_arg():
    body = '''
type Hello {
  world(things: [String]): String
}'''
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(definitions=[
        ast.ObjectTypeDefinition(
            name=ast.Name(value='Hello', loc=loc(6, 11)),
            interfaces=[],
            fields=[
                ast.FieldDefinition(
                    name=ast.Name(value='world', loc=loc(16, 21)),
                    arguments=[
                        ast.InputValueDefinition(
                            name=ast.Name(value='things', loc=loc(22, 28)),
                            type=ast.ListType(type=ast.NamedType(
                                name=ast.Name(value='String', loc=loc(31, 37)),
                                loc=loc(31, 37)),
                                              loc=loc(30, 38)),
                            default_value=None,
                            loc=loc(22, 38))
                    ],
                    type=ast.NamedType(name=ast.Name(value='String',
                                                     loc=loc(41, 47)),
                                       loc=loc(41, 47)),
                    loc=loc(16, 47))
            ],
            loc=loc(1, 49))
    ],
                            loc=loc(1, 49))
    assert doc == expected
def test_parses_simple_field_with_arg_with_default_value():
    body = '''
type Hello {
  world(flag: Boolean = true): String
}'''
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(definitions=[
        ast.ObjectTypeDefinition(
            name=ast.Name(value='Hello', loc=loc(6, 11)),
            interfaces=[],
            fields=[
                ast.FieldDefinition(
                    name=ast.Name(value='world', loc=loc(16, 21)),
                    arguments=[
                        ast.InputValueDefinition(
                            name=ast.Name(value='flag', loc=loc(22, 26)),
                            type=ast.NamedType(name=ast.Name(value='Boolean',
                                                             loc=loc(28, 35)),
                                               loc=loc(28, 35)),
                            default_value=ast.BooleanValue(value=True,
                                                           loc=loc(38, 42)),
                            loc=loc(22, 42))
                    ],
                    type=ast.NamedType(name=ast.Name(value='String',
                                                     loc=loc(45, 51)),
                                       loc=loc(45, 51)),
                    loc=loc(16, 51))
            ],
            loc=loc(1, 53))
    ],
                            loc=loc(1, 53))

    assert doc == expected
Beispiel #13
0
def test_parses_simple_extension():
    body = '''
extend type Hello {
  world: String
}'''
    doc = parse(body)
    loc = create_loc_fn(body)

    expected = ast.Document(definitions=[
        ast.TypeExtensionDefinition(definition=ast.ObjectTypeDefinition(
            name=ast.Name(value='Hello', loc=loc(13, 18)),
            interfaces=[],
            directives=[],
            fields=[
                ast.FieldDefinition(name=ast.Name(value='world',
                                                  loc=loc(23, 28)),
                                    arguments=[],
                                    type=ast.NamedType(name=ast.Name(
                                        value='String', loc=loc(30, 36)),
                                                       loc=loc(30, 36)),
                                    directives=[],
                                    loc=loc(23, 36))
            ],
            loc=loc(8, 38)),
                                    loc=loc(1, 38))
    ],
                            loc=loc(1, 38))

    assert doc == expected
Beispiel #14
0
def test_parses_simple_interface():
    body = '''
interface Hello {
  world: String
}
'''
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(definitions=[
        ast.InterfaceTypeDefinition(
            name=ast.Name(value='Hello', loc=loc(11, 16)),
            directives=[],
            fields=[
                ast.FieldDefinition(name=ast.Name(value='world',
                                                  loc=loc(21, 26)),
                                    arguments=[],
                                    type=ast.NamedType(name=ast.Name(
                                        value='String', loc=loc(28, 34)),
                                                       loc=loc(28, 34)),
                                    directives=[],
                                    loc=loc(21, 34))
            ],
            loc=loc(1, 36))
    ],
                            loc=loc(1, 37))

    assert doc == expected
Beispiel #15
0
def query(*fields, **kwargs):
    if 'operation' not in kwargs:
        kwargs['operation'] = 'query'
    return ast.Document(definitions=[
        ast.OperationDefinition(operation=kwargs['operation'],
                                selection_set=ast.SelectionSet(
                                    selections=list(selections(*fields))))
    ])
Beispiel #16
0
def query(*fields):
    return ast.Document(
        definitions=[ast.OperationDefinition(
            operation='query',
            selection_set=ast.SelectionSet(
                selections=list(selections(*fields))
            )
        )]
    )
Beispiel #17
0
def query(*fields, **kwargs):
    if "operation" not in kwargs:
        kwargs["operation"] = "query"
    return ast.Document(definitions=[
        ast.OperationDefinition(
            operation=kwargs["operation"],
            selection_set=ast.SelectionSet(selections=list(selections(
                *fields))),
        )
    ])
def test_parses_scalar():
    body = 'scalar Hello'
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(definitions=[
        ast.ScalarTypeDefinition(name=ast.Name(value='Hello', loc=loc(7, 12)),
                                 loc=loc(0, 12))
    ],
                            loc=loc(0, 12))
    assert doc == expected
def test_parses_simple_field_with_two_args():
    # type: () -> None
    body = """
type Hello {
  world(argOne: Boolean, argTwo: Int): String
}"""
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(
        definitions=[
            ast.ObjectTypeDefinition(
                name=ast.Name(value="Hello", loc=loc(6, 11)),
                interfaces=[],
                directives=[],
                fields=[
                    ast.FieldDefinition(
                        name=ast.Name(value="world", loc=loc(16, 21)),
                        arguments=[
                            ast.InputValueDefinition(
                                name=ast.Name(value="argOne", loc=loc(22, 28)),
                                type=ast.NamedType(
                                    name=ast.Name(value="Boolean",
                                                  loc=loc(30, 37)),
                                    loc=loc(30, 37),
                                ),
                                default_value=None,
                                directives=[],
                                loc=loc(22, 37),
                            ),
                            ast.InputValueDefinition(
                                name=ast.Name(value="argTwo", loc=loc(39, 45)),
                                type=ast.NamedType(
                                    name=ast.Name(value="Int", loc=loc(47,
                                                                       50)),
                                    loc=loc(47, 50),
                                ),
                                default_value=None,
                                directives=[],
                                loc=loc(39, 50),
                            ),
                        ],
                        type=ast.NamedType(
                            name=ast.Name(value="String", loc=loc(53, 59)),
                            loc=loc(53, 59),
                        ),
                        directives=[],
                        loc=loc(16, 59),
                    )
                ],
                loc=loc(1, 61),
            )
        ],
        loc=loc(1, 61),
    )
    assert doc == expected
def test_parse_creates_ast():
    source = Source("""{
  node(id: 4) {
    id,
    name
  }
}
""")
    result = parse(source)

    assert result == \
        ast.Document(
            loc=Loc(start=0, end=41, source=source),
            definitions=[ast.OperationDefinition(
                loc=Loc(start=0, end=40, source=source),
                operation='query',
                name=None,
                variable_definitions=None,
                directives=[],
                selection_set=ast.SelectionSet(
                    loc=Loc(start=0, end=40, source=source),
                    selections=[ast.Field(
                        loc=Loc(start=4, end=38, source=source),
                        alias=None,
                        name=ast.Name(
                            loc=Loc(start=4, end=8, source=source),
                            value='node'),
                        arguments=[ast.Argument(
                            name=ast.Name(loc=Loc(start=9, end=11, source=source),
                                          value='id'),
                            value=ast.IntValue(
                                   loc=Loc(start=13, end=14, source=source),
                                   value='4'),
                            loc=Loc(start=9, end=14, source=source))],
                        directives=[],
                        selection_set=ast.SelectionSet(
                            loc=Loc(start=16, end=38, source=source),
                            selections=[ast.Field(
                                loc=Loc(start=22, end=24, source=source),
                                alias=None,
                                name=ast.Name(
                                    loc=Loc(start=22, end=24, source=source),
                                    value='id'),
                                arguments=[],
                                directives=[],
                                selection_set=None),
                                ast.Field(
                                loc=Loc(start=30, end=34, source=source),
                                alias=None,
                                name=ast.Name(
                                    loc=Loc(start=30, end=34, source=source),
                                    value='name'),
                                arguments=[],
                                directives=[],
                                selection_set=None)]))]))])
def test_parses_single_value_enum():
    body = 'enum Hello { WORLD }'
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(definitions=[
        ast.EnumTypeDefinition(name=ast.Name(value='Hello', loc=loc(5, 10)),
                               values=[
                                   ast.EnumValueDefinition(name=ast.Name(
                                       value='WORLD', loc=loc(13, 18)),
                                                           loc=loc(13, 18))
                               ],
                               loc=loc(0, 20))
    ],
                            loc=loc(0, 20))

    assert doc == expected
def test_parses_simple_union():
    body = 'union Hello = World'
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(definitions=[
        ast.UnionTypeDefinition(name=ast.Name(value='Hello', loc=loc(6, 11)),
                                types=[
                                    ast.NamedType(name=ast.Name(value='World',
                                                                loc=loc(
                                                                    14, 19)),
                                                  loc=loc(14, 19))
                                ],
                                loc=loc(0, 19))
    ],
                            loc=loc(0, 19))
    assert doc == expected
def test_parses_scalar():
    # type: () -> None
    body = "scalar Hello"
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(
        definitions=[
            ast.ScalarTypeDefinition(
                name=ast.Name(value="Hello", loc=loc(7, 12)),
                directives=[],
                loc=loc(0, 12),
            )
        ],
        loc=loc(0, 12),
    )
    assert doc == expected
def test_parses_simple_field_with_arg_with_default_value():
    # type: () -> None
    body = """
type Hello {
  world(flag: Boolean = true): String
}"""
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(
        definitions=[
            ast.ObjectTypeDefinition(
                name=ast.Name(value="Hello", loc=loc(6, 11)),
                interfaces=[],
                directives=[],
                fields=[
                    ast.FieldDefinition(
                        name=ast.Name(value="world", loc=loc(16, 21)),
                        arguments=[
                            ast.InputValueDefinition(
                                name=ast.Name(value="flag", loc=loc(22, 26)),
                                type=ast.NamedType(
                                    name=ast.Name(value="Boolean",
                                                  loc=loc(28, 35)),
                                    loc=loc(28, 35),
                                ),
                                default_value=ast.BooleanValue(value=True,
                                                               loc=loc(38,
                                                                       42)),
                                directives=[],
                                loc=loc(22, 42),
                            )
                        ],
                        type=ast.NamedType(
                            name=ast.Name(value="String", loc=loc(45, 51)),
                            loc=loc(45, 51),
                        ),
                        directives=[],
                        loc=loc(16, 51),
                    )
                ],
                loc=loc(1, 53),
            )
        ],
        loc=loc(1, 53),
    )

    assert doc == expected
def test_parses_simple_field_with_list_arg():
    # type: () -> None
    body = """
type Hello {
  world(things: [String]): String
}"""
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(
        definitions=[
            ast.ObjectTypeDefinition(
                name=ast.Name(value="Hello", loc=loc(6, 11)),
                interfaces=[],
                directives=[],
                fields=[
                    ast.FieldDefinition(
                        name=ast.Name(value="world", loc=loc(16, 21)),
                        arguments=[
                            ast.InputValueDefinition(
                                name=ast.Name(value="things", loc=loc(22, 28)),
                                type=ast.ListType(
                                    type=ast.NamedType(
                                        name=ast.Name(value="String",
                                                      loc=loc(31, 37)),
                                        loc=loc(31, 37),
                                    ),
                                    loc=loc(30, 38),
                                ),
                                default_value=None,
                                directives=[],
                                loc=loc(22, 38),
                            )
                        ],
                        type=ast.NamedType(
                            name=ast.Name(value="String", loc=loc(41, 47)),
                            loc=loc(41, 47),
                        ),
                        directives=[],
                        loc=loc(16, 47),
                    )
                ],
                loc=loc(1, 49),
            )
        ],
        loc=loc(1, 49),
    )
    assert doc == expected
def test_parses_union_with_two_types():
    body = 'union Hello = Wo | Rld'
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(definitions=[
        ast.UnionTypeDefinition(
            name=ast.Name(value='Hello', loc=loc(6, 11)),
            types=[
                ast.NamedType(name=ast.Name(value='Wo', loc=loc(14, 16)),
                              loc=loc(14, 16)),
                ast.NamedType(name=ast.Name(value='Rld', loc=loc(19, 22)),
                              loc=loc(19, 22))
            ],
            loc=loc(0, 22))
    ],
                            loc=loc(0, 22))
    assert doc == expected
def test_parses_simple_type_inheriting_multiple_interfaces():
    body = 'type Hello implements Wo, rld { }'
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(definitions=[
        ast.ObjectTypeDefinition(
            name=ast.Name(value='Hello', loc=loc(5, 10)),
            interfaces=[
                ast.NamedType(name=ast.Name(value='Wo', loc=loc(22, 24)),
                              loc=loc(22, 24)),
                ast.NamedType(name=ast.Name(value='rld', loc=loc(26, 29)),
                              loc=loc(26, 29))
            ],
            fields=[],
            loc=loc(0, 33))
    ],
                            loc=loc(0, 33))
    assert doc == expected
Beispiel #28
0
def test_parses_simple_field_with_two_args():
    body = '''
type Hello {
  world(argOne: Boolean, argTwo: Int): String
}'''
    loc = create_loc_fn(body)
    doc = parse(body)
    expected = ast.Document(definitions=[
        ast.ObjectTypeDefinition(
            name=ast.Name(value='Hello', loc=loc(6, 11)),
            interfaces=[],
            directives=[],
            fields=[
                ast.FieldDefinition(
                    name=ast.Name(value='world', loc=loc(16, 21)),
                    arguments=[
                        ast.InputValueDefinition(
                            name=ast.Name(value='argOne', loc=loc(22, 28)),
                            type=ast.NamedType(name=ast.Name(value='Boolean',
                                                             loc=loc(30, 37)),
                                               loc=loc(30, 37)),
                            default_value=None,
                            directives=[],
                            loc=loc(22, 37)),
                        ast.InputValueDefinition(
                            name=ast.Name(value='argTwo', loc=loc(39, 45)),
                            type=ast.NamedType(name=ast.Name(value='Int',
                                                             loc=loc(47, 50)),
                                               loc=loc(47, 50)),
                            default_value=None,
                            directives=[],
                            loc=loc(39, 50))
                    ],
                    type=ast.NamedType(name=ast.Name(value='String',
                                                     loc=loc(53, 59)),
                                       loc=loc(53, 59)),
                    directives=[],
                    loc=loc(16, 59))
            ],
            loc=loc(1, 61))
    ],
                            loc=loc(1, 61))
    assert doc == expected
def test_parses_null_value_in_list():
    result = parse('{ fieldWithObjectInput(input: {b: ["A", null, "C"], c: "C"}) }')
    assert result == ast.Document(
        definitions=[
            ast.OperationDefinition(
                operation='query', name=None, variable_definitions=None, directives=[],
                selection_set=ast.SelectionSet(
                    selections=[
                        ast.Field(
                            alias=None,
                            name=ast.Name(value=u'fieldWithObjectInput'),
                            directives=[],
                            selection_set=None,
                            arguments=[
                                ast.Argument(
                                    name=ast.Name(value=u'input'),
                                    value=ast.ObjectValue(
                                        fields=[
                                            ast.ObjectField(
                                                name=ast.Name(value=u'b'),
                                                value=ast.ListValue(
                                                    values=[
                                                        ast.StringValue(value=u'A'),
                                                        ast.NullValue(),
                                                        ast.StringValue(value=u'C'),
                                                    ],
                                                ),
                                            ),
                                            ast.ObjectField(
                                                name=ast.Name(value=u'c'),
                                                value=ast.StringValue(value=u'C'),
                                            ),
                                        ]
                                    ),
                                ),
                            ],
                        ),
                    ],
                ),
            ),
        ],
    )
Beispiel #30
0
        def view_func():
            variable_values = self.get_variable_values()

            field_selection_set = self._get_field_selection_set(
                field, include_node=True)

            if hasattr(field.type, 'graphene_type') and issubclass(
                    field.type.graphene_type, Node):
                _type_name, _id = Node.from_global_id(variable_values['id'])
                node_type = schema.get_type(_type_name)
                inline_selection = graphql_ast.InlineFragment(
                    type_condition=graphql_ast.NamedType(name=graphql_ast.Name(
                        value=_type_name)),
                    selection_set=self._get_field_selection_set(
                        GraphQLField(node_type), include_node=True))
                field_selection_set.selections.append(inline_selection)

            document_ast = graphql_ast.Document([
                graphql_ast.OperationDefinition(
                    operation=operation,
                    variable_definitions=variable_definitions,
                    selection_set=graphql_ast.SelectionSet(selections=[
                        graphql_ast.Field(name=graphql_ast.Name(
                            value=field_name),
                                          arguments=arguments,
                                          selection_set=field_selection_set)
                    ]))
            ])

            execution_results = schema.execute(document_ast,
                                               variable_values=variable_values)

            # TODO custom encoder that positions data[field_name] at data
            result, status_code = encode_execution_results(
                [execution_results],
                is_batch=False,
                format_error=default_format_error,
                encode=json_encode)

            return Response(result,
                            status=status_code,
                            content_type='application/json')