Python мутация многострочного графика с переменными - KeyError - PullRequest
0 голосов
/ 07 февраля 2020

Итак, я пытаюсь написать скрипт graphql python, который будет отправлять мутации в мой бэкэнд. Поэтому я создал «клиентский» модуль (на основе https://github.com/prisma-labs/python-graphql-client) для экспорта класса GraphQLClient, который выглядит следующим образом:

import urllib.request
import json


class GraphQLClient:
    def __init__(self, endpoint):
        self.endpoint = endpoint

    def execute(self, query, variables=None):
        return self._send(query, variables)

    def _send(self, query, variables):
        data = {'query': query,
                'variables': variables}
        headers = {'Accept': 'application/json',
                   'Content-Type': 'application/json'}

        req = urllib.request.Request(
            self.endpoint, json.dumps(data).encode('utf-8'), headers)

        try:
            response = urllib.request.urlopen(req)
            return response.read().decode('utf-8')
        except urllib.error.HTTPError as e:
            print((e.read()))
            print('')
            raise e

Пока все хорошо. Мой основной код пока будет выглядеть так, просто чтобы проверить, все ли работает:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from client import GraphQLClient


if __name__ == "__main__":
    playerId = 3
    _round = 3
    number = 5
    modifier = 3

    client = GraphQLClient('http://localhost:4000/graphql')

    result = client.execute('''
                            {
                                allPlayers {
                                    id
                                    name
                                    nickname
                                }
                            }
                            ''')

    result2 = client.execute('''
                                 mutation{
                                     createThrow(playerId: {}, round: {}, number:{}, modifier:{}) {
                                         id
                                         round
                                         number
                                         modifier
                                     }
                                 }
                             '''.format(playerId, _round, number, modifier))
    print(result)
    print(result2)

В то время как запрос allPlayers фактически вернет данные, мутация для вставки броска не будет работать и завершится ошибкой со следующей ошибкой Traceback:

Traceback (most recent call last):
  File "./input.py", line 25, in <module>
    result2 = client.execute('''
KeyError: '\n                                     createThrow(playerId'

Я пробую это с тех пор, как скажу, но не могу понять, как это сделать. Когда я жестко кодирую переменные в запросе вместо форматирования многострочной строки, все будет работать нормально. Так что мутация basi c будет работать. Проблема должна заключаться в форматировании строки с переменными.

Я также пробовал f-строки, именованное форматирование и любой другой трюк, который я знаю.

Так что я буду благодарен, если кто-нибудь укажет мне общее направление.

1 Ответ

1 голос
/ 07 февраля 2020

{ ссылка }

Переменные в графике ДОЛЖНЫ ОПРЕДЕЛЯТЬСЯ ОТДЕЛЬНО

formatting the string with variables

... is ABUSING GRAPHQL !!!

В этом случае это должен быть второй параметр client.execute

Read docs
Python пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...