Exemplo n.º 1
0
    def execute_graphql_request(self, request):
        query, variables, operation_name = self.get_graphql_params(request, self.parse_body(request))

        if not query:
            raise HttpError(HttpResponseBadRequest('Must provide query string.'))

        source = Source(query, name='GraphQL request')

        try:
            document_ast = parse(source)
        except Exception as e:
            return ExecutionResult(errors=[e], invalid=True)

        if request.method.lower() == 'get':
            operation_ast = get_operation_ast(document_ast, operation_name)
            if operation_ast and operation_ast.operation != 'query':
                raise HttpError(HttpResponseNotAllowed(
                    ['POST'], 'Can only perform a {} operation from a POST request.'.format(operation_ast.operation)
                ))

        try:
            return self.execute(
                document_ast,
                self.get_root_value(request),
                variables,
                operation_name=operation_name,
                request_context=self.get_request_context(request)
            )
        except Exception as e:
            return ExecutionResult(errors=[e], invalid=True)
Exemplo n.º 2
0
def test_gets_an_operation_from_a_document_with_named_mutation_operation():
    doc = parse('mutation Test { field }')
    assert get_operation_ast(doc) == doc.definitions[0]
Exemplo n.º 3
0
def test_does_not_get_fragment_with_same_name_query():
    doc = parse('fragment Foo on Type { field } query Foo { field }')
    assert get_operation_ast(doc) == doc.definitions[1]
    assert get_operation_ast(doc, 'Foo') == doc.definitions[1]
Exemplo n.º 4
0
def test_does_not_get_fragment():
    doc = parse('fragment Foo on Type { field }')
    assert not get_operation_ast(doc)
    assert not get_operation_ast(doc, 'Foo')
Exemplo n.º 5
0
def test_gets_an_operation_from_a_simple_document():
    doc = parse('{ field }')
    assert get_operation_ast(doc) == doc.definitions[0]
Exemplo n.º 6
0
def test_gets_named_operation():
    doc = parse('query TestQ { field } mutation TestM { field } subscription TestS { field }')
    assert get_operation_ast(doc, 'TestQ') == doc.definitions[0]
    assert get_operation_ast(doc, 'TestM') == doc.definitions[1]
    assert get_operation_ast(doc, 'TestS') == doc.definitions[2]
Exemplo n.º 7
0
def test_does_not_get_misnamed_operation():
    doc = parse('query TestQ { field } mutation TestM { field } subscription TestSub { field }')
    assert not get_operation_ast(doc, 'Unknown')
Exemplo n.º 8
0
def test_does_not_get_ambiguous_named_operation():
    doc = parse('query TestQ { field } mutation TestM { field } subscription TestSub { field }')
    assert not get_operation_ast(doc)
Exemplo n.º 9
0
def test_does_not_get_missing_operation():
    doc = parse('{ field } mutation Test { field }')
    assert not get_operation_ast(doc)