Skip to content

Commit cd8cf3a

Browse files
committed
Updating examples, no longer sending return_money_in_micros in AdWords v201406.
1 parent 2d61b22 commit cd8cf3a

File tree

8 files changed

+76
-36
lines changed

8 files changed

+76
-36
lines changed

ChangeLog

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
2.0.0 - 07/22/2014
2+
=================
3+
* AdGroups/Campaigns no longer renamed on remove/delete in examples, obsolete.
4+
* GoogleAdsValueError now thrown when returnMoneyInMicros is sent with v201406.
5+
16
1.0.7 - 07/7/2014
27
=================
38
* Added support for v201406 of the AdWords/DoubleClick Ad Exchange Client

examples/adwords/v201402/basic_operations/delete_ad_group.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@
2929
__author__ = ('[email protected] (Kevin Winter)'
3030
'Joseph DiLallo')
3131

32-
from datetime import datetime
33-
3432
from googleads import adwords
3533

3634

@@ -46,10 +44,6 @@ def main(client, ad_group_id):
4644
'operator': 'SET',
4745
'operand': {
4846
'id': ad_group_id,
49-
# We recommend including the original name when renaming before
50-
# delete.
51-
'name': ('Deleted on %s' %
52-
datetime.today().strftime('%Y%m%d %H:%M:%S.%f')),
5347
'status': 'DELETED'
5448
}
5549
}]

examples/adwords/v201402/basic_operations/delete_campaign.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@
2929
__author__ = ('[email protected] (Kevin Winter)'
3030
'Joseph DiLallo')
3131

32-
from datetime import datetime
33-
3432
from googleads import adwords
3533

3634

@@ -46,10 +44,6 @@ def main(client, campaign_id):
4644
'operator': 'SET',
4745
'operand': {
4846
'id': campaign_id,
49-
# We recommend including the original name when renaming before
50-
# delete.
51-
'name': ('Deleted on %s' %
52-
datetime.today().strftime('%Y%m%d %H:%M:%S.%f')),
5347
'status': 'DELETED'
5448
}
5549
}]

examples/adwords/v201406/basic_operations/remove_ad_group.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@
2929
__author__ = ('[email protected] (Kevin Winter)'
3030
'Joseph DiLallo')
3131

32-
from datetime import datetime
33-
3432
from googleads import adwords
3533

3634

@@ -46,10 +44,6 @@ def main(client, ad_group_id):
4644
'operator': 'SET',
4745
'operand': {
4846
'id': ad_group_id,
49-
# We recommend including the original name when renaming before
50-
# delete.
51-
'name': ('Removed on %s' %
52-
datetime.today().strftime('%Y%m%d %H:%M:%S.%f')),
5347
'status': 'REMOVED'
5448
}
5549
}]

examples/adwords/v201406/basic_operations/remove_campaign.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@
2929
__author__ = ('[email protected] (Kevin Winter)'
3030
'Joseph DiLallo')
3131

32-
from datetime import datetime
33-
3432
from googleads import adwords
3533

3634

@@ -46,10 +44,6 @@ def main(client, campaign_id):
4644
'operator': 'SET',
4745
'operand': {
4846
'id': campaign_id,
49-
# We recommend including the original name when renaming before
50-
# delete.
51-
'name': ('Removed on %s' %
52-
datetime.today().strftime('%Y%m%d %H:%M:%S.%f')),
5347
'status': 'REMOVED'
5448
}
5549
}]

googleads/adwords.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@
116116

117117
# The endpoint used by default when making AdWords API requests.
118118
_DEFAULT_ENDPOINT = 'https://adwords.google.com'
119+
# The final version where return_money_in_micros is accepted.
120+
_FINAL_RETURN_MONEY_IN_MICROS_VERSION = 'v201402'
119121

120122

121123
class AdWordsClient(object):
@@ -320,7 +322,20 @@ def SetHeaders(self, suds_client):
320322
headers=self._adwords_client.oauth2_client.CreateHttpHeader())
321323

