Итак, я пытаюсь написать скрипт 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-строки, именованное форматирование и любой другой трюк, который я знаю.
Так что я буду благодарен, если кто-нибудь укажет мне общее направление.