8000 Simplified logic · graphql-python/flask-graphql@3372a7b · GitHub
[go: up one dir, main page]

Skip to content

Commit 3372a7b

Browse files
committed
Simplified logic
1 parent 724695a commit 3372a7b

File tree

2 files changed

+26
-34
lines changed

2 files changed

+26
-34
lines changed

flask_graphql/graphqlview.py

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,21 @@ def dispatch_request(self):
7373
raise HttpError(MethodNotAllowed(['GET', 'POST'], 'GraphQL only supports GET and POST requests.'))
7474

7575
data = self.parse_body(request)
76+
7677
show_graphiql = self.graphiql and self.can_display_graphiql(data)
7778

78-
if self.batch:
79+
if isinstance(data, list):
80+
if not self.batch or show_graphiql:
81+
raise HttpError(BadRequest('Batch requests are not allowed.'))
82+
7983
responses = [self.get_response(request, entry) for entry in data]
80-
result = '[{}]'.format(','.join([response[0] for response in responses]))
81-
status_code = max(responses, key=lambda response: response[1])[1]
84+
response, status_codes = zip(*responses)
85+
status_code = max(status_codes)
8286
else:
83-
result, status_code = self.get_response(request, data, show_graphiql)
87+
response, status_code = self.get_response(request, data, show_graphiql)
88+
89+
pretty = self.pretty or show_graphiql or request.args.get('pretty')
90+
result = self.json_encode(response, pretty)
8491

8592
if show_graphiql:
8693
query, variables, operation_name, id = self.get_graphql_params(request, data)
@@ -99,7 +106,7 @@ def dispatch_request(self):
99106

100107
except HttpError as e:
101108
return Response(
102-
self.json_encode(request, {
109+
self.json_encode({
103110
'errors': [self.format_error(e)]
104111
}),
105112
status=e.response.code,
@@ -132,20 +139,15 @@ def get_response(self, request, data, show_graphiql=False):
132139
response['data'] = execution_result.data
133140

134141
if self.batch:
135-
response = {
136-
'id': id,
137-
'payload': response,
138-
'status': status_code,
139-
}
142+
response['id'] = id
140143

141-
result = self.json_encode(request, response, show_graphiql)
142144
else:
143-
result = None
145+
response = None
144146

145-
return result, status_code
147+
return response, status_code
146148

147-
def json_encode(self, request, d, show_graphiql=False):
148-
pretty = self.pretty or show_graphiql or request.args.get('pretty')
149+
@staticmethod
150+
def json_encode(d, pretty=False):
149151
if not pretty:
150152
return json.dumps(d, separators=(',', ':'))
151153

@@ -160,12 +162,7 @@ def parse_body(self, request):
160162

161163
elif content_type == 'application/json':
162164
try:
163-
request_json = json.loads(request.data.decode('utf8'))
164-
if self.batch:
165-
assert isinstance(request_json, list)
166-
else:
167-
assert isinstance(request_json, dict)
168-
return request_json
165+
return json.loads(request.data.decode('utf8'))
169166
except:
170167
raise HttpError(BadRequest('POST body sent invalid JSON.'))
171168

tests/test_graphqlview.py

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -376,12 +376,12 @@ def test_handles_errors_caused_by_a_lack_of_query(client):
376376
}
377377

378378

379-
def test_handles_invalid_json_bodies(client):
379+
def test_handles_batch_correctly_if_is_disabled(client):
380380
response = client.post(url_string(), data='[]', content_type='application/json')
381381

382382
assert response.status_code == 400
383383
assert response_json(response) == {
384-
'errors': [{'message': 'POST body sent invalid JSON.'}]
384+
'errors': [{'message': 'Batch requests are not allowed.'}]
385385
}
386386

387387

@@ -477,8 +477,7 @@ def test_batch_allows_post_with_json_encoding(client):
477477
assert response.status_code == 200
478478
assert response_json(response) == [{
479479
'id': 1,
480-
'payload': { 'data': {'test': "Hello World"} },
481-
'status': 200,
480+
'data': {'test': "Hello World"}
482481
}]
483482

484483

@@ -497,8 +496,7 @@ def test_batch_supports_post_json_query_with_json_variables(client):
497496
assert response.status_code == 200
498497
assert response_json(response) == [{
499498
'id': 1,
500-
'payload': { 'data': {'test': "Hello Dolly"} },
501-
'status': 200,
499+
'data': {'test': "Hello Dolly"}
502500
}]
503501

504502

@@ -524,11 +522,8 @@ def test_batch_allows_post_with_operation_name(client):
524522
assert response.status_code == 200
525523
assert response_json(response) == [{
526524
'id': 1,
527-
'payload': {
528-
'data': {
529-
'test': 'Hello World',
530-
'shared': 'Hello Everyone'
531-
}
532-
},
533-
'status': 200,
525+
'data': {
526+
'test': 'Hello World',
527+
'shared': 'Hello Everyone'
528+
}
534529
}]

0 commit comments

Comments
 (0)
0