322324
def GetReportDownloadHeaders(self, return_money_in_micros=None):
323-
"""Returns a dictionary of headers for a report download request."""
325+
"""Returns a dictionary of headers for a report download request.
326+
327+
Args:
328+
return_money_in_micros: A boolean indicating whether money should be
329+
represented as micros in reports. If None is supplied the AdWords
330+
server will use its default value, which is currently True.
331+
332+
Returns:
333+
A dictionary containing the headers configured for downloading a report.
334+
335+
Raises:
336+
GoogleAdsValueError: if return_money_in_micros used with incompatible
337+
version.
338+
"""
324339
headers = self._adwords_client.oauth2_client.CreateHttpHeader()
325340
headers.update({
326341
'Content-type': self._CONTENT_TYPE,
@@ -329,8 +344,13 @@ def GetReportDownloadHeaders(self, return_money_in_micros=None):
329344
'User-Agent': ''.join([self._adwords_client.user_agent, self._LIB_SIG,
330345
',gzip'])
331346
})
332-
if return_money_in_micros is not None and self._version != 'v201406':
333-
headers.update({'returnMoneyInMicros': str(return_money_in_micros)})
347+
if return_money_in_micros is not None:
348+
if self._version == _FINAL_RETURN_MONEY_IN_MICROS_VERSION:
349+
headers.update({'returnMoneyInMicros': str(return_money_in_micros)})
350+
else:
351+
raise googleads.errors.GoogleAdsValueError('returnMoneyInMicros isn\'t'
352+
'supported in this version.')
353+
334354
return headers
335355

336356

googleads/common.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import googleads.errors
2727
import googleads.oauth2
2828

29-
VERSION = '1.0.7'
29+
VERSION = '2.0.0'
3030
_COMMON_LIB_SIG = 'googleads/%s' % VERSION
3131
_PYTHON_VERSION = 'Python/%d.%d' % (sys.version_info[0], sys.version_info[1])
3232

tests/adwords_test.py

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,18 @@
3535

3636
PYTHON2 = sys.version_info[0] == 2
3737
URL_REQUEST_PATH = ('urllib2' if PYTHON2 else 'urllib.request')
38+
CURRENT_VERSION = sorted(googleads.adwords._SERVICE_MAP.keys())[-1]
3839

3940

4041
class AdWordsHeaderHandlerTest(unittest.TestCase):
4142
"""Tests for the googleads.adwords._AdWordsHeaderHandler class."""
4243

4344
def setUp(self):
4445
self.adwords_client = mock.Mock()
46+
self.header_handler_v201402 = googleads.adwords._AdWordsHeaderHandler(
47+
self.adwords_client, 'v201402')
4548
self.header_handler = googleads.adwords._AdWordsHeaderHandler(
46-
self.adwords_client, 'v12345')
49+
self.adwords_client, CURRENT_VERSION)
4750

4851
def testSetHeaders(self):
4952
suds_client = mock.Mock()
@@ -65,7 +68,8 @@ def testSetHeaders(self):
6568

6669
# Check that the SOAP header has the correct values.
6770
suds_client.factory.create.assert_called_once_with(
68-
'{https://adwords.google.com/api/adwords/cm/v12345}SoapHeader')
71+
'{https://adwords.google.com/api/adwords/cm/%s}SoapHeader' %
72+
CURRENT_VERSION)
6973
soap_header = suds_client.factory.create.return_value
7074
self.assertEqual(ccid, soap_header.clientCustomerId)
7175
self.assertEqual(dev_token, soap_header.developerToken)
@@ -79,7 +83,7 @@ def testSetHeaders(self):
7983
suds_client.set_options.assert_any_call(
8084
soapheaders=soap_header, headers=oauth_header)
8185

82-
def testGetReportDownloadHeaders(self):
86+
def testGetReportDownloadHeaders_v201402(self):
8387
ccid = 'client customer id'
8488
dev_token = 'developer token'
8589
user_agent = 'user agent!'
@@ -103,14 +107,15 @@ def testGetReportDownloadHeaders(self):
103107
# Check that returnMoneyInMicros works when set to true.
104108
expected_return_value['returnMoneyInMicros'] = 'True'
105109
self.assertEqual(expected_return_value,
106-
self.header_handler.GetReportDownloadHeaders(True))
110+
self.header_handler_v201402.GetReportDownloadHeaders(True))
107111

