Skip to content

Commit 126ced4

Browse files
author
Nicholas Chen
committed
"Fixing issue #55"
1 parent 6736f60 commit 126ced4

File tree

5 files changed

+66
-7
lines changed

5 files changed

+66
-7
lines changed

ChangeLog

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
3.4.1 - 5/22/2015
2+
* Fixed issue #55
3+
* Fixed issue #57
4+
15
3.4.0 - 5/19/2015
2-
* Added support for v201505.
3-
* Removed examples for v201405.
6+
* Added support for DFP v201505.
7+
* Removed examples for DFP v201405.
48

59
3.3.0 - 3/25/2015
610
* Fixed issue #47.

examples/adwords/v201502/extensions/add_site_links_using_feeds.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ def main(client, campaign_id):
122122
},
123123
{
124124
'feedAttributeId': sitelinks_data['finalUrlFeedId'],
125-
'stringValue': item['finalUrls']
125+
'stringValues': [item['finalUrls']]
126126
},
127127
{
128128
'feedAttributeId': sitelinks_data['line1FeedId'],

googleads/adwords.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ def DownloadReportAsString(self, report_definition,
586586
response = self._DownloadReportAsStream(
587587
self._SerializeReportDefinition(report_definition),
588588
skip_report_header, skip_column_header, skip_report_summary)
589-
return response.read().decode()
589+
return response.read().decode('utf-8')
590590
finally:
591591
if response:
592592
response.close()
@@ -632,7 +632,7 @@ def DownloadReportAsStringWithAwql(self, query, file_format,
632632
response = self.DownloadReportAsStreamWithAwql(
633633
query, file_format, skip_report_header, skip_column_header,
634634
skip_report_summary)
635-
return response.read().decode()
635+
return response.read().decode('utf-8')
636636
finally:
637637
if response:
638638
response.close()

googleads/common.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import googleads.errors
2929
import googleads.oauth2
3030

31-
VERSION = '3.4.0'
31+
VERSION = '3.4.1'
3232
_COMMON_LIB_SIG = 'googleads/%s' % VERSION
3333
_PROXY_YAML_KEY = 'proxy_info'
3434
_PYTHON_VERSION = 'Python/%d.%d' % (sys.version_info[0], sys.version_info[1])

tests/adwords_test.py

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,61 @@ def testDownloadReport(self):
279279
self.header_handler.GetReportDownloadHeaders.assert_called_once_with(
280280
None, None, None)
281281

282+
def testDownloadReportAsString(self):
283+
report_definition = {'table': 'campaigns',
284+
'downloadFormat': 'CSV'}
285+
serialized_report = 'nuinbwuign'
286+
post_body = urllib.urlencode({'__rdxml': serialized_report})
287+
if not PYTHON2:
288+
post_body = bytes(post_body, 'utf-8')
289+
headers = {'Authorization': 'ya29.something'}
290+
self.header_handler.GetReportDownloadHeaders.return_value = headers
291+
content = u'CONTENT STRING アングリーバード'
292+
fake_request = io.BytesIO()
293+
fake_request.write(content.encode('utf-8') if PYTHON2
294+
else bytes(content, 'utf-8'))
295+
fake_request.seek(0)
296+
self.marshaller.process.return_value = serialized_report
297+
298+
with mock.patch('suds.mx.Content') as mock_content:
299+
with mock.patch(URL_REQUEST_PATH + '.Request') as mock_request:
300+
self.opener.open.return_value = fake_request
301+
s = self.report_downloader.DownloadReportAsString(report_definition)
302+
mock_request.assert_called_once_with(
303+
('https://adwords.google.com/api/adwords/reportdownload/%s'
304+
% self.version), post_body, headers)
305+
self.opener.open.assert_called_once_with(mock_request.return_value)
306+
self.marshaller.process.assert_called_once_with(
307+
mock_content.return_value)
308+
self.assertEqual(content, s)
309+
self.header_handler.GetReportDownloadHeaders.assert_called_once_with(
310+
None, None, None)
311+
312+
def testDownloadReportAsStringWithAwql(self):
313+
query = 'SELECT Id FROM Campaign WHERE NAME LIKE \'%Test%\''
314+
file_format = 'CSV'
315+
post_body = urllib.urlencode({'__fmt': file_format, '__rdquery': query})
316+
if not PYTHON2:
317+
post_body = bytes(post_body, 'utf-8')
318+
headers = {'Authorization': 'ya29.something'}
319+
self.header_handler.GetReportDownloadHeaders.return_value = headers
320+
content = u'CONTENT STRING アングリーバード'
321+
fake_request = io.BytesIO()
322+
fake_request.write(content.encode('utf-8') if PYTHON2
323+
else bytes(content, 'utf-8'))
324+
fake_request.seek(0)
325+
with mock.patch(URL_REQUEST_PATH + '.Request') as mock_request:
326+
self.opener.open.return_value = fake_request
327+
s = self.report_downloader.DownloadReportAsStringWithAwql(query,
328+
file_format)
329+
mock_request.assert_called_once_with(
330+
('https://adwords.google.com/api/adwords/reportdownload/%s'
331+
% self.version), post_body, headers)
332+
self.opener.open.assert_called_once_with(mock_request.return_value)
333+
self.assertEqual(content, s)
334+
self.header_handler.GetReportDownloadHeaders.assert_called_once_with(
335+
None, None, None)
336+
282337
def testDownloadReportCheckFormat_CSVStringSuccess(self):
283338
output_file = io.StringIO()
284339

@@ -359,7 +414,7 @@ def testDownloadReportWithAwql(self):
359414
post_body = bytes(post_body, 'utf-8')
360415
headers = {'Authorization': 'ya29.something'}
361416
self.header_handler.GetReportDownloadHeaders.return_value = headers
362-
content = u'CONTENT STRING'
417+
content = u'CONTENT STRING 广告客户'
363418
fake_request = io.StringIO() if PYTHON2 else io.BytesIO()
364419
fake_request.write(content if PYTHON2 else bytes(content, 'utf-8'))
365420
fake_request.seek(0)

0 commit comments

Comments
 (0)