Skip to content

Commit 857da54

Browse files
author
Jon Wayne Parrott
authored
Move request data from query string to body, allowing larger requests to work. (googleapis#4977)
1 parent d5d0eef commit 857da54

2 files changed

Lines changed: 69 additions & 57 deletions

File tree

translate/google/cloud/translate_v2/client.py

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import six
1919

20-
from google.cloud._helpers import _to_bytes
2120
from google.cloud.client import Client as BaseClient
2221

2322
from google.cloud.translate_v2._http import Connection
@@ -129,11 +128,13 @@ def detect_language(self, values):
129128
single_value = True
130129
values = [values]
131130

132-
query_params = []
133-
query_params.extend(('q', _to_bytes(value, 'utf-8'))
134-
for value in values)
131+
data = {
132+
'q': values,
133+
}
134+
135135
response = self._connection.api_request(
136-
method='GET', path='/detect', query_params=query_params)
136+
method='POST', path='/detect', data=data)
137+
137138
detections = response.get('data', {}).get('detections', ())
138139

139140
if len(values) != len(detections):
@@ -219,19 +220,17 @@ def translate(self, values, target_language=None, format_=None,
219220
if isinstance(customization_ids, six.string_types):
220221
customization_ids = [customization_ids]
221222

222-
query_params = [('target', target_language)]
223-
query_params.extend(('q', _to_bytes(value, 'utf-8'))
224-
for value in values)
225-
query_params.extend(('cid', cid) for cid in customization_ids)
226-
if format_ is not None:
227-
query_params.append(('format', format_))
228-
if source_language is not None:
229-
query_params.append(('source', source_language))
230-
if model is not None:
231-
query_params.append(('model', model))
223+
data = {
224+
'target': target_language,
225+
'q': values,
226+
'cid': customization_ids,
227+
'format': format_,
228+
'source': source_language,
229+
'model': model
230+
}
232231

233232
response = self._connection.api_request(
234-
method='POST', path='', query_params=query_params)
233+
method='POST', path='', data=data)
235234

236235
translations = response.get('data', {}).get('translations', ())
237236
if len(values) != len(translations):

translate/tests/unit/test_client.py

Lines changed: 54 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,12 @@ def test_detect_language_bad_result(self):
137137
# Verify requested.
138138
self.assertEqual(len(conn._requested), 1)
139139
req = conn._requested[0]
140-
self.assertEqual(req['method'], 'GET')
140+
self.assertEqual(req['method'], 'POST')
141141
self.assertEqual(req['path'], '/detect')
142-
query_params = [
143-
('q', value.encode('utf-8')),
144-
]
145-
self.assertEqual(req['query_params'], query_params)
142+
expected_data = {
143+
'q': [value],
144+
}
145+
self.assertEqual(req['data'], expected_data)
146146

147147
def test_detect_language_single_value(self):
148148
client = self._make_one(_http=object())
@@ -166,12 +166,12 @@ def test_detect_language_single_value(self):
166166
# Verify requested.
167167
self.assertEqual(len(conn._requested), 1)
168168
req = conn._requested[0]
169-
self.assertEqual(req['method'], 'GET')
169+
self.assertEqual(req['method'], 'POST')
170170
self.assertEqual(req['path'], '/detect')
171-
query_params = [
172-
('q', value.encode('utf-8')),
173-
]
174-
self.assertEqual(req['query_params'], query_params)
171+
expected_data = {
172+
'q': [value],
173+
}
174+
self.assertEqual(req['data'], expected_data)
175175

176176
def test_detect_language_multiple_values(self):
177177
client = self._make_one(_http=object())
@@ -205,13 +205,12 @@ def test_detect_language_multiple_values(self):
205205
# Verify requested.
206206
self.assertEqual(len(conn._requested), 1)
207207
req = conn._requested[0]
208-
self.assertEqual(req['method'], 'GET')
208+
self.assertEqual(req['method'], 'POST')
209209
self.assertEqual(req['path'], '/detect')
210-
query_params = [
211-
('q', value1.encode('utf-8')),
212-
('q', value2.encode('utf-8')),
213-
]
214-
self.assertEqual(req['query_params'], query_params)
210+
expected_data = {
211+
'q': [value1, value2],
212+
}
213+
self.assertEqual(req['data'], expected_data)
215214

216215
def test_detect_language_multiple_results(self):
217216
client = self._make_one(_http=object())
@@ -251,11 +250,15 @@ def test_translate_bad_result(self):
251250
req = conn._requested[0]
252251
self.assertEqual(req['method'], 'POST')
253252
self.assertEqual(req['path'], '')
254-
query_params = [
255-
('target', 'en'),
256-
('q', value.encode('utf-8')),
257-
]
258-
self.assertEqual(req['query_params'], query_params)
253+
expected_data = {
254+
'target': 'en',
255+
'q': [value],
256+
'cid': (),
257+
'source': None,
258+
'model': None,
259+
'format': None,
260+
}
261+
self.assertEqual(req['data'], expected_data)
259262

260263
def test_translate_defaults(self):
261264
client = self._make_one(_http=object())
@@ -280,11 +283,16 @@ def test_translate_defaults(self):
280283
req = conn._requested[0]
281284
self.assertEqual(req['method'], 'POST')
282285
self.assertEqual(req['path'], '')
283-
query_params = [
284-
('target', 'en'),
285-
('q', value.encode('utf-8')),
286-
]
287-
self.assertEqual(req['query_params'], query_params)
286+
287+
expected_data = {
288+
'target': 'en',
289+
'q': [value],
290+
'cid': (),
291+
'source': None,
292+
'model': None,
293+
'format': None,
294+
}
295+
self.assertEqual(req['data'], expected_data)
288296

289297
def test_translate_multiple(self):
290298
client = self._make_one(_http=object())
@@ -315,12 +323,16 @@ def test_translate_multiple(self):
315323
req = conn._requested[0]
316324
self.assertEqual(req['method'], 'POST')
317325
self.assertEqual(req['path'], '')
318-
query_params = [
319-
('target', 'en'),
320-
('q', value1.encode('utf-8')),
321-
('q', value2.encode('utf-8')),
322-
]
323-
self.assertEqual(req['query_params'], query_params)
326+
327+
expected_data = {
328+
'target': 'en',
329+
'q': [value1, value2],
330+
'cid': (),
331+
'source': None,
332+
'model': None,
333+
'format': None,
334+
}
335+
self.assertEqual(req['data'], expected_data)
324336

325337
def test_translate_explicit(self):
326338
client = self._make_one(_http=object())
@@ -352,15 +364,16 @@ def test_translate_explicit(self):
352364
req = conn._requested[0]
353365
self.assertEqual(req['method'], 'POST')
354366
self.assertEqual(req['path'], '')
355-
query_params = [
356-
('target', target_language),
357-
('q', value.encode('utf-8')),
358-
('cid', cid),
359-
('format', format_),
360-
('source', source_language),
361-
('model', model),
362-
]
363-
self.assertEqual(req['query_params'], query_params)
367+
368+
expected_data = {
369+
'target': target_language,
370+
'q': [value],
371+
'cid': [cid],
372+
'source': source_language,
373+
'model': model,
374+
'format': format_,
375+
}
376+
self.assertEqual(req['data'], expected_data)
364377

365378

366379
class _Connection(object):

0 commit comments

Comments
 (0)