108112
# Check that returnMoneyInMicros works when set to false.
109113
expected_return_value['returnMoneyInMicros'] = 'False'
110114
self.adwords_client.oauth2_client.CreateHttpHeader.return_value = dict(
111115
oauth_header)
112116
self.assertEqual(expected_return_value,
113-
self.header_handler.GetReportDownloadHeaders(False))
117+
self.header_handler_v201402.GetReportDownloadHeaders(False)
118+
)
114119

115120
# Default returnMoneyInMicros value is not included in the headers.
116121
del expected_return_value['returnMoneyInMicros']
@@ -119,6 +124,40 @@ def testGetReportDownloadHeaders(self):
119124
self.assertEqual(expected_return_value,
120125
self.header_handler.GetReportDownloadHeaders())
121126

127+
def testGetReportDownloadHeaders_v201406(self):
128+
ccid = 'client customer id'
129+
dev_token = 'developer token'
130+
user_agent = 'user agent!'
131+
oauth_header = {'Authorization': 'header'}
132+
self.adwords_client.client_customer_id = ccid
133+
self.adwords_client.developer_token = dev_token
134+
self.adwords_client.user_agent = user_agent
135+
self.adwords_client.oauth2_client.CreateHttpHeader.return_value = dict(
136+
oauth_header)
137+
expected_return_value = {
138+
'Content-type': 'application/x-www-form-urlencoded',
139+
'developerToken': dev_token,
140+
'clientCustomerId': ccid,
141+
'Authorization': 'header',
142+
'User-Agent': ''.join([
143+
user_agent, googleads.adwords._AdWordsHeaderHandler._LIB_SIG,
144+
',gzip'])
145+
}
146+
147+
# Check that returnMoneyInMicros fails when set to true.
148+
self.assertRaises(googleads.errors.GoogleAdsValueError,
149+
self.header_handler.GetReportDownloadHeaders, True)
150+
151+
# Check that returnMoneyInMicros fails when set to false.
152+
self.assertRaises(googleads.errors.GoogleAdsValueError,
153+
self.header_handler.GetReportDownloadHeaders, False)
154+
155+
# Check that it works when returnMoneyInMicros not set.
156+
self.adwords_client.oauth2_client.CreateHttpHeader.return_value = dict(
157+
oauth_header)
158+
self.assertEqual(expected_return_value,
159+
self.header_handler.GetReportDownloadHeaders())
160+
122161

123162
class AdWordsClientTest(unittest.TestCase):
124163
"""Tests for the googleads.adwords.AdWordsClient class."""
@@ -144,7 +183,7 @@ def testLoadFromStorage(self):
144183
googleads.adwords.AdWordsClient)
145184

146185
def testGetService_success(self):
147-
version = googleads.adwords._SERVICE_MAP.keys()[0]
186+
version = CURRENT_VERSION
148187
service = googleads.adwords._SERVICE_MAP[version].keys()[0]
149188
namespace = googleads.adwords._SERVICE_MAP[version][service]
150189

@@ -172,7 +211,7 @@ def testGetService_success(self):
172211
self.assertIsInstance(suds_service, googleads.common.SudsServiceProxy)
173212

174213
def testGetService_badService(self):
175-
version = googleads.adwords._SERVICE_MAP.keys()[0]
214+
version = CURRENT_VERSION
176215
self.assertRaises(
177216
googleads.errors.GoogleAdsValueError, self.adwords_client.GetService,
178217
'GYIVyievfyiovslf', version)
@@ -195,7 +234,7 @@ class ReportDownloaderTest(unittest.TestCase):
195234
"""Tests for the googleads.adwords.ReportDownloader class."""
196235

197236
def setUp(self):
198-
self.version = googleads.adwords._SERVICE_MAP.keys()[-1]
237+
self.version = CURRENT_VERSION
199238
self.marshaller = mock.Mock()
200239
self.header_handler = mock.Mock()
201240
self.adwords_client = mock.Mock()

0 commit comments

Comments
 (0)