-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathget campaign ID.py
176 lines (148 loc) · 6.75 KB
/
get campaign ID.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#!/usr/bin/env python
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""This example illustrates the use of custom client timeouts.
Even though this example demonstrates custom client timeouts in the context of
streaming and unary calls separately, the behavior can be applied to any request
method exposed by this library.
For more information about the concepts, see this documentation:
https://grpc.io/docs/what-is-grpc/core-concepts/#rpc-life-cycle
"""
import argparse
import sys
from google.ads.googleads.client import GoogleAdsClient
from google.ads.googleads.errors import GoogleAdsException
from google.api_core.exceptions import DeadlineExceeded
from google.api_core.retry import Retry
_CLIENT_TIMEOUT_SECONDS = 5 * 60 # 5 minutes.
_QUERY = "SELECT campaign.id FROM campaign"
def main(client, customer_id):
"""Main method, to run this code example as a standalone application."""
make_server_streaming_call(client, customer_id)
make_unary_call(client, customer_id)
# [START set_custom_client_timeouts]
def make_server_streaming_call(client, customer_id):
"""Makes a server streaming call using a custom client timeout.
Args:
client: An initialized GoogleAds client.
customer_id: The str Google Ads customer ID.
"""
ga_service = client.get_service("GoogleAdsService")
campaign_ids = []
try:
search_request = client.get_type("SearchGoogleAdsStreamRequest")
search_request.customer_id = customer_id
search_request.query = _QUERY
stream = ga_service.search_stream(
request=search_request,
# When making any request, an optional "timeout" parameter can be
# provided to specify a client-side response deadline in seconds.
# If not set, then no timeout will be enforced by the client and
# the channel will remain open until the response is completed or
# severed, either manually or by the server.
timeout=_CLIENT_TIMEOUT_SECONDS,
)
for batch in stream:
for row in batch.results:
campaign_ids.append(row.campaign.id)
print("The server streaming call completed before the timeout.")
except DeadlineExceeded as ex:
print("The server streaming call did not complete before the timeout.")
sys.exit(1)
except GoogleAdsException as ex:
print(
f"Request with ID '{ex.request_id}' failed with status "
f"'{ex.error.code().name}' and includes the following errors:"
)
for error in ex.failure.errors:
print(f"\tError with message '{error.message}'.")
if error.location:
for field_path_element in error.location.field_path_elements:
print(f"\t\tOn field: {field_path_element.field_name}")
sys.exit(1)
print(f"Total # of campaign IDs retrieved: {len(campaign_ids)}")
# [END set_custom_client_timeouts]
# [START set_custom_client_timeouts_1]
def make_unary_call(client, customer_id):
"""Makes a unary call using a custom client timeout.
Args:
client: An initialized GoogleAds client.
customer_id: The Google Ads customer ID.
"""
ga_service = client.get_service("GoogleAdsService")
campaign_ids = []
try:
search_request = client.get_type("SearchGoogleAdsRequest")
search_request.customer_id = customer_id
search_request.query = _QUERY
results = ga_service.search(
request=search_request,
# When making any request, an optional "retry" parameter can be
# provided to specify its retry behavior. Complete information about
# these settings can be found here:
# https://googleapis.dev/python/google-api-core/latest/retry.html
retry=Retry(
# Sets the maximum accumulative timeout of the call; it
# includes all tries.
deadline=_CLIENT_TIMEOUT_SECONDS,
# Sets the timeout that is used for the first try to one tenth
# of the maximum accumulative timeout of the call.
# Note: This overrides the default value and can lead to
# RequestError.RPC_DEADLINE_TOO_SHORT errors when too small. We
# recommend changing the value only if necessary.
initial=_CLIENT_TIMEOUT_SECONDS / 10,
# Sets the maximum timeout that can be used for any given try
# to one fifth of the maximum accumulative timeout of the call
# (two times greater than the timeout that is needed for the
# first try).
maximum=_CLIENT_TIMEOUT_SECONDS / 5,
),
)
for row in results:
campaign_ids.append(row.campaign.id)
print("The unary call completed before the timeout.")
except DeadlineExceeded as ex:
print("The unary call did not complete before the timeout.")
sys.exit(1)
except GoogleAdsException as ex:
print(
f"Request with ID '{ex.request_id}' failed with status "
f"'{ex.error.code().name}' and includes the following errors:"
)
for error in ex.failure.errors:
print(f"\tError with message '{error.message}'.")
if error.location:
for field_path_element in error.location.field_path_elements:
print(f"\t\tOn field: {field_path_element.field_name}")
sys.exit(1)
print(f"Total # of campaign IDs retrieved: {len(campaign_ids)}")
# [END set_custom_client_timeouts_1]
if __name__ == "__main__":
# GoogleAdsClient will read the google-ads.yaml configuration file in the
# home directory if none is specified.
googleads_client = GoogleAdsClient.load_from_storage(path="google-ads.yaml",version="v15")
parser = argparse.ArgumentParser(
description="Demonstrates custom client timeouts in the context of "
"server streaming and unary calls."
)
# The following argument(s) should be provided to run the example.
parser.add_argument(
"-c",
"--customer_id",
type=str,
required=True,
help="The Google Ads customer ID.",
)
args = parser.parse_args()
main(googleads_client, args.customer_id)