diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..21f77f45f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,37 @@
+*.idea
+*.pyc
+*.iml
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+.hypothesis/
+.pytest_cache/
+
+# Sphinx documentation
+docs/_build/
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 000000000..939e5341e
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,28 @@
+# How to Contribute
+
+We'd love to accept your patches and contributions to this project. There are
+just a few small guidelines you need to follow.
+
+## Contributor License Agreement
+
+Contributions to this project must be accompanied by a Contributor License
+Agreement. You (or your employer) retain the copyright to your contribution;
+this simply gives us permission to use and redistribute your contributions as
+part of the project. Head over to to see
+your current agreements on file or to sign a new one.
+
+You generally only need to submit a CLA once, so if you've already submitted one
+(even if it was for a different project), you probably don't need to do it
+again.
+
+## Code reviews
+
+All submissions, including submissions by project members, require review. We
+use GitHub pull requests for this purpose. Consult
+[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
+information on using pull requests.
+
+## Community Guidelines
+
+This project follows [Google's Open Source Community
+Guidelines](https://opensource.google.com/conduct/).
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 000000000..df1280513
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,2 @@
+* 0.1.0:
+- Initial release with support for Google Ads API v0.
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 000000000..724a88071
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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
+
+ http://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.
diff --git a/examples/__init__.py b/examples/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/examples/authentication/__init__.py b/examples/authentication/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/examples/authentication/authenticate_in_standalone_application.py b/examples/authentication/authenticate_in_standalone_application.py
new file mode 100644
index 000000000..1ac26042a
--- /dev/null
+++ b/examples/authentication/authenticate_in_standalone_application.py
@@ -0,0 +1,63 @@
+# Copyright 2018 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 creates an OAuth 2.0 refresh token for the Google Ads API.
+
+This illustrates how to step through the OAuth 2.0 native / installed
+application flow.
+
+It is intended to be run from the command line and requires user input.
+"""
+
+from __future__ import absolute_import
+
+import argparse
+
+from google_auth_oauthlib.flow import InstalledAppFlow
+
+
+SCOPE = u'https://www.googleapis.com/auth/adwords'
+
+
+def main(client_secrets_path, scopes):
+ flow = InstalledAppFlow.from_client_secrets_file(
+ client_secrets_path, scopes=scopes)
+
+ flow.run_console()
+
+ print('Access token: %s' % flow.credentials.token)
+ print('Refresh token: %s' % flow.credentials.refresh_token)
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser(
+ description='Generates OAuth 2.0 credentials with the specified '
+ 'client secrets file.')
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('--client_secrets_path', required=True,
+ help=('Path to the client secrets JSON file from the '
+ 'Google Developers Console that contains your '
+ 'client ID and client secret.'))
+ parser.add_argument('--additional_scopes', default=None,
+ help=('Additional scopes to apply when generating the '
+ 'refresh token. Each scope should be separated '
+ 'by a comma.'))
+ args = parser.parse_args()
+
+ configured_scopes = [SCOPE]
+
+ if args.additional_scopes:
+ configured_scopes.extend(args.additional_scopes.replace(' ', '')
+ .split(','))
+
+ main(args.client_secrets_path, configured_scopes)
diff --git a/examples/authentication/authenticate_in_web_application.py b/examples/authentication/authenticate_in_web_application.py
new file mode 100644
index 000000000..e8e122231
--- /dev/null
+++ b/examples/authentication/authenticate_in_web_application.py
@@ -0,0 +1,63 @@
+# Copyright 2018 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 creates an OAuth 2.0 refresh token for the Google Ads API.
+
+This illustrates how to step through the OAuth 2.0 native / installed
+application flow.
+
+It is intended to be run from the command line and requires user input.
+"""
+
+from __future__ import absolute_import
+
+import argparse
+
+from google_auth_oauthlib.flow import InstalledAppFlow
+
+
+SCOPE = u'https://www.googleapis.com/auth/adwords'
+
+
+def main(client_secrets_path, scopes):
+ flow = InstalledAppFlow.from_client_secrets_file(
+ client_secrets_path, scopes=scopes)
+
+ flow.run_local_server()
+
+ print('Access token: %s' % flow.credentials.token)
+ print('Refresh token: %s' % flow.credentials.refresh_token)
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser(
+ description='Generates OAuth 2.0 credentials with the specified '
+ 'client secrets file.')
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('--client_secrets_path', required=True,
+ help=('Path to the client secrets JSON file from the '
+ 'Google Developers Console that contains your '
+ 'client ID and client secret.'))
+ parser.add_argument('--additional_scopes', default=None,
+ help=('Additional scopes to apply when generating the '
+ 'refresh token. Each scope should be separated '
+ 'by a comma.'))
+ args = parser.parse_args()
+
+ configured_scopes = [SCOPE]
+
+ if args.additional_scopes:
+ configured_scopes.extend(args.additional_scopes.replace(' ', '')
+ .split(','))
+
+ main(args.client_secrets_path, configured_scopes)
diff --git a/examples/v0/__init__.py b/examples/v0/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/examples/v0/account_management/__init__.py b/examples/v0/account_management/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/examples/v0/account_management/get_account_information.py b/examples/v0/account_management/get_account_information.py
new file mode 100644
index 000000000..6cd5419b6
--- /dev/null
+++ b/examples/v0/account_management/get_account_information.py
@@ -0,0 +1,67 @@
+# Copyright 2018 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 lists information about an advertising account.
+
+For example, its name, currency, time zone, etc.
+"""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+
+
+def main(client, customer_id):
+ customer_service = client.get_service('CustomerService')
+
+ resource_name = customer_service.customer_path(customer_id)
+
+ try:
+ customer = customer_service.get_customer(resource_name=resource_name)
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ print('Customer ID: %d' % customer.id.value)
+ print('\tDescriptive name: %s' % customer.descriptive_name.value)
+ print('\tCurrency code: %s' % customer.currency_code.value)
+ print('\tTime zone: %s' % customer.time_zone.value)
+ print('\tTracking URL template: %s' % customer.tracking_url_template.value)
+ print('\tAuto tagging enabled: %s' % customer.auto_tagging_enabled)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('Displays basic information about the specified '
+ 'customer\'s advertising account.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id)
diff --git a/examples/v0/advanced_operations/__init__.py b/examples/v0/advanced_operations/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/examples/v0/advanced_operations/add_expanded_text_ad_with_upgraded_urls.py b/examples/v0/advanced_operations/add_expanded_text_ad_with_upgraded_urls.py
new file mode 100644
index 000000000..2900f6e23
--- /dev/null
+++ b/examples/v0/advanced_operations/add_expanded_text_ad_with_upgraded_urls.py
@@ -0,0 +1,109 @@
+# Copyright 2018 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 adds an expanded text ad using advanced features of upgraded URLs."""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+
+
+def main(client, customer_id, ad_group_id):
+ ad_group_ad_service = client.get_service('AdGroupAdService')
+ ad_group_service = client.get_service('AdGroupService')
+
+ # Create ad group ad.
+ ad_group_ad_operation = client.get_type('AdGroupAdOperation')
+ ad_group_ad = ad_group_ad_operation.create
+ ad_group_ad.ad_group.value = ad_group_service.ad_group_path(
+ customer_id, ad_group_id)
+ ad_group_ad.status = client.get_type('AdGroupAdStatusEnum').PAUSED
+
+ # Set expanded text ad info
+ final_url = ad_group_ad.ad.final_urls.add()
+ final_url.value = 'http://www.example.com/cruise/space/'
+ final_url = ad_group_ad.ad.final_urls.add()
+ final_url.value = 'http://www.example.com/locations/mars/'
+
+ ad_group_ad.ad.expanded_text_ad.description.value = (
+ 'Low-gravity fun for everyone!')
+ ad_group_ad.ad.expanded_text_ad.headline_part1.value = (
+ 'Luxury cruise to Mars')
+ ad_group_ad.ad.expanded_text_ad.headline_part2.value = (
+ 'Visit the Red Planet in Style.')
+
+ # Specify a tracking URL for 3rd party tracking provider. You may specify
+ # one at customer, campaign, ad group, ad, criterion, or feed item levels.
+ ad_group_ad.ad.tracking_url_template.value = (
+ 'http://tracker.example.com/?season={_season}&promocode={_promocode}&'
+ 'u={lpurl}'
+ )
+
+ # Since your tracking URL has two custom parameters, provide their values
+ # too. This can be provided at campaign, ad group, ad, criterion, or feed
+ # item levels.
+ param_1 = ad_group_ad.ad.url_custom_parameters.add()
+ param_1.key.value = 'season'
+ param_1.value.value = 'easter123'
+
+ param_2 = ad_group_ad.ad.url_custom_parameters.add()
+ param_2.key.value = 'promocode'
+ param_2.value.value = 'nj123'
+
+ # Specify a list of final mobile URLs. This field cannot be set if URL field
+ # is set, or finalUrls is unset. This may be specified at ad, criterion, and
+ # feed item levels.
+ final_mobile_url = ad_group_ad.ad.final_mobile_urls.add()
+ final_mobile_url.value = 'http://mobile.example.com/cruise/space/'
+ final_mobile_url = ad_group_ad.ad.final_mobile_urls.add()
+ final_mobile_url.value = 'http://mobile.example.com/locations/mars/'
+
+ # Add the ad group ad.
+ try:
+ ad_group_ad_response = ad_group_ad_service.mutate_ad_group_ads(
+ customer_id, [ad_group_ad_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ print('Created expanded text ad %s.'
+ % ad_group_ad_response.results[0].resource_name)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('Adds an expanded text ad to the specified ad group ID, '
+ 'for the given customer ID.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-a', '--ad_group_id', type=six.text_type,
+ required=True, help='The ad group ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, args.ad_group_id)
diff --git a/examples/v0/advanced_operations/use_portfolio_bidding_strategy.py b/examples/v0/advanced_operations/use_portfolio_bidding_strategy.py
new file mode 100644
index 000000000..dc99b6058
--- /dev/null
+++ b/examples/v0/advanced_operations/use_portfolio_bidding_strategy.py
@@ -0,0 +1,139 @@
+# Copyright 2018 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 constructs a campaign with a Portfolio Bidding Strategy."""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+import uuid
+
+import google.ads.google_ads.client
+
+
+def main(client, customer_id):
+ campaign_budget_service = client.get_service('CampaignBudgetService')
+ bidding_strategy_service = client.get_service('BiddingStrategyService')
+ campaign_service = client.get_service('CampaignService')
+
+ # Create a budget, which can be shared by multiple campaigns.
+ campaign_budget_operation = client.get_type('CampaignBudgetOperation')
+ campaign_budget = campaign_budget_operation.create
+ campaign_budget.name.value = 'Interplanetary Budget %s' % uuid.uuid4()
+ campaign_budget.delivery_method = client.get_type(
+ 'BudgetDeliveryMethodEnum').STANDARD
+ campaign_budget.amount_micros.value = 500000
+ campaign_budget.explicitly_shared.value = True
+
+ # Add budget.
+ try:
+ campaign_budget_response = (
+ campaign_budget_service.mutate_campaign_budgets(
+ customer_id, [campaign_budget_operation]))
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ campaign_budget_id = campaign_budget_response.results[0].resource_name
+
+ print('Budget "%s" was created.' % campaign_budget_id)
+
+ # Create a portfolio bidding strategy.
+ bidding_strategy_operation = client.get_type('BiddingStrategyOperation')
+ bidding_strategy = bidding_strategy_operation.create
+ bidding_strategy.name.value = 'Enhanced CPC %s' % uuid.uuid4()
+ target_spend = bidding_strategy.target_spend
+ target_spend.cpc_bid_ceiling_micros.value = 2000000
+ target_spend.target_spend_micros.value = 20000000
+
+ # Add portfolio bidding strategy.
+ try:
+ bidding_strategy_response = (
+ bidding_strategy_service.mutate_bidding_strategies(
+ customer_id, [bidding_strategy_operation]))
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ bidding_strategy_id = bidding_strategy_response.results[0].resource_name
+
+ print('Portfolio bidding strategy "%s" was created.' % bidding_strategy_id)
+
+ # Create campaign.
+ campaign_operation = client.get_type('CampaignOperation')
+ campaign = campaign_operation.create
+ campaign.name.value = 'Interplanetary Cruise %s' % uuid.uuid4()
+ campaign.advertising_channel_type = client.get_type(
+ 'AdvertisingChannelTypeEnum').SEARCH
+
+ # Recommendation: Set the campaign to PAUSED when creating it to prevent the
+ # ads from immediately serving. Set to ENABLED once you've added targeting
+ # and the ads are ready to serve.
+ campaign.status = client.get_type('CampaignStatusEnum').PAUSED
+
+ # Set the bidding strategy and budget.
+ campaign.bidding_strategy.value = bidding_strategy_id
+ campaign.manual_cpc.enhanced_cpc_enabled.value = True
+ campaign.campaign_budget.value = campaign_budget_id
+
+ # Set the campaign network options.
+ campaign.network_settings.target_google_search.value = True
+ campaign.network_settings.target_search_network.value = True
+ campaign.network_settings.target_content_network.value = False
+ campaign.network_settings.target_partner_search_network.value = False
+
+ # Add the campaign.
+ try:
+ campaign_response = campaign_service.mutate_campaigns(
+ customer_id, [campaign_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ print('Created campaign %s.' % campaign_response.results[0].resource_name)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description='Adds a campaign for specified customer.')
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id)
diff --git a/examples/v0/basic_operations/__init__.py b/examples/v0/basic_operations/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/examples/v0/basic_operations/add_ad_groups.py b/examples/v0/basic_operations/add_ad_groups.py
new file mode 100644
index 000000000..8392b890a
--- /dev/null
+++ b/examples/v0/basic_operations/add_ad_groups.py
@@ -0,0 +1,75 @@
+# Copyright 2018 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 adds an ad group.
+
+To get ad groups, run get_ad_groups.py.
+"""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+import uuid
+
+import google.ads.google_ads.client
+
+
+def main(client, customer_id, campaign_id):
+ ad_group_service = client.get_service('AdGroupService')
+ campaign_service = client.get_service('CampaignService')
+
+ # Create ad group.
+ ad_group_operation = client.get_type('AdGroupOperation')
+ ad_group = ad_group_operation.create
+ ad_group.name.value = 'Earth to Mars cruises %s' % uuid.uuid4()
+ ad_group.status = client.get_type('AdGroupStatusEnum').ENABLED
+ ad_group.campaign.value = campaign_service.campaign_path(
+ customer_id, campaign_id)
+ ad_group.type = client.get_type('AdGroupTypeEnum').SEARCH_STANDARD
+ ad_group.cpc_bid_micros.value = 10000000
+
+ # Add the ad group.
+ try:
+ ad_group_response = ad_group_service.mutate_ad_groups(
+ customer_id, [ad_group_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ print('Created ad group %s.' % ad_group_response.results[0].resource_name)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description='Adds an ad group for specified customer and campaign id.')
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-i', '--campaign_id', type=six.text_type,
+ required=True, help='The campaign ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, args.campaign_id)
diff --git a/examples/v0/basic_operations/add_campaigns.py b/examples/v0/basic_operations/add_campaigns.py
new file mode 100644
index 000000000..937b72785
--- /dev/null
+++ b/examples/v0/basic_operations/add_campaigns.py
@@ -0,0 +1,121 @@
+# Copyright 2018 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 how to add a campaign.
+
+To get campaigns, run get_campaigns.py.
+"""
+
+from __future__ import absolute_import
+
+import argparse
+import datetime
+import six
+import sys
+import uuid
+
+import google.ads.google_ads.client
+
+
+_DATE_FORMAT = '%Y%m%d'
+
+
+def main(client, customer_id):
+ campaign_budget_service = client.get_service('CampaignBudgetService')
+ campaign_service = client.get_service('CampaignService')
+
+ # Create a budget, which can be shared by multiple campaigns.
+ campaign_budget_operation = client.get_type('CampaignBudgetOperation')
+ campaign_budget = campaign_budget_operation.create
+ campaign_budget.name.value = 'Interplanetary Budget %s' % uuid.uuid4()
+ campaign_budget.delivery_method = client.get_type(
+ 'BudgetDeliveryMethodEnum').STANDARD
+ campaign_budget.amount_micros.value = 500000
+
+ # Add budget.
+ try:
+ campaign_budget_response = (
+ campaign_budget_service.mutate_campaign_budgets(
+ customer_id, [campaign_budget_operation]))
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ # Create campaign.
+ campaign_operation = client.get_type('CampaignOperation')
+ campaign = campaign_operation.create
+ campaign.name.value = 'Interplanetary Cruise %s' % uuid.uuid4()
+ campaign.advertising_channel_type = client.get_type(
+ 'AdvertisingChannelTypeEnum').SEARCH
+
+ # Recommendation: Set the campaign to PAUSED when creating it to prevent the
+ # ads from immediately serving. Set to ENABLED once you've added targeting
+ # and the ads are ready to serve.
+ campaign.status = client.get_type('CampaignStatusEnum').PAUSED
+
+ # Set the bidding strategy and budget.
+ campaign.manual_cpc.enhanced_cpc_enabled.value = True
+ campaign.campaign_budget.value = (
+ campaign_budget_response.results[0].resource_name)
+
+ # Set the campaign network options.
+ campaign.network_settings.target_google_search.value = True
+ campaign.network_settings.target_search_network.value = True
+ campaign.network_settings.target_content_network.value = False
+ campaign.network_settings.target_partner_search_network.value = False
+
+ # Optional: Set the start date.
+ start_time = datetime.date.today() + datetime.timedelta(days=1)
+ campaign.start_date.value = datetime.date.strftime(start_time, _DATE_FORMAT)
+
+ # Optional: Set the end date.
+ end_time = start_time + datetime.timedelta(weeks=4)
+ campaign.end_date.value = datetime.date.strftime(end_time, _DATE_FORMAT)
+
+ # Add the campaign.
+ try:
+ campaign_response = campaign_service.mutate_campaigns(
+ customer_id, [campaign_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ print('Created campaign %s.' % campaign_response.results[0].resource_name)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description='Adds a campaign for specified customer.')
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id)
diff --git a/examples/v0/basic_operations/add_expanded_text_ads.py b/examples/v0/basic_operations/add_expanded_text_ads.py
new file mode 100644
index 000000000..41db1da61
--- /dev/null
+++ b/examples/v0/basic_operations/add_expanded_text_ads.py
@@ -0,0 +1,84 @@
+# Copyright 2018 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 adds an expanded text ad.
+
+To get expanded text ads, run get_expanded_text_ads.py.
+"""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+import uuid
+
+import google.ads.google_ads.client
+
+
+def main(client, customer_id, ad_group_id):
+ ad_group_ad_service = client.get_service('AdGroupAdService')
+ ad_group_service = client.get_service('AdGroupService')
+
+ # Create ad group ad.
+ ad_group_ad_operation = client.get_type('AdGroupAdOperation')
+ ad_group_ad = ad_group_ad_operation.create
+ ad_group_ad.ad_group.value = ad_group_service.ad_group_path(
+ customer_id, ad_group_id)
+ ad_group_ad.status = client.get_type('AdGroupAdStatusEnum').PAUSED
+
+ # Set expanded text ad info
+ final_url = ad_group_ad.ad.final_urls.add()
+ final_url.value = 'http://www.example.com'
+ ad_group_ad.ad.expanded_text_ad.description.value = 'Buy your tickets now!'
+ ad_group_ad.ad.expanded_text_ad.headline_part1.value = (
+ 'Cruise to Mars %s' % str(uuid.uuid4())[:15])
+ ad_group_ad.ad.expanded_text_ad.headline_part2.value = (
+ 'Best space cruise line')
+ ad_group_ad.ad.expanded_text_ad.path1.value = 'all-inclusive'
+ ad_group_ad.ad.expanded_text_ad.path2.value = 'deals'
+
+ try:
+ ad_group_ad_response = ad_group_ad_service.mutate_ad_group_ads(
+ customer_id, [ad_group_ad_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ print('Created ad group ad %s.'
+ % ad_group_ad_response.results[0].resource_name)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('Adds an expanded text ad to the specified ad group ID, '
+ 'for the given customer ID.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-a', '--ad_group_id', type=six.text_type,
+ required=True, help='The ad group ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, args.ad_group_id)
diff --git a/examples/v0/basic_operations/add_keywords.py b/examples/v0/basic_operations/add_keywords.py
new file mode 100644
index 000000000..6ca0b3882
--- /dev/null
+++ b/examples/v0/basic_operations/add_keywords.py
@@ -0,0 +1,90 @@
+# Copyright 2018 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 demonstrates how to add a keyword to an ad group."""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+
+
+def main(client, customer_id, ad_group_id, keyword):
+ ad_group_service = client.get_service('AdGroupService')
+ ad_group_criterion_service = client.get_service('AdGroupCriterionService')
+
+ # Create keyword.
+ ad_group_criterion_operation = client.get_type('AdGroupCriterionOperation')
+ ad_group_criterion = ad_group_criterion_operation.create
+ ad_group_criterion.ad_group.value = ad_group_service.ad_group_path(
+ customer_id, ad_group_id)
+ ad_group_criterion.status = client.get_type(
+ 'AdGroupCriterionStatusEnum').ENABLED
+ ad_group_criterion.keyword.text.value = keyword
+ ad_group_criterion.keyword.match_type = client.get_type(
+ 'KeywordMatchTypeEnum').EXACT
+
+ # Optional field
+ # All fields can be referenced from the protos directly.
+ # The protos are located in subdirectories under
+ # google/ads/googleads/v0/proto.
+ # ad_group_criterion.negative.value = True
+
+ # Optional repeated field
+ # final_url = ad_group_criterion.final_urls.add()
+ # final_url.value = 'https://www.example.com'
+
+ # Add keyword
+ try:
+ ad_group_criterion_response = (
+ ad_group_criterion_service.mutate_ad_group_criteria(
+ customer_id, [ad_group_criterion_operation]))
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ print('Created keyword %s.'
+ % ad_group_criterion_response.results[0].resource_name)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('Adds a keyword to the provided ad group, for the '
+ 'specified customer.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-a', '--ad_group_id', type=six.text_type,
+ required=True, help='The ad group ID.')
+ parser.add_argument('-k', '--keyword', type=six.text_type, required=False,
+ default='mars cruise',
+ help=('The keyword to be added to the ad group. Note '
+ 'that you will receive an error response if you '
+ 'attempt to create a duplicate keyword.'))
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, args.ad_group_id, args.keyword)
diff --git a/examples/v0/basic_operations/get_ad_groups.py b/examples/v0/basic_operations/get_ad_groups.py
new file mode 100644
index 000000000..ff90685de
--- /dev/null
+++ b/examples/v0/basic_operations/get_ad_groups.py
@@ -0,0 +1,72 @@
+# Copyright 2018 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 how to retrieve ad groups."""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+import google.ads.google_ads.client
+
+
+_DEFAULT_PAGE_SIZE = 1000
+
+
+def main(client, customer_id, page_size, campaign_id=None):
+ ga_service = client.get_service('GoogleAdsService')
+
+ query = 'SELECT campaign.id, ad_group.id, ad_group.name FROM ad_group'
+
+ if campaign_id:
+ query = '%s WHERE campaign.id = %s' % (query, campaign_id)
+
+ results = ga_service.search(customer_id, query=query, page_size=page_size)
+
+ try:
+ for row in results:
+ print('Ad group with ID %d and name "%s" was found in campaign '
+ 'with ID %d.'
+ % (row.ad_group.id.value, row.ad_group.name.value,
+ row.campaign.id.value))
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description='List ad groups for specified customer.')
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-i', '--campaign_id', type=six.text_type,
+ required=False,
+ help=('The campaign ID. Specify this to list ad groups '
+ 'solely for this campaign ID.'))
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, _DEFAULT_PAGE_SIZE,
+ campaign_id=args.campaign_id)
diff --git a/examples/v0/basic_operations/get_artifact_metadata.py b/examples/v0/basic_operations/get_artifact_metadata.py
new file mode 100644
index 000000000..e9262c7d6
--- /dev/null
+++ b/examples/v0/basic_operations/get_artifact_metadata.py
@@ -0,0 +1,116 @@
+# Copyright 2018 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 how to retrieve artifact metadata.
+
+The metadata retrieved can provide additional context about the artifact,
+such as whether it is selectable, filterable, or sortable. The artifact can be
+either a resource (such as customer, or campaign) or a field (such as
+metrics.impressions, campaign.id). It also shows the data type and artifacts
+that are selectable with the artifact.
+"""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+import google.ads.google_ads.client
+
+
+_DEFAULT_PAGE_SIZE = 1000
+
+
+def _is_or_is_not(bool_value):
+ """Produces display text for whether metadata is applicable to artifact.
+
+ Args:
+ bool_value: a BoolValue instance.
+
+ Returns:
+ A str with value "is" if bool_value is True, else "is not".
+ """
+ return 'is' if bool_value.value else 'isn\'t'
+
+
+def main(client, artifact_name, page_size):
+ gaf_service = client.get_service('GoogleAdsFieldService')
+
+ # Searches for an artifact with the specified name.
+ query = ('SELECT name, category, selectable, filterable, sortable, '
+ 'selectable_with, data_type, is_repeated '
+ 'WHERE name = \'%s\'') % artifact_name
+
+ response = gaf_service.search_google_ads_fields(
+ query=query, page_size=page_size)
+
+ # Iterates over all rows and prints out the metadata of the returned
+ # artifacts.
+ try:
+ for google_ads_field in response:
+ # Note that the category and data type printed below are enum
+ # values. For example, a value of 2 will be returned when the
+ # category is "RESOURCE".
+ #
+ # A mapping of enum names to values can be found in
+ # GoogleAdsFieldCategoryEnum for the category and
+ # GoogleAdsFieldDataTypeEnum for the data type.
+ selectable = _is_or_is_not(google_ads_field.selectable)
+ filterable = _is_or_is_not(google_ads_field.filterable)
+ sortable = _is_or_is_not(google_ads_field.sortable)
+ is_repeated = _is_or_is_not(google_ads_field.is_repeated)
+
+ print('An artifact named "%s" with category %d and data type %d %s '
+ 'selectable, %s filterable, %s sortable, and %s repeated.'
+ % (google_ads_field.name.value, google_ads_field.category,
+ google_ads_field.data_type, selectable, filterable,
+ sortable, is_repeated))
+
+ if len(google_ads_field.selectable_with) > 0:
+ selectable_artifacts = [
+ wrapped_selectable_artifact.value
+ for wrapped_selectable_artifact
+ in google_ads_field.selectable_with]
+
+ print('')
+ print('The artifact can be selected with the following '
+ 'artifacts:')
+ for artifact in selectable_artifacts:
+ print(artifact)
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description='Lists metadata for the specified artifact.')
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-a', '--artifact_name', type=six.text_type,
+ required=True,
+ help='The name of the artifact for which we are '
+ 'retrieving metadata.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.artifact_name, _DEFAULT_PAGE_SIZE)
diff --git a/examples/v0/basic_operations/get_campaigns.py b/examples/v0/basic_operations/get_campaigns.py
new file mode 100644
index 000000000..f70c6a2f5
--- /dev/null
+++ b/examples/v0/basic_operations/get_campaigns.py
@@ -0,0 +1,67 @@
+# Copyright 2018 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 how to get all campaigns.
+
+To add campaigns, run add_campaigns.py.
+"""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+
+
+_DEFAULT_PAGE_SIZE = 1000
+
+
+def main(client, customer_id, page_size):
+ ga_service = client.get_service('GoogleAdsService')
+
+ query = ('SELECT campaign.id, campaign.name FROM campaign '
+ 'ORDER BY campaign.id')
+
+ results = ga_service.search(customer_id, query=query,page_size=page_size)
+
+ try:
+ for row in results:
+ print('Campaign with ID %d and name "%s" was found.'
+ % (row.campaign.id.value, row.campaign.name.value))
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description='Lists all campaigns for specified customer.')
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, _DEFAULT_PAGE_SIZE)
diff --git a/examples/v0/basic_operations/get_expanded_text_ads.py b/examples/v0/basic_operations/get_expanded_text_ads.py
new file mode 100644
index 000000000..abe4bce9a
--- /dev/null
+++ b/examples/v0/basic_operations/get_expanded_text_ads.py
@@ -0,0 +1,82 @@
+# Copyright 2018 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 how to retrieve expanded text ads."""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+
+
+_DEFAULT_PAGE_SIZE = 1000
+
+
+def main(client, customer_id, page_size, ad_group_id=None):
+ ga_service = client.get_service('GoogleAdsService')
+
+ query = ('SELECT ad_group.id, ad_group_ad.ad.id, '
+ 'ad_group_ad.ad.expanded_text_ad.headline_part1, '
+ 'ad_group_ad.ad.expanded_text_ad.headline_part2, '
+ 'ad_group_ad.status FROM ad_group_ad '
+ 'WHERE ad_group_ad.ad.type = EXPANDED_TEXT_AD')
+
+ if ad_group_id:
+ query = '%s AND ad_group.id = %s' % (query, ad_group_id)
+
+ results = ga_service.search(customer_id, query=query, page_size=page_size)
+
+ try:
+ for row in results:
+ ad = row.ad_group_ad.ad
+
+ if ad.expanded_text_ad:
+ expanded_text_ad_info = ad.expanded_text_ad
+
+ print('Expanded text ad with ID %s, status %s, and headline '
+ '%s - %s was found in ad group with ID %s.'
+ % (ad.id, row.ad_group_ad.status,
+ expanded_text_ad_info.headline_part1,
+ expanded_text_ad_info.headline_part2,
+ row.ad_group.id))
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description='List ad groups for specified customer.')
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-a', '--ad_group_id', type=six.text_type,
+ required=False, help='The ad group ID. ')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, _DEFAULT_PAGE_SIZE,
+ ad_group_id=args.ad_group_id)
diff --git a/examples/v0/basic_operations/get_keywords.py b/examples/v0/basic_operations/get_keywords.py
new file mode 100644
index 000000000..3da39c244
--- /dev/null
+++ b/examples/v0/basic_operations/get_keywords.py
@@ -0,0 +1,81 @@
+# Copyright 2018 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 retrieves keywords for a customer."""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+
+
+_DEFAULT_PAGE_SIZE = 1000
+
+
+def main(client, customer_id, page_size, ad_group_id=None):
+ ga_service = client.get_service('GoogleAdsService')
+
+ query = ('SELECT ad_group.id, ad_group_criterion.type, '
+ 'ad_group_criterion.criterion_id, '
+ 'ad_group_criterion.keyword.text, '
+ 'ad_group_criterion.keyword.match_type FROM ad_group_criterion '
+ 'WHERE ad_group_criterion.type = KEYWORD')
+
+ if ad_group_id:
+ query = '%s AND ad_group.id = %s' % (query, ad_group_id)
+
+ results = ga_service.search(customer_id, query=query, page_size=page_size)
+
+ try:
+ for row in results:
+ ad_group = row.ad_group
+ ad_group_criterion = row.ad_group_criterion
+ keyword = row.ad_group_criterion.keyword
+
+ print('Keyword with text "%s", match type %s, criteria type %s, '
+ 'and ID %s was found in ad group with ID %s.'
+ % (keyword.text.value, keyword.match_type,
+ ad_group_criterion.type,
+ ad_group_criterion.criterion_id.value, ad_group.id.value))
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('Retrieves keywords for the specified customer, or '
+ 'optionally for a specific ad group.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-a', '--ad_group_id', type=six.text_type,
+ required=False, help='The ad group ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, _DEFAULT_PAGE_SIZE,
+ ad_group_id=args.ad_group_id)
diff --git a/examples/v0/basic_operations/pause_ad.py b/examples/v0/basic_operations/pause_ad.py
new file mode 100644
index 000000000..5f580bac1
--- /dev/null
+++ b/examples/v0/basic_operations/pause_ad.py
@@ -0,0 +1,72 @@
+# Copyright 2018 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 pauses an ad."""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+from google.api_core import protobuf_helpers
+
+
+def main(client, customer_id, ad_group_id, ad_id):
+ ad_group_ad_service = client.get_service('AdGroupAdService')
+
+ ad_group_ad_operation = client.get_type('AdGroupAdOperation')
+
+ ad_group_ad = ad_group_ad_operation.update
+ ad_group_ad.resource_name = ad_group_ad_service.ad_group_ad_path(
+ customer_id, '%s_%s' % (ad_group_id, ad_id))
+ ad_group_ad.status = client.get_type('AdGroupStatusEnum').PAUSED
+ fm = protobuf_helpers.field_mask(None, ad_group_ad)
+ ad_group_ad_operation.update_mask.CopyFrom(fm)
+
+ try:
+ ad_group_ad_response = ad_group_ad_service.mutate_ad_group_ads(
+ customer_id, [ad_group_ad_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ print('Paused ad group ad %s.'
+ % ad_group_ad_response.results[0].resource_name)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('Pauses an ad in the specified customer\'s ad group.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-a', '--ad_group_id', type=six.text_type,
+ required=True, help='The ad group ID.')
+ parser.add_argument('-i', '--ad_id', type=six.text_type, required=True,
+ help='The ad ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, args.ad_group_id, args.ad_id)
diff --git a/examples/v0/basic_operations/remove_ad.py b/examples/v0/basic_operations/remove_ad.py
new file mode 100644
index 000000000..37672aacc
--- /dev/null
+++ b/examples/v0/basic_operations/remove_ad.py
@@ -0,0 +1,67 @@
+# Copyright 2018 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 removes an existing ad."""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+
+
+def main(client, customer_id, ad_group_id, ad_id):
+ ad_group_ad_service = client.get_service('AdGroupAdService')
+ ad_group_ad_operation = client.get_type('AdGroupAdOperation')
+
+ resource_name = ad_group_ad_service.ad_group_ad_path(
+ customer_id, '%s_%s' % (ad_group_id, ad_id))
+ ad_group_ad_operation.remove = resource_name
+
+ try:
+ ad_group_ad_response = ad_group_ad_service.mutate_ad_group_ads(
+ customer_id, [ad_group_ad_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ print('Removed ad group ad %s.'
+ % ad_group_ad_response.results[0].resource_name)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('Removes an ad from the specified customer\'s ad group.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-a', '--ad_group_id', type=six.text_type,
+ required=True, help='The ad group ID.')
+ parser.add_argument('-i', '--ad_id', type=six.text_type, required=True,
+ help='The ad ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, args.ad_group_id, args.ad_id)
diff --git a/examples/v0/basic_operations/remove_ad_group.py b/examples/v0/basic_operations/remove_ad_group.py
new file mode 100644
index 000000000..fbb44f1f8
--- /dev/null
+++ b/examples/v0/basic_operations/remove_ad_group.py
@@ -0,0 +1,63 @@
+# Copyright 2018 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 removes an existing ad group."""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+
+
+def main(client, customer_id, ad_group_id):
+ ad_group_service = client.get_service('AdGroupService')
+ ad_group_operation = client.get_type('AdGroupOperation')
+
+ resource_name = ad_group_service.ad_group_path(customer_id, ad_group_id)
+ ad_group_operation.remove = resource_name
+
+ try:
+ ad_group_response = ad_group_service.mutate_ad_groups(
+ customer_id, [ad_group_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ print('Removed ad group %s.' % ad_group_response.results[0].resource_name)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('Removes an ad group for the specified customer.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-a', '--ad_group_id', type=six.text_type,
+ required=True, help='The ad group ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, args.ad_group_id)
diff --git a/examples/v0/basic_operations/remove_campaign.py b/examples/v0/basic_operations/remove_campaign.py
new file mode 100644
index 000000000..ec18192e7
--- /dev/null
+++ b/examples/v0/basic_operations/remove_campaign.py
@@ -0,0 +1,63 @@
+# Copyright 2018 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 removes an existing campaign."""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+
+
+def main(client, customer_id, campaign_id):
+ campaign_service = client.get_service('CampaignService')
+ campaign_operation = client.get_type('CampaignOperation')
+
+ resource_name = campaign_service.campaign_path(customer_id, campaign_id)
+ campaign_operation.remove = resource_name
+
+ try:
+ campaign_response = campaign_service.mutate_campaigns(
+ customer_id, [campaign_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ print('Removed campaign %s.' % campaign_response.results[0].resource_name)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('Removes given campaign for the specified customer.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-i', '--campaign_id', type=six.text_type,
+ required=True, help='The campaign ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, args.campaign_id)
diff --git a/examples/v0/basic_operations/remove_keyword.py b/examples/v0/basic_operations/remove_keyword.py
new file mode 100644
index 000000000..ef7593a95
--- /dev/null
+++ b/examples/v0/basic_operations/remove_keyword.py
@@ -0,0 +1,67 @@
+# Copyright 2018 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 removes an existing keyword from an ad group."""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+
+
+def main(client, customer_id, ad_group_id, criteria_id):
+ agc_service = client.get_service('AdGroupCriterionService')
+ agc_operation = client.get_type('AdGroupCriterionOperation')
+
+ resource_name = agc_service.ad_group_criteria_path(
+ customer_id, '%s_%s' % (ad_group_id, criteria_id))
+ agc_operation.remove = resource_name
+
+ try:
+ agc_response = agc_service.mutate_ad_group_criteria(
+ customer_id, [agc_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ print('Removed keyword %s.' % agc_response.results[0].resource_name)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('Removes given campaign for the specified customer.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-a', '--ad_group_id', type=six.text_type,
+ required=True, help='The ad group ID.')
+ parser.add_argument('-k', '--criteria_id', type=six.text_type,
+ required=True, help='The criteria ID, or keyword ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, args.ad_group_id,
+ args.criteria_id)
diff --git a/examples/v0/basic_operations/update_ad_group.py b/examples/v0/basic_operations/update_ad_group.py
new file mode 100644
index 000000000..16a39039d
--- /dev/null
+++ b/examples/v0/basic_operations/update_ad_group.py
@@ -0,0 +1,78 @@
+# Copyright 2018 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 updates an ad group.
+
+To get ad groups, run get_ad_groups.py.
+"""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+from google.api_core import protobuf_helpers
+
+
+def main(client, customer_id, ad_group_id, bid_micro_amount):
+ ad_group_service = client.get_service('AdGroupService')
+
+ # Create ad group operation.
+ ad_group_operation = client.get_type('AdGroupOperation')
+ ad_group = ad_group_operation.update
+ ad_group.resource_name = ad_group_service.ad_group_path(
+ customer_id, ad_group_id)
+ ad_group.status = client.get_type('AdGroupStatusEnum').PAUSED
+ ad_group.cpc_bid_micros.value = bid_micro_amount
+ fm = protobuf_helpers.field_mask(None, ad_group)
+ ad_group_operation.update_mask.CopyFrom(fm)
+
+ # Update the ad group.
+ try:
+ ad_group_response = ad_group_service.mutate_ad_groups(
+ customer_id, [ad_group_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ print('Updated ad group %s.' % ad_group_response.results[0].resource_name)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('Updates an ad group for specified customer and campaign '
+ 'id with the given bid micro amount.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-a', '--ad_group_id', type=six.text_type,
+ required=True, help='The ad group ID.')
+ parser.add_argument('-b', '--bid_micro_amount', type=int,
+ required=True, help='The bid micro amount.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, args.ad_group_id,
+ args.bid_micro_amount)
diff --git a/examples/v0/basic_operations/update_campaign.py b/examples/v0/basic_operations/update_campaign.py
new file mode 100644
index 000000000..bff83ec57
--- /dev/null
+++ b/examples/v0/basic_operations/update_campaign.py
@@ -0,0 +1,75 @@
+# Copyright 2018 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 updates a campaign.
+
+To get campaigns, run get_campaigns.py.
+"""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.errors
+import google.ads.google_ads.client
+from google.api_core import protobuf_helpers
+
+
+def main(client, customer_id, campaign_id):
+ campaign_service = client.get_service('CampaignService')
+ # Create campaign operation.
+ campaign_operation = client.get_type('CampaignOperation')
+ campaign = campaign_operation.update
+ campaign.resource_name = campaign_service.campaign_path(
+ customer_id, campaign_id)
+ campaign.status = client.get_type('CampaignStatusEnum').PAUSED
+ campaign.network_settings.target_search_network.value = False
+ # Retrieve a FieldMask for the fields configured in the campaign.
+ fm = protobuf_helpers.field_mask(None, campaign)
+ campaign_operation.update_mask.CopyFrom(fm)
+
+ # Update the campaign.
+ try:
+ campaign_response = campaign_service.mutate_campaigns(
+ customer_id, [campaign_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ print('Updated campaign %s.' % campaign_response.results[0].resource_name)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description='Updates the given campaign for the specified customer.')
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-i', '--campaign_id', type=six.text_type,
+ required=True, help='The campaign ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, args.campaign_id)
diff --git a/examples/v0/basic_operations/update_keyword.py b/examples/v0/basic_operations/update_keyword.py
new file mode 100644
index 000000000..5b4334e32
--- /dev/null
+++ b/examples/v0/basic_operations/update_keyword.py
@@ -0,0 +1,75 @@
+# Copyright 2018 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 updates a keyword for the specified ad group."""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+from google.api_core import protobuf_helpers
+
+
+def main(client, customer_id, ad_group_id, criterion_id):
+ agc_service = client.get_service('AdGroupCriterionService')
+
+ ad_group_criterion_operation = client.get_type('AdGroupCriterionOperation')
+
+ ad_group_criterion = ad_group_criterion_operation.update
+ ad_group_criterion.resource_name = agc_service.ad_group_criteria_path(
+ customer_id, '%s_%s' % (ad_group_id, criterion_id))
+ ad_group_criterion.status = (client.get_type('AdGroupCriterionStatusEnum')
+ .ENABLED)
+ final_url = ad_group_criterion.final_urls.add()
+ final_url.value = 'https://www.example.com'
+ fm = protobuf_helpers.field_mask(None, ad_group_criterion)
+ ad_group_criterion_operation.update_mask.CopyFrom(fm)
+
+ try:
+ agc_response = agc_service.mutate_ad_group_criteria(
+ customer_id, [ad_group_criterion_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ print('Updated keyword %s.' % agc_response.results[0].resource_name)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('Pauses an ad in the specified customer\'s ad group.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-a', '--ad_group_id', type=six.text_type,
+ required=True, help='The ad group ID.')
+ parser.add_argument('-k', '--criterion_id', type=six.text_type,
+ required=True, help='The criterion ID, or keyword ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, args.ad_group_id,
+ args.criterion_id)
diff --git a/examples/v0/hotel_ads/__init__.py b/examples/v0/hotel_ads/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/examples/v0/hotel_ads/add_hotel_ad.py b/examples/v0/hotel_ads/add_hotel_ad.py
new file mode 100644
index 000000000..acc029537
--- /dev/null
+++ b/examples/v0/hotel_ads/add_hotel_ad.py
@@ -0,0 +1,223 @@
+# Copyright 2018 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 adds a hotel campaign, ad group, and ad group ad.
+
+Prerequisite: You need to have access to the Hotel Ads Center, which can be
+granted during integration with Google Hotels. The integration instructions can
+be found at:
+https://support.google.com/hotelprices/answer/6101897.
+"""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+import uuid
+
+import google.ads.google_ads.client
+
+
+def main(client, customer_id, hotel_center_account_id,
+ bid_ceiling_micro_amount):
+ # Add budget
+ budget_resource_name = add_budget(client, customer_id)
+
+ # Add hotel campaign
+ campaign_resource_name = add_hotel_campaign(
+ client, customer_id, budget_resource_name, hotel_center_account_id,
+ bid_ceiling_micro_amount)
+
+ # Add hotel ad group
+ ad_group_resource_name = add_hotel_ad_group(client, customer_id,
+ campaign_resource_name)
+
+ # Add hotel ad
+ add_hotel_ad(client, customer_id, ad_group_resource_name)
+
+
+def add_budget(client, customer_id):
+ campaign_budget_service = client.get_service('CampaignBudgetService')
+
+ # Create a budget, which can be shared by multiple campaigns.
+ campaign_budget_operation = client.get_type('CampaignBudgetOperation')
+ campaign_budget = campaign_budget_operation.create
+ campaign_budget.name.value = 'Interplanetary Budget %s' % uuid.uuid4()
+ campaign_budget.delivery_method = client.get_type(
+ 'BudgetDeliveryMethodEnum').STANDARD
+ campaign_budget.amount_micros.value = 500000
+
+ # Add budget.
+ try:
+ campaign_budget_response = (
+ campaign_budget_service.mutate_campaign_budgets(
+ customer_id, [campaign_budget_operation]))
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ budget_resource_name = campaign_budget_response.results[0].resource_name
+
+ print('Created budget %s' % budget_resource_name)
+
+ return budget_resource_name
+
+
+def add_hotel_ad(client, customer_id, ad_group_resource_name):
+ ad_group_ad_service = client.get_service('AdGroupAdService')
+
+ # Creates a new ad group ad and sets the hotel ad to it.
+ ad_group_ad_operation = client.get_type('AdGroupAdOperation')
+ ad_group_ad = ad_group_ad_operation.create
+ ad_group_ad.ad_group.value = ad_group_resource_name
+ ad_group_ad.status = client.get_type('AdGroupAdStatusEnum').PAUSED
+ ad_group_ad.ad.hotel_ad.CopyFrom(client.get_type('HotelAdInfo'))
+
+ # Add the ad group ad.
+ try:
+ ad_group_ad_response = ad_group_ad_service.mutate_ad_group_ads(
+ customer_id, [ad_group_ad_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ ad_group_ad_resource_name = ad_group_ad_response.results[0].resource_name
+
+ print('Created hotel ad %s.' % ad_group_ad_resource_name)
+
+ return ad_group_resource_name
+
+
+def add_hotel_ad_group(client, customer_id, campaign_resource_name):
+ ad_group_service = client.get_service('AdGroupService')
+
+ # Create ad group.
+ ad_group_operation = client.get_type('AdGroupOperation')
+ ad_group = ad_group_operation.create
+ ad_group.name.value = 'Earth to Mars cruise %s' % uuid.uuid4()
+ ad_group.status = client.get_type('AdGroupStatusEnum').ENABLED
+ ad_group.campaign.value = campaign_resource_name
+ # Sets the ad group type to HOTEL_ADS. This cannot be set to other types.
+ ad_group.type = client.get_type('AdGroupTypeEnum').HOTEL_ADS
+ ad_group.cpc_bid_micros.value = 10000000
+
+ # Add the ad group.
+ try:
+ ad_group_response = ad_group_service.mutate_ad_groups(
+ customer_id, [ad_group_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ ad_group_resource_name = ad_group_response.results[0].resource_name
+
+ print('Added a hotel ad group with resource name "%s".'
+ % ad_group_resource_name)
+
+ return ad_group_resource_name
+
+
+def add_hotel_campaign(client, customer_id, budget_resource_name,
+ hotel_center_account_id, bid_ceiling_micro_amount):
+ campaign_service = client.get_service('CampaignService')
+
+ # Create campaign.
+ campaign_operation = client.get_type('CampaignOperation')
+ campaign = campaign_operation.create
+ campaign.name.value = 'Interplanetary Cruise Campaign %s' % uuid.uuid4()
+
+ # Configures settings related to hotel campaigns including advertising
+ # channel type and hotel setting info.
+ campaign.advertising_channel_type = client.get_type(
+ 'AdvertisingChannelTypeEnum').HOTEL
+ campaign.hotel_setting.hotel_center_id.value = hotel_center_account_id
+
+ # Recommendation: Set the campaign to PAUSED when creating it to prevent the
+ # ads from immediately serving. Set to ENABLED once you've added targeting
+ # and the ads are ready to serve.
+ campaign.status = client.get_type('CampaignStatusEnum').PAUSED
+
+ # Set the bidding strategy to PercentCpc. Only Manual CPC and Percent CPC
+ # can be used for hotel campaigns.
+ campaign.percent_cpc.cpc_bid_ceiling_micros.value = (
+ bid_ceiling_micro_amount)
+
+ # Sets the budget.
+ campaign.campaign_budget.value = budget_resource_name
+
+ # Set the campaign network options. Only Google Search is allowed for hotel
+ # campaigns.
+ campaign.network_settings.target_google_search.value = True
+
+ # Add the campaign.
+ try:
+ campaign_response = campaign_service.mutate_campaigns(
+ customer_id, [campaign_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ campaign_resource_name = campaign_response.results[0].resource_name
+
+ print('Added a hotel campaign with resource name "%s".'
+ % campaign_resource_name)
+
+ return campaign_resource_name
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('Adds an expanded text ad to the specified ad group ID, '
+ 'for the given customer ID.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-b', '--bid_ceiling_micro_amount', type=int,
+ required=True, help=('The bid ceiling micro amount for '
+ 'the hotel campaign.'))
+ parser.add_argument('-h', '--hotel_center_account_id', type=six.text_type,
+ required=True, help='The hotel center account ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, args.hotel_center_account_id,
+ args.bid_ceiling_micro_amount)
diff --git a/examples/v0/hotel_ads/add_hotel_ad_group_bid_modifiers.py b/examples/v0/hotel_ads/add_hotel_ad_group_bid_modifiers.py
new file mode 100644
index 000000000..5ed7912fe
--- /dev/null
+++ b/examples/v0/hotel_ads/add_hotel_ad_group_bid_modifiers.py
@@ -0,0 +1,113 @@
+# Copyright 2018 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 adds an ad group bid modifier to a hotel ad group.
+
+Ad group bid modifiers based on hotel check-in day and hotel length of stay
+will be added.
+
+For hotel check-in day, you need tp specify the resource name, which includes
+the fixed criterion ID of the check-in day you want to set. In addition, you
+don't set an ad group for this bid modifier type.
+
+For hotel length of stay, you don't need to specify the resource name, but
+need to set an ad group instead.
+"""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+
+
+def main(client, customer_id, ad_group_id, check_in_day_criterion_id):
+ ad_group_service = client.get_service('AdGroupService')
+ ag_bm_service = client.get_service('AdGroupBidModifierService')
+
+ # Create ad group bid modifier based on hotel check-in day.
+ check_in_ag_bm_operation = client.get_type('AdGroupBidModifierOperation')
+ check_in_ag_bid_modifier = check_in_ag_bm_operation.create
+ # Sets the resource name for the criterion ID whose value corresponds to the
+ # desired check-in day.
+ check_in_bm_resource_name = ag_bm_service.ad_group_bid_modifier_path(
+ customer_id, '%s_%s' % (ad_group_id, check_in_day_criterion_id))
+ check_in_ag_bid_modifier.resource_name.value = check_in_bm_resource_name
+ # Sets the bid modifier value to 150%.
+ check_in_ag_bid_modifier.bid_modifier.value = 1.5
+ check_in_ag_bid_modifier.hotel_check_in_day.CopyFrom(client.get_type(
+ 'HotelCheckInDayInfo'))
+
+ # Create ad group bid modifier based on hotel length of stay info.
+ los_ag_bm_operation = client.get_type('AdGroupBidModifierOperation')
+ los_ag_bid_modifier = los_ag_bm_operation.create
+ los_ag_bid_modifier.ad_group.value = ad_group_service.ad_group_path(
+ customer_id, ad_group_id)
+ # Creates the hotel length of stay info.
+ hotel_length_of_stay_info = los_ag_bid_modifier.hotel_length_of_stay
+ hotel_length_of_stay_info.min_nights.value = 3
+ hotel_length_of_stay_info.max_nights.value = 7
+ # Sets the bid modifier value to 170%.
+ los_ag_bid_modifier.bid_modifier.value = 1.7
+
+ # Add the bid modifiers
+ try:
+ ag_bm_response = ag_bm_service.mutate_ad_groups(
+ customer_id, [check_in_ag_bm_operation, los_ag_bm_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ # Print out resource names of the added ad group bid modifiers.
+ print('Added %d hotel ad group bid modifiers:'
+ % len(ag_bm_response.results))
+
+ for result in ag_bm_response.results:
+ print(result.resource_name)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('Adds an ad group bid modifier to a hotel ad group.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-a', '--ad_group_id', type=six.text_type,
+ required=True,
+ help='The ad group ID of the hotel ad group.')
+ parser.add_argument('-d', '--check_in_criterion_id', type=int, default=60,
+ help=('The criterion ID referring to the check-in day. '
+ 'If not specified, this example will provide the '
+ 'value "60" to select Monday as the check-in '
+ 'day. See the table of check-in days and '
+ 'criterion IDs at:'
+ 'https://developers.google.com/google-ads/api/'
+ 'docs/hotel-ads/create-ad-group-bid-modifier'
+ '#hotelcheckindayinfo'))
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, args.ad_group_id,
+ args.check_in_criterion_id)
diff --git a/examples/v0/recommendations/__init__.py b/examples/v0/recommendations/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/examples/v0/recommendations/apply_recommendation.py b/examples/v0/recommendations/apply_recommendation.py
new file mode 100644
index 000000000..b4b4e03a8
--- /dev/null
+++ b/examples/v0/recommendations/apply_recommendation.py
@@ -0,0 +1,70 @@
+# Copyright 2018 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 how to apply a specified recommendation.
+
+To retrieve recommendations for text ads, run get_text_ad_recommendations.py.
+"""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+
+
+def main(client, customer_id, recommendation_id):
+ recommendation_service = client.get_service('RecommendationService')
+
+ apply_recommendation_operation = client.get_type(
+ 'ApplyRecommendationOperation')
+
+ apply_recommendation_operation.resource_name = (
+ recommendation_service.recommendation_path(
+ customer_id, recommendation_id))
+
+ try:
+ recommendation_response = recommendation_service.apply_recommendation(
+ customer_id, [apply_recommendation_operation])
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ print('Applied recommendation with resource name: "%s".'
+ % recommendation_response.results[0].resource_name)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('Pauses an ad in the specified customer\'s ad group.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-r', '--recommendation_id', type=six.text_type,
+ required=True, help='The recommendation ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, args.recommendation_id)
diff --git a/examples/v0/recommendations/get_text_ad_recommendations.py b/examples/v0/recommendations/get_text_ad_recommendations.py
new file mode 100644
index 000000000..599d7a961
--- /dev/null
+++ b/examples/v0/recommendations/get_text_ad_recommendations.py
@@ -0,0 +1,79 @@
+# Copyright 2018 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 gets all TEXT_AD recommendations.
+
+To add campaigns, run add_campaigns.py.
+"""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+
+
+_DEFAULT_PAGE_SIZE = 1000
+
+
+def main(client, customer_id, page_size):
+ ga_service = client.get_service('GoogleAdsService')
+
+ query = ('SELECT recommendation.type, recommendation.campaign, '
+ 'recommendation.text_ad_recommendation FROM recommendation '
+ 'WHERE recommendation.type = TEXT_AD')
+
+ results = ga_service.search(customer_id, query=query, page_size=page_size)
+
+ try:
+ for row in results:
+ recommendation = row.recommendation
+ recommended_ad = recommendation.text_ad_recommendation.ad
+ print('Recommendation ("%s") was found for campaign "%s".'
+ % (recommendation.resource_name, recommendation.campaign))
+
+ if recommended_ad.display_url:
+ print('\tDisplay URL = "%s"' % recommended_ad.display_url)
+
+ for url in recommended_ad.final_urls:
+ print('\tFinal URL = "%s"' % url)
+
+ for url in recommended_ad.final_mobile_urls:
+ print('\tFinal Mobile URL = "%s"' % url)
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description='Lists TEXT_AD recommendations for specified customer.')
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, _DEFAULT_PAGE_SIZE)
diff --git a/examples/v0/reporting/__init__.py b/examples/v0/reporting/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/examples/v0/reporting/get_keyword_stats.py b/examples/v0/reporting/get_keyword_stats.py
new file mode 100644
index 000000000..314e20e6a
--- /dev/null
+++ b/examples/v0/reporting/get_keyword_stats.py
@@ -0,0 +1,89 @@
+# Copyright 2018 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 how to get campaign criteria.
+
+Retrieves negative keywords in a campaign.
+"""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+
+
+_DEFAULT_PAGE_SIZE = 1000
+
+
+def main(client, customer_id, page_size):
+ ga_service = client.get_service('GoogleAdsService')
+
+ query = ('SELECT campaign.id, campaign.name, ad_group.id, ad_group.name, '
+ 'ad_group_criterion.criterion_id, '
+ 'ad_group_criterion.keyword.text, '
+ 'ad_group_criterion.keyword.match_type, '
+ 'metrics.impressions, metrics.clicks, metrics.cost_micros '
+ 'FROM keyword_view WHERE date DURING LAST_7_DAYS '
+ 'AND campaign.advertising_channel_type = \'SEARCH\' '
+ 'AND ad_group.status = \'ENABLED\' '
+ 'AND ad_group_criterion.status IN (\'ENABLED\', \'PAUSED\') '
+ 'ORDER BY metrics.impressions DESC '
+ 'LIMIT 50')
+
+ response = ga_service.search(customer_id, query, page_size=page_size)
+
+ try:
+ for row in response:
+ campaign = row.campaign
+ ad_group = row.ad_group
+ criterion = row.ad_group_criterion
+ metrics = row.metrics
+
+ print('Keyword text "%s" with match type "%d" and ID %d in ad '
+ 'group "%s" with ID "%d" in campaign "%s" with ID %d had %s '
+ 'impression(s), %s click(s), and %s cost (in micros) during '
+ 'the last 7 days.'
+ % (criterion.keyword.text.value, criterion.keyword.match_type,
+ criterion.criterion_id.value,
+ ad_group.name.value, ad_group.id.value,
+ campaign.name.value, campaign.id.value,
+ metrics.impressions.value,
+ metrics.clicks.value, metrics.cost_micros.value))
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('Retrieves a campaign\'s negative keywords.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, _DEFAULT_PAGE_SIZE)
diff --git a/examples/v0/targeting/__init__.py b/examples/v0/targeting/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/examples/v0/targeting/add_campaign_targeting_criteria.py b/examples/v0/targeting/add_campaign_targeting_criteria.py
new file mode 100644
index 000000000..a5a8ca957
--- /dev/null
+++ b/examples/v0/targeting/add_campaign_targeting_criteria.py
@@ -0,0 +1,75 @@
+# Copyright 2018 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 adding campaign targeting criteria."""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+
+
+def main(client, customer_id, campaign_id, keyword):
+ campaign_criterion_service = client.get_service('CampaignCriterionService')
+ campaign_service = client.get_service('CampaignService')
+
+ # Create the campaign criterion.
+ campaign_criterion_operation = client.get_type('CampaignCriterionOperation')
+ campaign_criterion = campaign_criterion_operation.create
+ campaign_criterion.campaign.value = campaign_service.campaign_path(
+ customer_id, campaign_id)
+ campaign_criterion.negative.value = True
+ criterion_keyword = campaign_criterion.keyword
+ criterion_keyword.text.value = keyword
+ criterion_keyword.match_type = client.get_type('KeywordMatchTypeEnum').BROAD
+
+ try:
+ campaign_criterion_response = (
+ campaign_criterion_service.mutate_campaign_criteria(
+ customer_id, [campaign_criterion_operation]))
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+ print('Added campaign criterion "%s".'
+ % campaign_criterion_response.results[0].resource_name)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('Adds an expanded text ad to the specified ad group ID, '
+ 'for the given customer ID.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-i', '--campaign_id', type=six.text_type,
+ required=True, help='The campaign ID.')
+ parser.add_argument('-k', '--keyword', type=six.text_type, required=True,
+ help='The keyword to be added to the campaign.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, args.campaign_id, args.keyword)
diff --git a/examples/v0/targeting/get_campaign_targeting_criteria.py b/examples/v0/targeting/get_campaign_targeting_criteria.py
new file mode 100644
index 000000000..49ac3b43f
--- /dev/null
+++ b/examples/v0/targeting/get_campaign_targeting_criteria.py
@@ -0,0 +1,82 @@
+# Copyright 2018 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 how to get campaign criteria, or negative keywords.
+"""
+
+from __future__ import absolute_import
+
+import argparse
+import six
+import sys
+
+import google.ads.google_ads.client
+
+
+_DEFAULT_PAGE_SIZE = 1000
+
+
+def main(client, customer_id, campaign_id, page_size):
+ ga_service = client.get_service('GoogleAdsService')
+
+ query = ('SELECT campaign.id, campaign_criterion.campaign, '
+ 'campaign_criterion.criterion_id, campaign_criterion.negative, '
+ 'campaign_criterion.type, campaign_criterion.keyword.text, '
+ 'campaign_criterion.keyword.match_type '
+ 'FROM campaign_criterion '
+ 'WHERE campaign.id = %s') % campaign_id
+
+ results = ga_service.search(customer_id, query=query, page_size=page_size)
+
+ try:
+ for row in results:
+ criterion = row.campaign_criterion
+ print('Campaign criterion with ID "%s" was retrieved:'
+ % criterion.criterion_id.value)
+
+ if criterion.type == client.get_type('CriterionTypeEnum').KEYWORD:
+ print('\t%sKeyword with text "%s" and match type %s.'
+ % ('' if criterion.negative.value else 'Negative',
+ criterion.keyword.text.value,
+ criterion.keyword.match_type))
+ else:
+ print('Not a keyword!')
+ except google.ads.google_ads.errors.GoogleAdsException as ex:
+ print('Request with ID "%s" failed with status "%s" and includes the '
+ 'following errors:' % (ex.request_id, ex.error.code().name))
+ for error in ex.failure.errors:
+ print('\tError with message "%s".' % error.message)
+ if error.location:
+ for field_path_element in error.location.field_path_elements:
+ print('\t\tOn field: %s' % field_path_element.field_name)
+ sys.exit(1)
+
+
+if __name__ == '__main__':
+ # GoogleAdsClient will read a google-ads.yaml configuration file in the
+ # home directory if none is specified.
+ google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+
+ parser = argparse.ArgumentParser(
+ description=('List campaign criteria, or negative keywords, for a '
+ 'given campaign.'))
+ # The following argument(s) should be provided to run the example.
+ parser.add_argument('-c', '--customer_id', type=six.text_type,
+ required=True, help='The AdWords customer ID.')
+ parser.add_argument('-i', '--campaign_id', type=six.text_type,
+ required=True, help='The campaign ID.')
+ args = parser.parse_args()
+
+ main(google_ads_client, args.customer_id, args.campaign_id,
+ _DEFAULT_PAGE_SIZE)
diff --git a/google-ads.yaml b/google-ads.yaml
new file mode 100644
index 000000000..b1f0d8c5d
--- /dev/null
+++ b/google-ads.yaml
@@ -0,0 +1,4 @@
+developer_token: INSERT_DEVELOPER_TOKEN_HERE
+client_id: INSERT_OAUTH2_CLIENT_ID_HERE
+client_secret: INSERT_OAUTH2_CLIENT_SECRET_HERE
+refresh_token: INSERT_REFRESH_TOKEN_HERE
diff --git a/google/__init__.py b/google/__init__.py
new file mode 100644
index 000000000..855a70730
--- /dev/null
+++ b/google/__init__.py
@@ -0,0 +1,20 @@
+# Copyright 2018 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.
+
+try:
+ import pkg_resources
+ pkg_resources.declare_namespace(__name__)
+except ImportError:
+ import pkgutil
+ __path__ = pkgutil.extend_path(__path__, __name__)
\ No newline at end of file
diff --git a/google/ads/__init__.py b/google/ads/__init__.py
new file mode 100644
index 000000000..7a9e5a0ef
--- /dev/null
+++ b/google/ads/__init__.py
@@ -0,0 +1,20 @@
+# Copyright 2018 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.
+
+try:
+ import pkg_resources
+ pkg_resources.declare_namespace(__name__)
+except ImportError:
+ import pkgutil
+ __path__ = pkgutil.extend_path(__path__, __name__)
diff --git a/google/ads/google_ads/__init__.py b/google/ads/google_ads/__init__.py
new file mode 100644
index 000000000..b616b0bc6
--- /dev/null
+++ b/google/ads/google_ads/__init__.py
@@ -0,0 +1,28 @@
+# Copyright 2018 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.
+
+from __future__ import absolute_import
+
+try:
+ import pkg_resources
+ pkg_resources.declare_namespace(__name__)
+except ImportError:
+ import pkgutil
+ __path__ = pkgutil.extend_path(__path__, __name__)
+
+import google.ads.google_ads.v0
+
+
+VERSION = '0.1.0'
+
diff --git a/google/ads/google_ads/client.py b/google/ads/google_ads/client.py
new file mode 100644
index 000000000..8ef3f6be2
--- /dev/null
+++ b/google/ads/google_ads/client.py
@@ -0,0 +1,333 @@
+# Copyright 2018 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.
+"""A client and common configurations for the Google Ads API."""
+
+import logging
+import os
+import yaml
+
+import google.api_core.grpc_helpers
+import google.auth.transport.requests
+import google.oauth2.credentials
+import google.ads.google_ads.errors
+from google.ads.google_ads.v0.proto.errors import errors_pb2
+import grpc
+
+
+_logger = logging.getLogger(__name__)
+
+_REQUIRED_KEYS = ('client_id', 'client_secret', 'refresh_token',
+ 'developer_token')
+_SERVICE_CLIENT_TEMPLATE = '%sClient'
+_SERVICE_GRPC_TRANSPORT_TEMPLATE = '%sGrpcTransport'
+_PROTO_TEMPLATE = '%s_pb2'
+_DEFAULT_TOKEN_URI = 'https://accounts.google.com/o/oauth2/token'
+_DEFAULT_VERSION = 'v0'
+
+
+class GoogleAdsClient(object):
+ """Google Ads client used to configure settings and fetch services."""
+
+ @classmethod
+ def _get_client_kwargs_from_yaml(cls, yaml_str):
+ """Utility function used to load client kwargs from YAML string.
+
+ Args:
+ yaml_str: a str containing client configuration in YAML format.
+
+ Returns:
+ A dict containing configuration data that will be provided to the
+ GoogleAdsClient initializer as keyword arguments.
+
+ Raises:
+ ValueError: If the configuration lacks a required field.
+ """
+ config_data = yaml.safe_load(yaml_str) or {}
+
+ if all(required_key in config_data for required_key in _REQUIRED_KEYS):
+ credentials = google.oauth2.credentials.Credentials(
+ None,
+ refresh_token=config_data['refresh_token'],
+ client_id=config_data['client_id'],
+ client_secret=config_data['client_secret'],
+ token_uri=_DEFAULT_TOKEN_URI)
+ credentials.refresh(google.auth.transport.requests.Request())
+
+ return {'credentials': credentials,
+ 'developer_token': config_data['developer_token']}
+ else:
+ raise ValueError('A required field in the configuration data was'
+ 'not found. The required fields are: %s'
+ % str(_REQUIRED_KEYS))
+
+ @classmethod
+ def get_type(cls, name, version=_DEFAULT_VERSION):
+ """Returns the specified common, enum, error, or resource type.
+
+ Args:
+ name: a str indicating the name of the type that is being retrieved;
+ e.g. you may specify "CampaignOperation" to retrieve a
+ CampaignOperation instance.
+ version: a str indicating the version of the Google Ads API to be
+ used.
+
+ Returns:
+ A Message instance representing the desired type.
+
+ Raises:
+ AttributeError: If the type for the specified name doesn't exist
+ in the given version.
+ """
+ try:
+ message_type = getattr(_get_version(version).types, name)
+ except AttributeError:
+ raise ValueError('Specified type "%s" does not exist in Google Ads '
+ 'API %s.' % (name, version))
+ return message_type()
+
+ @classmethod
+ def load_from_string(cls, yaml_str):
+ """Creates a GoogleAdsClient with data stored in the YAML string.
+
+ Args:
+ yaml_str: a str containing YAML configuration data used to
+ initialize a GoogleAdsClient.
+
+ Returns:
+ A GoogleAdsClient initialized with the values specified in the
+ string.
+
+ Raises:
+ ValueError: If the configuration lacks a required field.
+ """
+ return cls(**cls._get_client_kwargs_from_yaml(yaml_str))
+
+ @classmethod
+ def load_from_storage(cls, path=None):
+ """Creates a GoogleAdsClient with data stored in the specified file.
+
+ Args:
+ path: a str indicating the path to a YAML file containing
+ configuration data used to initialize a GoogleAdsClient.
+
+ Returns:
+ A GoogleAdsClient initialized with the values in the specified file.
+
+ Raises:
+ FileNotFoundError: If the specified configuration file doesn't
+ exist.
+ IOError: If the configuration file can't be loaded.
+ ValueError: If the configuration file lacks a required field.
+ """
+ if path is None:
+ path = os.path.join(os.path.expanduser('~'), 'google-ads.yaml')
+
+ if not os.path.isabs(path):
+ path = os.path.expanduser(path)
+
+ with open(path, 'rb') as handle:
+ yaml_str = handle.read()
+
+ return cls.load_from_string(yaml_str)
+
+ def __init__(self, credentials, developer_token):
+ """Initializer for the GoogleAdsClient.
+
+ Args:
+ credentials: a google.oauth2.credentials.Credentials instance.
+ developer_token: a str developer token.
+ """
+ self.credentials = credentials
+ self.developer_token = developer_token
+
+ def get_service(self, name, version=_DEFAULT_VERSION):
+ """Returns a service client instance for the specified service_name.
+
+ Args:
+ name: a str indicating the name of the service for which a
+ service client is being retrieved; e.g. you may specify
+ "CampaignService" to retrieve a CampaignServiceClient instance.
+ version: a str indicating the version of the Google Ads API to be
+ used.
+
+ Returns:
+ A service client instance associated with the given service_name.
+
+ Raises:
+ AttributeError: If the specified name doesn't exist.
+ """
+ version = _get_version(version)
+
+ try:
+ service_client = getattr(version, _SERVICE_CLIENT_TEMPLATE % name)
+ except AttributeError:
+ raise ValueError('Specified service "%s" does not exist in Google '
+ 'Ads API %s.' % (name, version))
+
+ try:
+ service_transport_class = getattr(
+ version, _SERVICE_GRPC_TRANSPORT_TEMPLATE % name)
+ except AttributeError:
+ raise ValueError('Grpc transport does not exist for the specified '
+ 'service "%s".' % name)
+
+ channel = service_transport_class.create_channel(
+ credentials=self.credentials)
+
+ channel = grpc.intercept_channel(
+ channel,
+ MetadataInterceptor(self.developer_token),
+ ExceptionInterceptor(),
+ )
+
+ service_transport = service_transport_class(channel=channel)
+
+ return service_client(transport=service_transport)
+
+
+class ExceptionInterceptor(grpc.UnaryUnaryClientInterceptor):
+ """An interceptor that wraps rpc exceptions."""
+
+ _FAILURE_KEY = 'google.ads.googleads.v0.errors.googleadsfailure-bin'
+ _REQUEST_ID_KEY = 'request-id'
+ # Codes that are retried upon by google.api_core.
+ _RETRY_STATUS_CODES = (
+ grpc.StatusCode.INTERNAL, grpc.StatusCode.RESOURCE_EXHAUSTED)
+
+ def _get_google_ads_failure(self, trailing_metadata):
+ """Gets the Google Ads failure details if they exist.
+
+ Args:
+ trailing_metadata:
+
+ Returns:
+ A GoogleAdsFailure that describes how a GoogleAds API call failed.
+ Returns None if either the trailing metadata of the request did not
+ return the failure details, or if the GoogleAdsFailure fails to
+ parse.
+ """
+ for kv in trailing_metadata:
+ if kv[0] == self._FAILURE_KEY:
+ try:
+ ga_failure = errors_pb2.GoogleAdsFailure()
+ ga_failure.ParseFromString(kv[1])
+ return ga_failure
+ except google.protobuf.message.DecodeError:
+ return None
+
+ def _get_request_id(self, trailing_metadata):
+ """Gets the request ID for the Google Ads API request.
+
+ Args:
+ trailing_metadata:
+
+ Returns:
+ A str request ID associated with the Google Ads API request, or None
+ if it doesn't exist.
+ """
+ for kv in trailing_metadata:
+ if kv[0] == self._REQUEST_ID_KEY:
+ return kv[1] # Return the found request ID.
+
+ return None
+
+
+
+ def intercept_unary_unary(self, continuation, client_call_details, request):
+ """Intercepts and wraps exceptions in the rpc response.
+
+ Overrides abstract method defined in grpc.UnaryUnaryClientInterceptor.
+
+ Raises:
+ GoogleAdsException: if the Google Ads API response contains an
+ exception and GoogleAdsFailure is in the trailing metadata.
+ """
+ response = continuation(client_call_details, request)
+ ex = response.exception()
+
+ if ex and response._state.code not in self._RETRY_STATUS_CODES:
+ trailing_metadata = response.trailing_metadata()
+ google_ads_failure = self._get_google_ads_failure(trailing_metadata)
+
+ if google_ads_failure:
+ request_id = self._get_request_id(trailing_metadata)
+
+ raise google.ads.google_ads.errors.GoogleAdsException(
+ ex, response, google_ads_failure, request_id)
+ else:
+ # Raise the original exception if not a GoogleAdsFailure.
+ raise ex
+
+ return response
+
+
+class LoggingInterceptor(grpc.UnaryUnaryClientInterceptor):
+ """An interceptor that logs rpc requests and responses."""
+
+ def intercept_unary_unary(self, continuation, client_call_details, request):
+ """Intercepts and logs API interactions.
+
+ Overrides abstract method defined in grpc.UnaryUnaryClientInterceptor.
+ """
+ _logger.debug('Method: "%s" called with Request: "%s"'
+ % (client_call_details.method, request))
+
+ response = continuation(client_call_details, request)
+
+ # TODO: Handle response here.
+
+ return response
+
+
+class MetadataInterceptor(grpc.UnaryUnaryClientInterceptor):
+ """An interceptor that appends custom metadata to requests."""
+
+ def __init__(self, developer_token):
+ self.developer_token_meta = ('developer-token', developer_token)
+
+ def intercept_unary_unary(self, continuation, client_call_details, request):
+ """Intercepts and appends custom metadata.
+
+ Overrides abstract method defined in grpc.UnaryUnaryClientInterceptor.
+ """
+ if client_call_details.metadata is None:
+ metadata = []
+ else:
+ metadata = list(client_call_details.metadata)
+
+ metadata.append(self.developer_token_meta)
+
+ client_call_details = grpc._interceptor._ClientCallDetails(
+ client_call_details.method, client_call_details.timeout, metadata,
+ client_call_details.credentials
+ )
+
+ return continuation(client_call_details, request)
+
+
+def _get_version(name):
+ """Returns the given API version.
+
+ Args:
+ name: a str indicating the API version.
+
+ Returns:
+ A module associated with the given API version.
+ """
+ try:
+ version = getattr(google.ads.google_ads, name)
+ except AttributeError:
+ raise ValueError('Specified Google Ads API version "%s" does not exist.'
+ % name)
+ return version
diff --git a/google/ads/google_ads/errors.py b/google/ads/google_ads/errors.py
new file mode 100644
index 000000000..89463828d
--- /dev/null
+++ b/google/ads/google_ads/errors.py
@@ -0,0 +1,33 @@
+# Copyright 2018 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.
+"""Errors used by the Google Ads API library."""
+
+
+class GoogleAdsException(Exception):
+ """Exception thrown in response to an API error from GoogleAds servers."""
+
+ def __init__(self, error, call, failure, request_id):
+ """Initializer.
+
+ Args:
+ error: the grpc.RpcError raised by an rpc call.
+ call: the grpc.Call object containing the details of the rpc call.
+ failure: the GoogleAdsFailure instance describing how the
+ GoogleAds API call failed.
+ request_id: a str request ID associated with the GoogleAds API call.
+ """
+ self.error = error
+ self.call = call
+ self.failure = failure
+ self.request_id = request_id
diff --git a/google/ads/google_ads/v0/__init__.py b/google/ads/google_ads/v0/__init__.py
new file mode 100644
index 000000000..3a55607a5
--- /dev/null
+++ b/google/ads/google_ads/v0/__init__.py
@@ -0,0 +1,230 @@
+# Copyright 2018 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.
+
+from __future__ import absolute_import
+
+from google.ads.google_ads.v0 import types
+from google.ads.google_ads.v0.services import ad_group_ad_service_client
+from google.ads.google_ads.v0.services import ad_group_bid_modifier_service_client
+from google.ads.google_ads.v0.services import ad_group_criterion_service_client
+from google.ads.google_ads.v0.services import ad_group_service_client
+from google.ads.google_ads.v0.services import bidding_strategy_service_client
+from google.ads.google_ads.v0.services import campaign_budget_service_client
+from google.ads.google_ads.v0.services import campaign_criterion_service_client
+from google.ads.google_ads.v0.services import campaign_service_client
+from google.ads.google_ads.v0.services import customer_service_client
+from google.ads.google_ads.v0.services import enums
+from google.ads.google_ads.v0.services import geo_target_constant_service_client
+from google.ads.google_ads.v0.services import google_ads_field_service_client
+from google.ads.google_ads.v0.services import google_ads_service_client
+from google.ads.google_ads.v0.services import keyword_view_service_client
+from google.ads.google_ads.v0.services import recommendation_service_client
+from google.ads.google_ads.v0.services.transports import ad_group_ad_service_grpc_transport
+from google.ads.google_ads.v0.services.transports import ad_group_bid_modifier_service_grpc_transport
+from google.ads.google_ads.v0.services.transports import ad_group_criterion_service_grpc_transport
+from google.ads.google_ads.v0.services.transports import ad_group_service_grpc_transport
+from google.ads.google_ads.v0.services.transports import bidding_strategy_service_grpc_transport
+from google.ads.google_ads.v0.services.transports import campaign_budget_service_grpc_transport
+from google.ads.google_ads.v0.services.transports import campaign_criterion_service_grpc_transport
+from google.ads.google_ads.v0.services.transports import campaign_service_grpc_transport
+from google.ads.google_ads.v0.services.transports import customer_service_grpc_transport
+from google.ads.google_ads.v0.services.transports import geo_target_constant_service_grpc_transport
+from google.ads.google_ads.v0.services.transports import google_ads_field_service_grpc_transport
+from google.ads.google_ads.v0.services.transports import google_ads_service_grpc_transport
+from google.ads.google_ads.v0.services.transports import keyword_view_service_grpc_transport
+from google.ads.google_ads.v0.services.transports import recommendation_service_grpc_transport
+
+
+class AdGroupAdServiceClient(
+ ad_group_ad_service_client.AdGroupAdServiceClient):
+ __doc__ = ad_group_ad_service_client.AdGroupAdServiceClient.__doc__
+ enums = enums
+
+
+class AdGroupAdServiceGrpcTransport(
+ ad_group_ad_service_grpc_transport.AdGroupAdServiceGrpcTransport):
+ __doc__ = ad_group_ad_service_grpc_transport.AdGroupAdServiceGrpcTransport.__doc__
+
+
+class AdGroupBidModifierServiceClient(
+ ad_group_bid_modifier_service_client.AdGroupBidModifierServiceClient):
+ __doc__ = ad_group_bid_modifier_service_client.AdGroupBidModifierServiceClient.__doc__
+ enums = enums
+
+
+class AdGroupBidModifierServiceGrpcTransport(
+ ad_group_bid_modifier_service_grpc_transport.AdGroupBidModifierServiceGrpcTransport):
+ __doc__ = ad_group_bid_modifier_service_grpc_transport.AdGroupBidModifierServiceGrpcTransport.__doc__
+
+
+class AdGroupCriterionServiceClient(
+ ad_group_criterion_service_client.AdGroupCriterionServiceClient):
+ __doc__ = ad_group_criterion_service_client.AdGroupCriterionServiceClient.__doc__
+ enums = enums
+
+
+class AdGroupCriterionServiceGrpcTransport(
+ ad_group_criterion_service_grpc_transport.AdGroupCriterionServiceGrpcTransport):
+ __doc__ = ad_group_criterion_service_grpc_transport.AdGroupCriterionServiceGrpcTransport.__doc__
+
+
+class AdGroupServiceClient(ad_group_service_client.AdGroupServiceClient):
+ __doc__ = ad_group_service_client.AdGroupServiceClient.__doc__
+ enums = enums
+
+
+class AdGroupServiceGrpcTransport(
+ ad_group_service_grpc_transport.AdGroupServiceGrpcTransport):
+ __doc__ = ad_group_service_grpc_transport.AdGroupServiceGrpcTransport.__doc__
+
+
+class BiddingStrategyServiceClient(
+ bidding_strategy_service_client.BiddingStrategyServiceClient):
+ __doc__ = bidding_strategy_service_client.BiddingStrategyServiceClient.__doc__
+ enums = enums
+
+
+class BiddingStrategyServiceGrpcTransport(
+ bidding_strategy_service_grpc_transport.BiddingStrategyServiceGrpcTransport):
+ __doc__ = bidding_strategy_service_grpc_transport.BiddingStrategyServiceGrpcTransport.__doc__
+
+
+class CampaignBudgetServiceClient(
+ campaign_budget_service_client.CampaignBudgetServiceClient):
+ __doc__ = campaign_budget_service_client.CampaignBudgetServiceClient.__doc__
+ enums = enums
+
+
+class CampaignBudgetServiceGrpcTransport(
+ campaign_budget_service_grpc_transport.CampaignBudgetServiceGrpcTransport):
+ __doc__ = campaign_budget_service_grpc_transport.CampaignBudgetServiceGrpcTransport.__doc__
+
+
+class CampaignCriterionServiceClient(
+ campaign_criterion_service_client.CampaignCriterionServiceClient):
+ __doc__ = campaign_criterion_service_client.CampaignCriterionServiceClient.__doc__
+ enums = enums
+
+
+class CampaignCriterionServiceGrpcTransport(
+ campaign_criterion_service_grpc_transport.CampaignCriterionServiceGrpcTransport):
+ __doc__ = campaign_criterion_service_grpc_transport.CampaignCriterionServiceGrpcTransport.__doc__
+
+
+class CampaignServiceClient(campaign_service_client.CampaignServiceClient):
+ __doc__ = campaign_service_client.CampaignServiceClient.__doc__
+ enums = enums
+
+
+class CampaignServiceGrpcTransport(
+ campaign_service_grpc_transport.CampaignServiceGrpcTransport):
+ __doc__ = campaign_service_grpc_transport.CampaignServiceGrpcTransport.__doc__
+
+
+class CustomerServiceClient(customer_service_client.CustomerServiceClient):
+ __doc__ = customer_service_client.CustomerServiceClient.__doc__
+ enums = enums
+
+
+class CustomerServiceGrpcTransport(
+ customer_service_grpc_transport.CustomerServiceGrpcTransport):
+ __doc__ = customer_service_grpc_transport.CustomerServiceGrpcTransport.__doc__
+
+
+class GeoTargetConstantServiceClient(
+ geo_target_constant_service_client.GeoTargetConstantServiceClient):
+ __doc__ = geo_target_constant_service_client.GeoTargetConstantServiceClient.__doc__
+ enums = enums
+
+
+class GeoTargetConstantServiceGrpcTransport(
+ geo_target_constant_service_grpc_transport.GeoTargetConstantServiceGrpcTransport):
+ __doc__ = geo_target_constant_service_grpc_transport.GeoTargetConstantServiceGrpcTransport.__doc__
+
+
+class GoogleAdsFieldServiceClient(
+ google_ads_field_service_client.GoogleAdsFieldServiceClient):
+ __doc__ = google_ads_field_service_client.GoogleAdsFieldServiceClient.__doc__
+ enums = enums
+
+
+class GoogleAdsFieldServiceGrpcTransport(
+ google_ads_field_service_grpc_transport.GoogleAdsFieldServiceGrpcTransport):
+ __doc__ = google_ads_field_service_grpc_transport.GoogleAdsFieldServiceGrpcTransport.__doc__
+
+
+class GoogleAdsServiceClient(google_ads_service_client.GoogleAdsServiceClient):
+ __doc__ = google_ads_service_client.GoogleAdsServiceClient.__doc__
+ enums = enums
+
+
+class GoogleAdsServiceGrpcTransport(
+ google_ads_service_grpc_transport.GoogleAdsServiceGrpcTransport):
+ __doc__ = google_ads_service_grpc_transport.GoogleAdsServiceGrpcTransport.__doc__
+
+
+class KeywordViewServiceClient(
+ keyword_view_service_client.KeywordViewServiceClient):
+ __doc__ = keyword_view_service_client.KeywordViewServiceClient.__doc__
+ enums = enums
+
+
+class KeywordViewServiceGrpcTransport(
+ keyword_view_service_grpc_transport.KeywordViewServiceGrpcTransport):
+ __doc__ = keyword_view_service_grpc_transport.KeywordViewServiceGrpcTransport.__doc__
+
+
+class RecommendationServiceClient(
+ recommendation_service_client.RecommendationServiceClient):
+ __doc__ = recommendation_service_client.RecommendationServiceClient.__doc__
+ enums = enums
+
+
+class RecommendationServiceGrpcTransport(
+ recommendation_service_grpc_transport.RecommendationServiceGrpcTransport):
+ __doc__ = recommendation_service_grpc_transport.RecommendationServiceGrpcTransport.__doc__
+
+
+__all__ = (
+ 'enums',
+ 'types',
+ 'AdGroupAdServiceClient',
+ 'AdGroupAdServiceGrpcTransport',
+ 'AdGroupBidModifierServiceClient',
+ 'AdGroupBidModifierServiceGrpcTransport',
+ 'AdGroupCriterionServiceClient',
+ 'AdGroupCriterionServiceGrpcTransport',
+ 'AdGroupServiceClient',
+ 'AdGroupServiceGrpcTransport',
+ 'BiddingStrategyServiceClient',
+ 'BiddingStrategyServiceGrpcTransport',
+ 'CampaignBudgetServiceClient',
+ 'CampaignBudgetServiceGrpcTransport'
+ 'CampaignCriterionServiceClient',
+ 'CampaignCriterionServiceGrpcTransport',
+ 'CampaignServiceClient',
+ 'CampaignServiceGrpcTransport',
+ 'CustomerServiceClient',
+ 'CustomerServiceGrpcTransport',
+ 'GeoTargetConstantServiceClient',
+ 'GeoTargetConstantServiceGrpcTransport',
+ 'GoogleAdsFieldServiceClient',
+ 'GoogleAdsServiceGrpcTransport',
+ 'GoogleAdsServiceClient',
+ 'GoogleAdsServiceGrpcTransport',
+ 'KeywordViewServiceClient',
+ 'KeywordViewServiceGrpcTransport',
+ 'RecommendationServiceClient',
+ 'RecommendationServiceGrpcTransport'
+)
diff --git a/google/ads/google_ads/v0/proto/__init__.py b/google/ads/google_ads/v0/proto/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/google/ads/google_ads/v0/proto/common/__init__.py b/google/ads/google_ads/v0/proto/common/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/google/ads/google_ads/v0/proto/common/ad_type_infos_pb2.py b/google/ads/google_ads/v0/proto/common/ad_type_infos_pb2.py
new file mode 100644
index 000000000..73da484c8
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/common/ad_type_infos_pb2.py
@@ -0,0 +1,532 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/common/ad_type_infos.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/common/ad_type_infos.proto',
+ package='google.ads.googleads.v0.common',
+ syntax='proto3',
+ serialized_pb=_b('\n8google/ads/googleads_v0/proto/common/ad_type_infos.proto\x12\x1egoogle.ads.googleads.v0.common\x1a\x1egoogle/protobuf/wrappers.proto\"\xa4\x01\n\nTextAdInfo\x12.\n\x08headline\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0c\x64\x65scription1\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0c\x64\x65scription2\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"\x8d\x02\n\x12\x45xpandedTextAdInfo\x12\x34\n\x0eheadline_part1\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0eheadline_part2\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0b\x64\x65scription\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05path1\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05path2\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"}\n\x13\x44ynamicSearchAdInfo\x12\x32\n\x0c\x64\x65scription1\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0c\x64\x65scription2\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"\xec\x01\n\x17ResponsiveDisplayAdInfo\x12\x34\n\x0eshort_headline\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rlong_headline\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0b\x64\x65scription\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rbusiness_name\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"\xc9\x03\n\x0e\x43\x61llOnlyAdInfo\x12\x32\n\x0c\x63ountry_code\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0cphone_number\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rbusiness_name\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0c\x64\x65scription1\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0c\x64\x65scription2\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x30\n\x0c\x63\x61ll_tracked\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12;\n\x17\x64isable_call_conversion\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x43\n\x1dphone_number_verification_url\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"P\n\x1b\x45xpandedDynamicSearchAdInfo\x12\x31\n\x0b\x64\x65scription\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"\r\n\x0bHotelAdInfoB\xc6\x01\n\"com.google.ads.googleads.v0.commonB\x10\x41\x64TypeInfosProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/common;common\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Common\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Commonb\x06proto3')
+ ,
+ dependencies=[google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_TEXTADINFO = _descriptor.Descriptor(
+ name='TextAdInfo',
+ full_name='google.ads.googleads.v0.common.TextAdInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='headline', full_name='google.ads.googleads.v0.common.TextAdInfo.headline', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='description1', full_name='google.ads.googleads.v0.common.TextAdInfo.description1', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='description2', full_name='google.ads.googleads.v0.common.TextAdInfo.description2', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=125,
+ serialized_end=289,
+)
+
+
+_EXPANDEDTEXTADINFO = _descriptor.Descriptor(
+ name='ExpandedTextAdInfo',
+ full_name='google.ads.googleads.v0.common.ExpandedTextAdInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='headline_part1', full_name='google.ads.googleads.v0.common.ExpandedTextAdInfo.headline_part1', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='headline_part2', full_name='google.ads.googleads.v0.common.ExpandedTextAdInfo.headline_part2', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='description', full_name='google.ads.googleads.v0.common.ExpandedTextAdInfo.description', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='path1', full_name='google.ads.googleads.v0.common.ExpandedTextAdInfo.path1', index=3,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='path2', full_name='google.ads.googleads.v0.common.ExpandedTextAdInfo.path2', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=292,
+ serialized_end=561,
+)
+
+
+_DYNAMICSEARCHADINFO = _descriptor.Descriptor(
+ name='DynamicSearchAdInfo',
+ full_name='google.ads.googleads.v0.common.DynamicSearchAdInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='description1', full_name='google.ads.googleads.v0.common.DynamicSearchAdInfo.description1', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='description2', full_name='google.ads.googleads.v0.common.DynamicSearchAdInfo.description2', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=563,
+ serialized_end=688,
+)
+
+
+_RESPONSIVEDISPLAYADINFO = _descriptor.Descriptor(
+ name='ResponsiveDisplayAdInfo',
+ full_name='google.ads.googleads.v0.common.ResponsiveDisplayAdInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='short_headline', full_name='google.ads.googleads.v0.common.ResponsiveDisplayAdInfo.short_headline', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='long_headline', full_name='google.ads.googleads.v0.common.ResponsiveDisplayAdInfo.long_headline', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='description', full_name='google.ads.googleads.v0.common.ResponsiveDisplayAdInfo.description', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='business_name', full_name='google.ads.googleads.v0.common.ResponsiveDisplayAdInfo.business_name', index=3,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=691,
+ serialized_end=927,
+)
+
+
+_CALLONLYADINFO = _descriptor.Descriptor(
+ name='CallOnlyAdInfo',
+ full_name='google.ads.googleads.v0.common.CallOnlyAdInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='country_code', full_name='google.ads.googleads.v0.common.CallOnlyAdInfo.country_code', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='phone_number', full_name='google.ads.googleads.v0.common.CallOnlyAdInfo.phone_number', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='business_name', full_name='google.ads.googleads.v0.common.CallOnlyAdInfo.business_name', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='description1', full_name='google.ads.googleads.v0.common.CallOnlyAdInfo.description1', index=3,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='description2', full_name='google.ads.googleads.v0.common.CallOnlyAdInfo.description2', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='call_tracked', full_name='google.ads.googleads.v0.common.CallOnlyAdInfo.call_tracked', index=5,
+ number=6, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='disable_call_conversion', full_name='google.ads.googleads.v0.common.CallOnlyAdInfo.disable_call_conversion', index=6,
+ number=7, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='phone_number_verification_url', full_name='google.ads.googleads.v0.common.CallOnlyAdInfo.phone_number_verification_url', index=7,
+ number=8, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=930,
+ serialized_end=1387,
+)
+
+
+_EXPANDEDDYNAMICSEARCHADINFO = _descriptor.Descriptor(
+ name='ExpandedDynamicSearchAdInfo',
+ full_name='google.ads.googleads.v0.common.ExpandedDynamicSearchAdInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='description', full_name='google.ads.googleads.v0.common.ExpandedDynamicSearchAdInfo.description', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1389,
+ serialized_end=1469,
+)
+
+
+_HOTELADINFO = _descriptor.Descriptor(
+ name='HotelAdInfo',
+ full_name='google.ads.googleads.v0.common.HotelAdInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1471,
+ serialized_end=1484,
+)
+
+_TEXTADINFO.fields_by_name['headline'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_TEXTADINFO.fields_by_name['description1'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_TEXTADINFO.fields_by_name['description2'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_EXPANDEDTEXTADINFO.fields_by_name['headline_part1'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_EXPANDEDTEXTADINFO.fields_by_name['headline_part2'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_EXPANDEDTEXTADINFO.fields_by_name['description'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_EXPANDEDTEXTADINFO.fields_by_name['path1'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_EXPANDEDTEXTADINFO.fields_by_name['path2'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_DYNAMICSEARCHADINFO.fields_by_name['description1'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_DYNAMICSEARCHADINFO.fields_by_name['description2'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_RESPONSIVEDISPLAYADINFO.fields_by_name['short_headline'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_RESPONSIVEDISPLAYADINFO.fields_by_name['long_headline'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_RESPONSIVEDISPLAYADINFO.fields_by_name['description'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_RESPONSIVEDISPLAYADINFO.fields_by_name['business_name'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CALLONLYADINFO.fields_by_name['country_code'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CALLONLYADINFO.fields_by_name['phone_number'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CALLONLYADINFO.fields_by_name['business_name'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CALLONLYADINFO.fields_by_name['description1'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CALLONLYADINFO.fields_by_name['description2'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CALLONLYADINFO.fields_by_name['call_tracked'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_CALLONLYADINFO.fields_by_name['disable_call_conversion'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_CALLONLYADINFO.fields_by_name['phone_number_verification_url'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_EXPANDEDDYNAMICSEARCHADINFO.fields_by_name['description'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+DESCRIPTOR.message_types_by_name['TextAdInfo'] = _TEXTADINFO
+DESCRIPTOR.message_types_by_name['ExpandedTextAdInfo'] = _EXPANDEDTEXTADINFO
+DESCRIPTOR.message_types_by_name['DynamicSearchAdInfo'] = _DYNAMICSEARCHADINFO
+DESCRIPTOR.message_types_by_name['ResponsiveDisplayAdInfo'] = _RESPONSIVEDISPLAYADINFO
+DESCRIPTOR.message_types_by_name['CallOnlyAdInfo'] = _CALLONLYADINFO
+DESCRIPTOR.message_types_by_name['ExpandedDynamicSearchAdInfo'] = _EXPANDEDDYNAMICSEARCHADINFO
+DESCRIPTOR.message_types_by_name['HotelAdInfo'] = _HOTELADINFO
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+TextAdInfo = _reflection.GeneratedProtocolMessageType('TextAdInfo', (_message.Message,), dict(
+ DESCRIPTOR = _TEXTADINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.ad_type_infos_pb2'
+ ,
+ __doc__ = """A text ad.
+
+
+ Attributes:
+ headline:
+ The headline of the ad.
+ description1:
+ The first line of the ad's description.
+ description2:
+ The second line of the ad's description.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.TextAdInfo)
+ ))
+_sym_db.RegisterMessage(TextAdInfo)
+
+ExpandedTextAdInfo = _reflection.GeneratedProtocolMessageType('ExpandedTextAdInfo', (_message.Message,), dict(
+ DESCRIPTOR = _EXPANDEDTEXTADINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.ad_type_infos_pb2'
+ ,
+ __doc__ = """An expanded text ad.
+
+
+ Attributes:
+ headline_part1:
+ The first part of the ad's headline.
+ headline_part2:
+ The second part of the ad's headline.
+ description:
+ The description of the ad.
+ path1:
+ The text that can appear alongside the ad's displayed URL.
+ path2:
+ Additional text that can appear alongside the ad's displayed
+ URL.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.ExpandedTextAdInfo)
+ ))
+_sym_db.RegisterMessage(ExpandedTextAdInfo)
+
+DynamicSearchAdInfo = _reflection.GeneratedProtocolMessageType('DynamicSearchAdInfo', (_message.Message,), dict(
+ DESCRIPTOR = _DYNAMICSEARCHADINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.ad_type_infos_pb2'
+ ,
+ __doc__ = """A dynamic search ad.
+
+
+ Attributes:
+ description1:
+ The first line of the ad's description.
+ description2:
+ The second line of the ad's description.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.DynamicSearchAdInfo)
+ ))
+_sym_db.RegisterMessage(DynamicSearchAdInfo)
+
+ResponsiveDisplayAdInfo = _reflection.GeneratedProtocolMessageType('ResponsiveDisplayAdInfo', (_message.Message,), dict(
+ DESCRIPTOR = _RESPONSIVEDISPLAYADINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.ad_type_infos_pb2'
+ ,
+ __doc__ = """A responsive display ad.
+
+
+ Attributes:
+ short_headline:
+ The short version of the ad's headline.
+ long_headline:
+ The long version of the ad's headline.
+ description:
+ The description of the ad.
+ business_name:
+ The business name in the ad.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.ResponsiveDisplayAdInfo)
+ ))
+_sym_db.RegisterMessage(ResponsiveDisplayAdInfo)
+
+CallOnlyAdInfo = _reflection.GeneratedProtocolMessageType('CallOnlyAdInfo', (_message.Message,), dict(
+ DESCRIPTOR = _CALLONLYADINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.ad_type_infos_pb2'
+ ,
+ __doc__ = """A call-only ad.
+
+
+ Attributes:
+ country_code:
+ The country code in the ad.
+ phone_number:
+ The phone number in the ad.
+ business_name:
+ The business name in the ad.
+ description1:
+ The first line of the ad's description.
+ description2:
+ The second line of the ad's description.
+ call_tracked:
+ Whether to enable call tracking for the creative. Enabling
+ call tracking also enables call conversions.
+ disable_call_conversion:
+ Whether to disable call conversion for the creative. If set to
+ ``true``, disables call conversions even when ``call_tracked``
+ is ``true``. If ``call_tracked`` is ``false``, this field is
+ ignored.
+ phone_number_verification_url:
+ The URL to be used for phone number verification.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.CallOnlyAdInfo)
+ ))
+_sym_db.RegisterMessage(CallOnlyAdInfo)
+
+ExpandedDynamicSearchAdInfo = _reflection.GeneratedProtocolMessageType('ExpandedDynamicSearchAdInfo', (_message.Message,), dict(
+ DESCRIPTOR = _EXPANDEDDYNAMICSEARCHADINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.ad_type_infos_pb2'
+ ,
+ __doc__ = """An expanded dynamic search ad.
+
+
+ Attributes:
+ description:
+ The description of the ad.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.ExpandedDynamicSearchAdInfo)
+ ))
+_sym_db.RegisterMessage(ExpandedDynamicSearchAdInfo)
+
+HotelAdInfo = _reflection.GeneratedProtocolMessageType('HotelAdInfo', (_message.Message,), dict(
+ DESCRIPTOR = _HOTELADINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.ad_type_infos_pb2'
+ ,
+ __doc__ = """A hotel ad.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.HotelAdInfo)
+ ))
+_sym_db.RegisterMessage(HotelAdInfo)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.commonB\020AdTypeInfosProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/common;common\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Common\312\002\036Google\\Ads\\GoogleAds\\V0\\Common'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/common/ad_type_infos_pb2_grpc.py b/google/ads/google_ads/v0/proto/common/ad_type_infos_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/common/ad_type_infos_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/common/bidding_pb2.py b/google/ads/google_ads/v0/proto/common/bidding_pb2.py
new file mode 100644
index 000000000..8ee798037
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/common/bidding_pb2.py
@@ -0,0 +1,732 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/common/bidding.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.enums import page_one_promoted_strategy_goal_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_page__one__promoted__strategy__goal__pb2
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/common/bidding.proto',
+ package='google.ads.googleads.v0.common',
+ syntax='proto3',
+ serialized_pb=_b('\n2google/ads/googleads_v0/proto/common/bidding.proto\x12\x1egoogle.ads.googleads.v0.common\x1aIgoogle/ads/googleads_v0/proto/enums/page_one_promoted_strategy_goal.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\r\n\x0b\x45nhancedCpc\"E\n\tManualCpc\x12\x38\n\x14\x65nhanced_cpc_enabled\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\"\x0b\n\tManualCpm\"\x15\n\x13MaximizeConversions\"L\n\x17MaximizeConversionValue\x12\x31\n\x0btarget_roas\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\"\xc6\x03\n\x0fPageOnePromoted\x12q\n\rstrategy_goal\x18\x01 \x01(\x0e\x32Z.google.ads.googleads.v0.enums.PageOnePromotedStrategyGoalEnum.PageOnePromotedStrategyGoal\x12;\n\x16\x63pc_bid_ceiling_micros\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x32\n\x0c\x62id_modifier\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x37\n\x13only_raise_cpc_bids\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12I\n%raise_cpc_bid_when_budget_constrained\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12K\n\'raise_cpc_bid_when_quality_score_is_low\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\"\xbb\x01\n\tTargetCpa\x12\x36\n\x11target_cpa_micros\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12;\n\x16\x63pc_bid_ceiling_micros\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x39\n\x14\x63pc_bid_floor_micros\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\"\xd2\x02\n\x12TargetOutrankShare\x12@\n\x1btarget_outrank_share_micros\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12\x37\n\x11\x63ompetitor_domain\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\x16\x63pc_bid_ceiling_micros\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x37\n\x13only_raise_cpc_bids\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12K\n\'raise_cpc_bid_when_quality_score_is_low\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\"\xb7\x01\n\nTargetRoas\x12\x31\n\x0btarget_roas\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12;\n\x16\x63pc_bid_ceiling_micros\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x39\n\x14\x63pc_bid_floor_micros\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\"\x84\x01\n\x0bTargetSpend\x12\x38\n\x13target_spend_micros\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12;\n\x16\x63pc_bid_ceiling_micros\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\"\x83\x01\n\nPercentCpc\x12;\n\x16\x63pc_bid_ceiling_micros\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x38\n\x14\x65nhanced_cpc_enabled\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xc2\x01\n\"com.google.ads.googleads.v0.commonB\x0c\x42iddingProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/common;common\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Common\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Commonb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_page__one__promoted__strategy__goal__pb2.DESCRIPTOR,google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_ENHANCEDCPC = _descriptor.Descriptor(
+ name='EnhancedCpc',
+ full_name='google.ads.googleads.v0.common.EnhancedCpc',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=193,
+ serialized_end=206,
+)
+
+
+_MANUALCPC = _descriptor.Descriptor(
+ name='ManualCpc',
+ full_name='google.ads.googleads.v0.common.ManualCpc',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='enhanced_cpc_enabled', full_name='google.ads.googleads.v0.common.ManualCpc.enhanced_cpc_enabled', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=208,
+ serialized_end=277,
+)
+
+
+_MANUALCPM = _descriptor.Descriptor(
+ name='ManualCpm',
+ full_name='google.ads.googleads.v0.common.ManualCpm',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=279,
+ serialized_end=290,
+)
+
+
+_MAXIMIZECONVERSIONS = _descriptor.Descriptor(
+ name='MaximizeConversions',
+ full_name='google.ads.googleads.v0.common.MaximizeConversions',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=292,
+ serialized_end=313,
+)
+
+
+_MAXIMIZECONVERSIONVALUE = _descriptor.Descriptor(
+ name='MaximizeConversionValue',
+ full_name='google.ads.googleads.v0.common.MaximizeConversionValue',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='target_roas', full_name='google.ads.googleads.v0.common.MaximizeConversionValue.target_roas', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=315,
+ serialized_end=391,
+)
+
+
+_PAGEONEPROMOTED = _descriptor.Descriptor(
+ name='PageOnePromoted',
+ full_name='google.ads.googleads.v0.common.PageOnePromoted',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='strategy_goal', full_name='google.ads.googleads.v0.common.PageOnePromoted.strategy_goal', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cpc_bid_ceiling_micros', full_name='google.ads.googleads.v0.common.PageOnePromoted.cpc_bid_ceiling_micros', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='bid_modifier', full_name='google.ads.googleads.v0.common.PageOnePromoted.bid_modifier', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='only_raise_cpc_bids', full_name='google.ads.googleads.v0.common.PageOnePromoted.only_raise_cpc_bids', index=3,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='raise_cpc_bid_when_budget_constrained', full_name='google.ads.googleads.v0.common.PageOnePromoted.raise_cpc_bid_when_budget_constrained', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='raise_cpc_bid_when_quality_score_is_low', full_name='google.ads.googleads.v0.common.PageOnePromoted.raise_cpc_bid_when_quality_score_is_low', index=5,
+ number=6, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=394,
+ serialized_end=848,
+)
+
+
+_TARGETCPA = _descriptor.Descriptor(
+ name='TargetCpa',
+ full_name='google.ads.googleads.v0.common.TargetCpa',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='target_cpa_micros', full_name='google.ads.googleads.v0.common.TargetCpa.target_cpa_micros', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cpc_bid_ceiling_micros', full_name='google.ads.googleads.v0.common.TargetCpa.cpc_bid_ceiling_micros', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cpc_bid_floor_micros', full_name='google.ads.googleads.v0.common.TargetCpa.cpc_bid_floor_micros', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=851,
+ serialized_end=1038,
+)
+
+
+_TARGETOUTRANKSHARE = _descriptor.Descriptor(
+ name='TargetOutrankShare',
+ full_name='google.ads.googleads.v0.common.TargetOutrankShare',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='target_outrank_share_micros', full_name='google.ads.googleads.v0.common.TargetOutrankShare.target_outrank_share_micros', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='competitor_domain', full_name='google.ads.googleads.v0.common.TargetOutrankShare.competitor_domain', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cpc_bid_ceiling_micros', full_name='google.ads.googleads.v0.common.TargetOutrankShare.cpc_bid_ceiling_micros', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='only_raise_cpc_bids', full_name='google.ads.googleads.v0.common.TargetOutrankShare.only_raise_cpc_bids', index=3,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='raise_cpc_bid_when_quality_score_is_low', full_name='google.ads.googleads.v0.common.TargetOutrankShare.raise_cpc_bid_when_quality_score_is_low', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1041,
+ serialized_end=1379,
+)
+
+
+_TARGETROAS = _descriptor.Descriptor(
+ name='TargetRoas',
+ full_name='google.ads.googleads.v0.common.TargetRoas',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='target_roas', full_name='google.ads.googleads.v0.common.TargetRoas.target_roas', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cpc_bid_ceiling_micros', full_name='google.ads.googleads.v0.common.TargetRoas.cpc_bid_ceiling_micros', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cpc_bid_floor_micros', full_name='google.ads.googleads.v0.common.TargetRoas.cpc_bid_floor_micros', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1382,
+ serialized_end=1565,
+)
+
+
+_TARGETSPEND = _descriptor.Descriptor(
+ name='TargetSpend',
+ full_name='google.ads.googleads.v0.common.TargetSpend',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='target_spend_micros', full_name='google.ads.googleads.v0.common.TargetSpend.target_spend_micros', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cpc_bid_ceiling_micros', full_name='google.ads.googleads.v0.common.TargetSpend.cpc_bid_ceiling_micros', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1568,
+ serialized_end=1700,
+)
+
+
+_PERCENTCPC = _descriptor.Descriptor(
+ name='PercentCpc',
+ full_name='google.ads.googleads.v0.common.PercentCpc',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='cpc_bid_ceiling_micros', full_name='google.ads.googleads.v0.common.PercentCpc.cpc_bid_ceiling_micros', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='enhanced_cpc_enabled', full_name='google.ads.googleads.v0.common.PercentCpc.enhanced_cpc_enabled', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1703,
+ serialized_end=1834,
+)
+
+_MANUALCPC.fields_by_name['enhanced_cpc_enabled'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_MAXIMIZECONVERSIONVALUE.fields_by_name['target_roas'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_PAGEONEPROMOTED.fields_by_name['strategy_goal'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_page__one__promoted__strategy__goal__pb2._PAGEONEPROMOTEDSTRATEGYGOALENUM_PAGEONEPROMOTEDSTRATEGYGOAL
+_PAGEONEPROMOTED.fields_by_name['cpc_bid_ceiling_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_PAGEONEPROMOTED.fields_by_name['bid_modifier'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_PAGEONEPROMOTED.fields_by_name['only_raise_cpc_bids'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_PAGEONEPROMOTED.fields_by_name['raise_cpc_bid_when_budget_constrained'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_PAGEONEPROMOTED.fields_by_name['raise_cpc_bid_when_quality_score_is_low'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_TARGETCPA.fields_by_name['target_cpa_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_TARGETCPA.fields_by_name['cpc_bid_ceiling_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_TARGETCPA.fields_by_name['cpc_bid_floor_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_TARGETOUTRANKSHARE.fields_by_name['target_outrank_share_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT32VALUE
+_TARGETOUTRANKSHARE.fields_by_name['competitor_domain'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_TARGETOUTRANKSHARE.fields_by_name['cpc_bid_ceiling_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_TARGETOUTRANKSHARE.fields_by_name['only_raise_cpc_bids'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_TARGETOUTRANKSHARE.fields_by_name['raise_cpc_bid_when_quality_score_is_low'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_TARGETROAS.fields_by_name['target_roas'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_TARGETROAS.fields_by_name['cpc_bid_ceiling_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_TARGETROAS.fields_by_name['cpc_bid_floor_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_TARGETSPEND.fields_by_name['target_spend_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_TARGETSPEND.fields_by_name['cpc_bid_ceiling_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_PERCENTCPC.fields_by_name['cpc_bid_ceiling_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_PERCENTCPC.fields_by_name['enhanced_cpc_enabled'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+DESCRIPTOR.message_types_by_name['EnhancedCpc'] = _ENHANCEDCPC
+DESCRIPTOR.message_types_by_name['ManualCpc'] = _MANUALCPC
+DESCRIPTOR.message_types_by_name['ManualCpm'] = _MANUALCPM
+DESCRIPTOR.message_types_by_name['MaximizeConversions'] = _MAXIMIZECONVERSIONS
+DESCRIPTOR.message_types_by_name['MaximizeConversionValue'] = _MAXIMIZECONVERSIONVALUE
+DESCRIPTOR.message_types_by_name['PageOnePromoted'] = _PAGEONEPROMOTED
+DESCRIPTOR.message_types_by_name['TargetCpa'] = _TARGETCPA
+DESCRIPTOR.message_types_by_name['TargetOutrankShare'] = _TARGETOUTRANKSHARE
+DESCRIPTOR.message_types_by_name['TargetRoas'] = _TARGETROAS
+DESCRIPTOR.message_types_by_name['TargetSpend'] = _TARGETSPEND
+DESCRIPTOR.message_types_by_name['PercentCpc'] = _PERCENTCPC
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+EnhancedCpc = _reflection.GeneratedProtocolMessageType('EnhancedCpc', (_message.Message,), dict(
+ DESCRIPTOR = _ENHANCEDCPC,
+ __module__ = 'google.ads.googleads_v0.proto.common.bidding_pb2'
+ ,
+ __doc__ = """An automated bidding strategy that raises bids for clicks that seem more
+ likely to lead to a conversion and lowers them for clicks where they
+ seem less likely.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.EnhancedCpc)
+ ))
+_sym_db.RegisterMessage(EnhancedCpc)
+
+ManualCpc = _reflection.GeneratedProtocolMessageType('ManualCpc', (_message.Message,), dict(
+ DESCRIPTOR = _MANUALCPC,
+ __module__ = 'google.ads.googleads_v0.proto.common.bidding_pb2'
+ ,
+ __doc__ = """Manual click-based bidding where user pays per click.
+
+
+ Attributes:
+ enhanced_cpc_enabled:
+ Whether bids are to be enhanced based on conversion optimizer
+ data.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.ManualCpc)
+ ))
+_sym_db.RegisterMessage(ManualCpc)
+
+ManualCpm = _reflection.GeneratedProtocolMessageType('ManualCpm', (_message.Message,), dict(
+ DESCRIPTOR = _MANUALCPM,
+ __module__ = 'google.ads.googleads_v0.proto.common.bidding_pb2'
+ ,
+ __doc__ = """Manual impression-based bidding where user pays per thousand
+ impressions.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.ManualCpm)
+ ))
+_sym_db.RegisterMessage(ManualCpm)
+
+MaximizeConversions = _reflection.GeneratedProtocolMessageType('MaximizeConversions', (_message.Message,), dict(
+ DESCRIPTOR = _MAXIMIZECONVERSIONS,
+ __module__ = 'google.ads.googleads_v0.proto.common.bidding_pb2'
+ ,
+ __doc__ = """An automated bidding strategy that sets bids to help get the most
+ conversions for your campaign while spending your budget.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.MaximizeConversions)
+ ))
+_sym_db.RegisterMessage(MaximizeConversions)
+
+MaximizeConversionValue = _reflection.GeneratedProtocolMessageType('MaximizeConversionValue', (_message.Message,), dict(
+ DESCRIPTOR = _MAXIMIZECONVERSIONVALUE,
+ __module__ = 'google.ads.googleads_v0.proto.common.bidding_pb2'
+ ,
+ __doc__ = """An automated bidding strategy which tries to maximize conversion value
+ given a daily budget.
+
+
+ Attributes:
+ target_roas:
+ The target return on ad spend (ROAS) option. If set, the bid
+ strategy will maximize revenue while averaging the target
+ return on ad spend. If the target ROAS is high, the bid
+ strategy may not be able to spend the full budget. If the
+ target ROAS is not set, the bid strategy will aim to achieve
+ the highest possible ROAS for the budget.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.MaximizeConversionValue)
+ ))
+_sym_db.RegisterMessage(MaximizeConversionValue)
+
+PageOnePromoted = _reflection.GeneratedProtocolMessageType('PageOnePromoted', (_message.Message,), dict(
+ DESCRIPTOR = _PAGEONEPROMOTED,
+ __module__ = 'google.ads.googleads_v0.proto.common.bidding_pb2'
+ ,
+ __doc__ = """An automated bidding strategy which sets CPC bids to target impressions
+ on page one, or page one promoted slots on google.com.
+
+
+ Attributes:
+ strategy_goal:
+ The strategy goal of where impressions are desired to be shown
+ on search result pages.
+ cpc_bid_ceiling_micros:
+ Maximum bid limit that can be set by the bid strategy. The
+ limit applies to all keywords managed by the strategy.
+ bid_modifier:
+ Bid multiplier to be applied to the relevant bid estimate
+ (depending on the ``strategy_goal``) in determining a
+ keyword's new CPC bid.
+ only_raise_cpc_bids:
+ Whether the strategy should always follow bid estimate
+ changes, or only increase. If false, always sets a keyword's
+ new bid to the current bid estimate. If true, only updates a
+ keyword's bid if the current bid estimate is greater than the
+ current bid.
+ raise_cpc_bid_when_budget_constrained:
+ Whether the strategy is allowed to raise bids when the
+ throttling rate of the budget it is serving out of rises above
+ a threshold.
+ raise_cpc_bid_when_quality_score_is_low:
+ Whether the strategy is allowed to raise bids on keywords with
+ lower-range quality scores.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.PageOnePromoted)
+ ))
+_sym_db.RegisterMessage(PageOnePromoted)
+
+TargetCpa = _reflection.GeneratedProtocolMessageType('TargetCpa', (_message.Message,), dict(
+ DESCRIPTOR = _TARGETCPA,
+ __module__ = 'google.ads.googleads_v0.proto.common.bidding_pb2'
+ ,
+ __doc__ = """An automated bid strategy that sets bids to help get as many conversions
+ as possible at the target cost-per-acquisition (CPA) you set.
+
+
+ Attributes:
+ target_cpa_micros:
+ Average CPA target. This target should be greater than or
+ equal to minimum billable unit based on the currency for the
+ account.
+ cpc_bid_ceiling_micros:
+ Maximum bid limit that can be set by the bid strategy. The
+ limit applies to all keywords managed by the strategy.
+ cpc_bid_floor_micros:
+ Minimum bid limit that can be set by the bid strategy. The
+ limit applies to all keywords managed by the strategy.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.TargetCpa)
+ ))
+_sym_db.RegisterMessage(TargetCpa)
+
+TargetOutrankShare = _reflection.GeneratedProtocolMessageType('TargetOutrankShare', (_message.Message,), dict(
+ DESCRIPTOR = _TARGETOUTRANKSHARE,
+ __module__ = 'google.ads.googleads_v0.proto.common.bidding_pb2'
+ ,
+ __doc__ = """An automated bidding strategy that sets bids based on the target
+ fraction of auctions where the advertiser should outrank a specific
+ competitor.
+
+
+ Attributes:
+ target_outrank_share_micros:
+ The target fraction of auctions where the advertiser should
+ outrank the competitor. The advertiser outranks the competitor
+ in an auction if either the advertiser appears above the
+ competitor in the search results, or appears in the search
+ results when the competitor does not. Value must be between 1
+ and 1000000, inclusive.
+ competitor_domain:
+ Competitor's visible domain URL.
+ cpc_bid_ceiling_micros:
+ Maximum bid limit that can be set by the bid strategy. The
+ limit applies to all keywords managed by the strategy.
+ only_raise_cpc_bids:
+ Whether the strategy should always follow bid estimate
+ changes, or only increase. If false, always set a keyword's
+ new bid to the current bid estimate. If true, only updates a
+ keyword's bid if the current bid estimate is greater than the
+ current bid.
+ raise_cpc_bid_when_quality_score_is_low:
+ Whether the strategy is allowed to raise bids on keywords with
+ lower-range quality scores.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.TargetOutrankShare)
+ ))
+_sym_db.RegisterMessage(TargetOutrankShare)
+
+TargetRoas = _reflection.GeneratedProtocolMessageType('TargetRoas', (_message.Message,), dict(
+ DESCRIPTOR = _TARGETROAS,
+ __module__ = 'google.ads.googleads_v0.proto.common.bidding_pb2'
+ ,
+ __doc__ = """An automated bidding strategy that helps you maximize revenue while
+ averaging a specific target return on ad spend (ROAS).
+
+
+ Attributes:
+ target_roas:
+ Required. The desired revenue (based on conversion data) per
+ unit of spend. Value must be between 0.01 and 1000.0,
+ inclusive.
+ cpc_bid_ceiling_micros:
+ Maximum bid limit that can be set by the bid strategy. The
+ limit applies to all keywords managed by the strategy.
+ cpc_bid_floor_micros:
+ Minimum bid limit that can be set by the bid strategy. The
+ limit applies to all keywords managed by the strategy.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.TargetRoas)
+ ))
+_sym_db.RegisterMessage(TargetRoas)
+
+TargetSpend = _reflection.GeneratedProtocolMessageType('TargetSpend', (_message.Message,), dict(
+ DESCRIPTOR = _TARGETSPEND,
+ __module__ = 'google.ads.googleads_v0.proto.common.bidding_pb2'
+ ,
+ __doc__ = """An automated bid strategy that sets your bids to help get as many clicks
+ as possible within your budget.
+
+
+ Attributes:
+ target_spend_micros:
+ The spend target under which to maximize clicks. A TargetSpend
+ bidder will attempt to spend the smaller of this value or the
+ natural throttling spend amount. If not specified, the budget
+ is used as the spend target.
+ cpc_bid_ceiling_micros:
+ Maximum bid limit that can be set by the bid strategy. The
+ limit applies to all keywords managed by the strategy.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.TargetSpend)
+ ))
+_sym_db.RegisterMessage(TargetSpend)
+
+PercentCpc = _reflection.GeneratedProtocolMessageType('PercentCpc', (_message.Message,), dict(
+ DESCRIPTOR = _PERCENTCPC,
+ __module__ = 'google.ads.googleads_v0.proto.common.bidding_pb2'
+ ,
+ __doc__ = """A bidding strategy where bids are a fraction of the advertised price for
+ some good or service.
+
+
+ Attributes:
+ cpc_bid_ceiling_micros:
+ Maximum bid limit that can be set by the bid strategy. This is
+ an optional field entered by the advertiser and specified in
+ local micros. Note: A zero value is interpreted in the same
+ way as having bid\_ceiling undefined.
+ enhanced_cpc_enabled:
+ Adjusts the bid for each auction upward or downward, depending
+ on the likelihood of a conversion. Individual bids may exceed
+ cpc\_bid\_ceiling\_micros, but the average bid amount for a
+ campaign should not.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.PercentCpc)
+ ))
+_sym_db.RegisterMessage(PercentCpc)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.commonB\014BiddingProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/common;common\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Common\312\002\036Google\\Ads\\GoogleAds\\V0\\Common'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/common/bidding_pb2_grpc.py b/google/ads/google_ads/v0/proto/common/bidding_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/common/bidding_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/common/criteria_pb2.py b/google/ads/google_ads/v0/proto/common/criteria_pb2.py
new file mode 100644
index 000000000..150c5bb00
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/common/criteria_pb2.py
@@ -0,0 +1,902 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/common/criteria.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.enums import keyword_match_type_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_keyword__match__type__pb2
+from google.ads.google_ads.v0.proto.enums import listing_custom_attribute_index_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_listing__custom__attribute__index__pb2
+from google.ads.google_ads.v0.proto.enums import listing_group_type_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_listing__group__type__pb2
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/common/criteria.proto',
+ package='google.ads.googleads.v0.common',
+ syntax='proto3',
+ serialized_pb=_b('\n3google/ads/googleads_v0/proto/common/criteria.proto\x12\x1egoogle.ads.googleads.v0.common\x1a\n\x18\x63ountry_region_criterion\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"G\n\x0eHotelStateInfo\x12\x35\n\x0fstate_criterion\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"E\n\rHotelCityInfo\x12\x34\n\x0e\x63ity_criterion\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"\xb4\x01\n\x1aListingCustomAttributeInfo\x12+\n\x05value\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12i\n\x05index\x18\x02 \x01(\x0e\x32Z.google.ads.googleads.v0.enums.ListingCustomAttributeIndexEnum.ListingCustomAttributeIndex\"\x1c\n\x1aHotelDateSelectionTypeInfo\"}\n\x1dHotelAdvanceBookingWindowInfo\x12-\n\x08min_days\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12-\n\x08max_days\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\"y\n\x15HotelLengthOfStayInfo\x12/\n\nmin_nights\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12/\n\nmax_nights\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\"\x15\n\x13HotelCheckInDayInfoB\xc3\x01\n\"com.google.ads.googleads.v0.commonB\rCriteriaProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/common;common\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Common\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Commonb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_keyword__match__type__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_listing__custom__attribute__index__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_listing__group__type__pb2.DESCRIPTOR,google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_KEYWORDINFO = _descriptor.Descriptor(
+ name='KeywordInfo',
+ full_name='google.ads.googleads.v0.common.KeywordInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='text', full_name='google.ads.googleads.v0.common.KeywordInfo.text', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='match_type', full_name='google.ads.googleads.v0.common.KeywordInfo.match_type', index=1,
+ number=2, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=318,
+ serialized_end=465,
+)
+
+
+_LOCATIONINFO = _descriptor.Descriptor(
+ name='LocationInfo',
+ full_name='google.ads.googleads.v0.common.LocationInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=467,
+ serialized_end=481,
+)
+
+
+_PLATFORMINFO = _descriptor.Descriptor(
+ name='PlatformInfo',
+ full_name='google.ads.googleads.v0.common.PlatformInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=483,
+ serialized_end=497,
+)
+
+
+_LISTINGGROUPINFO = _descriptor.Descriptor(
+ name='ListingGroupInfo',
+ full_name='google.ads.googleads.v0.common.ListingGroupInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='type', full_name='google.ads.googleads.v0.common.ListingGroupInfo.type', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='case_value', full_name='google.ads.googleads.v0.common.ListingGroupInfo.case_value', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='parent_criterion_id', full_name='google.ads.googleads.v0.common.ListingGroupInfo.parent_criterion_id', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=500,
+ serialized_end=734,
+)
+
+
+_LISTINGDIMENSIONINFO = _descriptor.Descriptor(
+ name='ListingDimensionInfo',
+ full_name='google.ads.googleads.v0.common.ListingDimensionInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='listing_brand', full_name='google.ads.googleads.v0.common.ListingDimensionInfo.listing_brand', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='hotel_id', full_name='google.ads.googleads.v0.common.ListingDimensionInfo.hotel_id', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='hotel_class', full_name='google.ads.googleads.v0.common.ListingDimensionInfo.hotel_class', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='hotel_country_region', full_name='google.ads.googleads.v0.common.ListingDimensionInfo.hotel_country_region', index=3,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='hotel_state', full_name='google.ads.googleads.v0.common.ListingDimensionInfo.hotel_state', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='hotel_city', full_name='google.ads.googleads.v0.common.ListingDimensionInfo.hotel_city', index=5,
+ number=6, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='listing_custom_attribute', full_name='google.ads.googleads.v0.common.ListingDimensionInfo.listing_custom_attribute', index=6,
+ number=7, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='dimension', full_name='google.ads.googleads.v0.common.ListingDimensionInfo.dimension',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=737,
+ serialized_end=1307,
+)
+
+
+_LISTINGBRANDINFO = _descriptor.Descriptor(
+ name='ListingBrandInfo',
+ full_name='google.ads.googleads.v0.common.ListingBrandInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='value', full_name='google.ads.googleads.v0.common.ListingBrandInfo.value', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1309,
+ serialized_end=1372,
+)
+
+
+_HOTELIDINFO = _descriptor.Descriptor(
+ name='HotelIdInfo',
+ full_name='google.ads.googleads.v0.common.HotelIdInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='value', full_name='google.ads.googleads.v0.common.HotelIdInfo.value', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1374,
+ serialized_end=1432,
+)
+
+
+_HOTELCLASSINFO = _descriptor.Descriptor(
+ name='HotelClassInfo',
+ full_name='google.ads.googleads.v0.common.HotelClassInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='value', full_name='google.ads.googleads.v0.common.HotelClassInfo.value', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1434,
+ serialized_end=1494,
+)
+
+
+_HOTELCOUNTRYREGIONINFO = _descriptor.Descriptor(
+ name='HotelCountryRegionInfo',
+ full_name='google.ads.googleads.v0.common.HotelCountryRegionInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='country_region_criterion', full_name='google.ads.googleads.v0.common.HotelCountryRegionInfo.country_region_criterion', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1496,
+ serialized_end=1584,
+)
+
+
+_HOTELSTATEINFO = _descriptor.Descriptor(
+ name='HotelStateInfo',
+ full_name='google.ads.googleads.v0.common.HotelStateInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='state_criterion', full_name='google.ads.googleads.v0.common.HotelStateInfo.state_criterion', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1586,
+ serialized_end=1657,
+)
+
+
+_HOTELCITYINFO = _descriptor.Descriptor(
+ name='HotelCityInfo',
+ full_name='google.ads.googleads.v0.common.HotelCityInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='city_criterion', full_name='google.ads.googleads.v0.common.HotelCityInfo.city_criterion', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1659,
+ serialized_end=1728,
+)
+
+
+_LISTINGCUSTOMATTRIBUTEINFO = _descriptor.Descriptor(
+ name='ListingCustomAttributeInfo',
+ full_name='google.ads.googleads.v0.common.ListingCustomAttributeInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='value', full_name='google.ads.googleads.v0.common.ListingCustomAttributeInfo.value', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='index', full_name='google.ads.googleads.v0.common.ListingCustomAttributeInfo.index', index=1,
+ number=2, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1731,
+ serialized_end=1911,
+)
+
+
+_HOTELDATESELECTIONTYPEINFO = _descriptor.Descriptor(
+ name='HotelDateSelectionTypeInfo',
+ full_name='google.ads.googleads.v0.common.HotelDateSelectionTypeInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1913,
+ serialized_end=1941,
+)
+
+
+_HOTELADVANCEBOOKINGWINDOWINFO = _descriptor.Descriptor(
+ name='HotelAdvanceBookingWindowInfo',
+ full_name='google.ads.googleads.v0.common.HotelAdvanceBookingWindowInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='min_days', full_name='google.ads.googleads.v0.common.HotelAdvanceBookingWindowInfo.min_days', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='max_days', full_name='google.ads.googleads.v0.common.HotelAdvanceBookingWindowInfo.max_days', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1943,
+ serialized_end=2068,
+)
+
+
+_HOTELLENGTHOFSTAYINFO = _descriptor.Descriptor(
+ name='HotelLengthOfStayInfo',
+ full_name='google.ads.googleads.v0.common.HotelLengthOfStayInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='min_nights', full_name='google.ads.googleads.v0.common.HotelLengthOfStayInfo.min_nights', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='max_nights', full_name='google.ads.googleads.v0.common.HotelLengthOfStayInfo.max_nights', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2070,
+ serialized_end=2191,
+)
+
+
+_HOTELCHECKINDAYINFO = _descriptor.Descriptor(
+ name='HotelCheckInDayInfo',
+ full_name='google.ads.googleads.v0.common.HotelCheckInDayInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2193,
+ serialized_end=2214,
+)
+
+_KEYWORDINFO.fields_by_name['text'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_KEYWORDINFO.fields_by_name['match_type'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_keyword__match__type__pb2._KEYWORDMATCHTYPEENUM_KEYWORDMATCHTYPE
+_LISTINGGROUPINFO.fields_by_name['type'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_listing__group__type__pb2._LISTINGGROUPTYPEENUM_LISTINGGROUPTYPE
+_LISTINGGROUPINFO.fields_by_name['case_value'].message_type = _LISTINGDIMENSIONINFO
+_LISTINGGROUPINFO.fields_by_name['parent_criterion_id'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_LISTINGDIMENSIONINFO.fields_by_name['listing_brand'].message_type = _LISTINGBRANDINFO
+_LISTINGDIMENSIONINFO.fields_by_name['hotel_id'].message_type = _HOTELIDINFO
+_LISTINGDIMENSIONINFO.fields_by_name['hotel_class'].message_type = _HOTELCLASSINFO
+_LISTINGDIMENSIONINFO.fields_by_name['hotel_country_region'].message_type = _HOTELCOUNTRYREGIONINFO
+_LISTINGDIMENSIONINFO.fields_by_name['hotel_state'].message_type = _HOTELSTATEINFO
+_LISTINGDIMENSIONINFO.fields_by_name['hotel_city'].message_type = _HOTELCITYINFO
+_LISTINGDIMENSIONINFO.fields_by_name['listing_custom_attribute'].message_type = _LISTINGCUSTOMATTRIBUTEINFO
+_LISTINGDIMENSIONINFO.oneofs_by_name['dimension'].fields.append(
+ _LISTINGDIMENSIONINFO.fields_by_name['listing_brand'])
+_LISTINGDIMENSIONINFO.fields_by_name['listing_brand'].containing_oneof = _LISTINGDIMENSIONINFO.oneofs_by_name['dimension']
+_LISTINGDIMENSIONINFO.oneofs_by_name['dimension'].fields.append(
+ _LISTINGDIMENSIONINFO.fields_by_name['hotel_id'])
+_LISTINGDIMENSIONINFO.fields_by_name['hotel_id'].containing_oneof = _LISTINGDIMENSIONINFO.oneofs_by_name['dimension']
+_LISTINGDIMENSIONINFO.oneofs_by_name['dimension'].fields.append(
+ _LISTINGDIMENSIONINFO.fields_by_name['hotel_class'])
+_LISTINGDIMENSIONINFO.fields_by_name['hotel_class'].containing_oneof = _LISTINGDIMENSIONINFO.oneofs_by_name['dimension']
+_LISTINGDIMENSIONINFO.oneofs_by_name['dimension'].fields.append(
+ _LISTINGDIMENSIONINFO.fields_by_name['hotel_country_region'])
+_LISTINGDIMENSIONINFO.fields_by_name['hotel_country_region'].containing_oneof = _LISTINGDIMENSIONINFO.oneofs_by_name['dimension']
+_LISTINGDIMENSIONINFO.oneofs_by_name['dimension'].fields.append(
+ _LISTINGDIMENSIONINFO.fields_by_name['hotel_state'])
+_LISTINGDIMENSIONINFO.fields_by_name['hotel_state'].containing_oneof = _LISTINGDIMENSIONINFO.oneofs_by_name['dimension']
+_LISTINGDIMENSIONINFO.oneofs_by_name['dimension'].fields.append(
+ _LISTINGDIMENSIONINFO.fields_by_name['hotel_city'])
+_LISTINGDIMENSIONINFO.fields_by_name['hotel_city'].containing_oneof = _LISTINGDIMENSIONINFO.oneofs_by_name['dimension']
+_LISTINGDIMENSIONINFO.oneofs_by_name['dimension'].fields.append(
+ _LISTINGDIMENSIONINFO.fields_by_name['listing_custom_attribute'])
+_LISTINGDIMENSIONINFO.fields_by_name['listing_custom_attribute'].containing_oneof = _LISTINGDIMENSIONINFO.oneofs_by_name['dimension']
+_LISTINGBRANDINFO.fields_by_name['value'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_HOTELIDINFO.fields_by_name['value'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_HOTELCLASSINFO.fields_by_name['value'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_HOTELCOUNTRYREGIONINFO.fields_by_name['country_region_criterion'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_HOTELSTATEINFO.fields_by_name['state_criterion'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_HOTELCITYINFO.fields_by_name['city_criterion'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_LISTINGCUSTOMATTRIBUTEINFO.fields_by_name['value'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_LISTINGCUSTOMATTRIBUTEINFO.fields_by_name['index'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_listing__custom__attribute__index__pb2._LISTINGCUSTOMATTRIBUTEINDEXENUM_LISTINGCUSTOMATTRIBUTEINDEX
+_HOTELADVANCEBOOKINGWINDOWINFO.fields_by_name['min_days'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_HOTELADVANCEBOOKINGWINDOWINFO.fields_by_name['max_days'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_HOTELLENGTHOFSTAYINFO.fields_by_name['min_nights'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_HOTELLENGTHOFSTAYINFO.fields_by_name['max_nights'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+DESCRIPTOR.message_types_by_name['KeywordInfo'] = _KEYWORDINFO
+DESCRIPTOR.message_types_by_name['LocationInfo'] = _LOCATIONINFO
+DESCRIPTOR.message_types_by_name['PlatformInfo'] = _PLATFORMINFO
+DESCRIPTOR.message_types_by_name['ListingGroupInfo'] = _LISTINGGROUPINFO
+DESCRIPTOR.message_types_by_name['ListingDimensionInfo'] = _LISTINGDIMENSIONINFO
+DESCRIPTOR.message_types_by_name['ListingBrandInfo'] = _LISTINGBRANDINFO
+DESCRIPTOR.message_types_by_name['HotelIdInfo'] = _HOTELIDINFO
+DESCRIPTOR.message_types_by_name['HotelClassInfo'] = _HOTELCLASSINFO
+DESCRIPTOR.message_types_by_name['HotelCountryRegionInfo'] = _HOTELCOUNTRYREGIONINFO
+DESCRIPTOR.message_types_by_name['HotelStateInfo'] = _HOTELSTATEINFO
+DESCRIPTOR.message_types_by_name['HotelCityInfo'] = _HOTELCITYINFO
+DESCRIPTOR.message_types_by_name['ListingCustomAttributeInfo'] = _LISTINGCUSTOMATTRIBUTEINFO
+DESCRIPTOR.message_types_by_name['HotelDateSelectionTypeInfo'] = _HOTELDATESELECTIONTYPEINFO
+DESCRIPTOR.message_types_by_name['HotelAdvanceBookingWindowInfo'] = _HOTELADVANCEBOOKINGWINDOWINFO
+DESCRIPTOR.message_types_by_name['HotelLengthOfStayInfo'] = _HOTELLENGTHOFSTAYINFO
+DESCRIPTOR.message_types_by_name['HotelCheckInDayInfo'] = _HOTELCHECKINDAYINFO
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+KeywordInfo = _reflection.GeneratedProtocolMessageType('KeywordInfo', (_message.Message,), dict(
+ DESCRIPTOR = _KEYWORDINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.criteria_pb2'
+ ,
+ __doc__ = """A keyword criterion.
+
+
+ Attributes:
+ text:
+ The text of the keyword (at most 80 characters and 10 words).
+ match_type:
+ The match type of the keyword.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.KeywordInfo)
+ ))
+_sym_db.RegisterMessage(KeywordInfo)
+
+LocationInfo = _reflection.GeneratedProtocolMessageType('LocationInfo', (_message.Message,), dict(
+ DESCRIPTOR = _LOCATIONINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.criteria_pb2'
+ ,
+ __doc__ = """A location criterion.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.LocationInfo)
+ ))
+_sym_db.RegisterMessage(LocationInfo)
+
+PlatformInfo = _reflection.GeneratedProtocolMessageType('PlatformInfo', (_message.Message,), dict(
+ DESCRIPTOR = _PLATFORMINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.criteria_pb2'
+ ,
+ __doc__ = """A platform criterion.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.PlatformInfo)
+ ))
+_sym_db.RegisterMessage(PlatformInfo)
+
+ListingGroupInfo = _reflection.GeneratedProtocolMessageType('ListingGroupInfo', (_message.Message,), dict(
+ DESCRIPTOR = _LISTINGGROUPINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.criteria_pb2'
+ ,
+ __doc__ = """A listing group criterion.
+
+
+ Attributes:
+ type:
+ Type of the listing group.
+ case_value:
+ Dimension value with which this listing group is refining its
+ parent. Undefined for the root group.
+ parent_criterion_id:
+ ID of the parent listing group subdivision. Undefined for the
+ root group.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.ListingGroupInfo)
+ ))
+_sym_db.RegisterMessage(ListingGroupInfo)
+
+ListingDimensionInfo = _reflection.GeneratedProtocolMessageType('ListingDimensionInfo', (_message.Message,), dict(
+ DESCRIPTOR = _LISTINGDIMENSIONINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.criteria_pb2'
+ ,
+ __doc__ = """Listing dimensions for listing group criterion.
+
+
+ Attributes:
+ dimension:
+ Dimension of one of the types below is always present.
+ listing_brand:
+ Brand of the listing.
+ hotel_id:
+ Advertiser-specific hotel ID.
+ hotel_class:
+ Class of the hotel as a number of stars 1 to 5.
+ hotel_country_region:
+ Country or Region the hotel is located in.
+ hotel_state:
+ State the hotel is located in.
+ hotel_city:
+ City the hotel is located in.
+ listing_custom_attribute:
+ Listing custom attribute.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.ListingDimensionInfo)
+ ))
+_sym_db.RegisterMessage(ListingDimensionInfo)
+
+ListingBrandInfo = _reflection.GeneratedProtocolMessageType('ListingBrandInfo', (_message.Message,), dict(
+ DESCRIPTOR = _LISTINGBRANDINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.criteria_pb2'
+ ,
+ __doc__ = """Brand of the listing.
+
+
+ Attributes:
+ value:
+ String value of the listing brand.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.ListingBrandInfo)
+ ))
+_sym_db.RegisterMessage(ListingBrandInfo)
+
+HotelIdInfo = _reflection.GeneratedProtocolMessageType('HotelIdInfo', (_message.Message,), dict(
+ DESCRIPTOR = _HOTELIDINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.criteria_pb2'
+ ,
+ __doc__ = """Advertiser-specific hotel ID.
+
+
+ Attributes:
+ value:
+ String value of the hotel ID.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.HotelIdInfo)
+ ))
+_sym_db.RegisterMessage(HotelIdInfo)
+
+HotelClassInfo = _reflection.GeneratedProtocolMessageType('HotelClassInfo', (_message.Message,), dict(
+ DESCRIPTOR = _HOTELCLASSINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.criteria_pb2'
+ ,
+ __doc__ = """Class of the hotel as a number of stars 1 to 5.
+
+
+ Attributes:
+ value:
+ Long value of the hotel class.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.HotelClassInfo)
+ ))
+_sym_db.RegisterMessage(HotelClassInfo)
+
+HotelCountryRegionInfo = _reflection.GeneratedProtocolMessageType('HotelCountryRegionInfo', (_message.Message,), dict(
+ DESCRIPTOR = _HOTELCOUNTRYREGIONINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.criteria_pb2'
+ ,
+ __doc__ = """Country or Region the hotel is located in.
+
+
+ Attributes:
+ country_region_criterion:
+ The Geo Target Constant resource name.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.HotelCountryRegionInfo)
+ ))
+_sym_db.RegisterMessage(HotelCountryRegionInfo)
+
+HotelStateInfo = _reflection.GeneratedProtocolMessageType('HotelStateInfo', (_message.Message,), dict(
+ DESCRIPTOR = _HOTELSTATEINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.criteria_pb2'
+ ,
+ __doc__ = """State the hotel is located in.
+
+
+ Attributes:
+ state_criterion:
+ The Geo Target Constant resource name.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.HotelStateInfo)
+ ))
+_sym_db.RegisterMessage(HotelStateInfo)
+
+HotelCityInfo = _reflection.GeneratedProtocolMessageType('HotelCityInfo', (_message.Message,), dict(
+ DESCRIPTOR = _HOTELCITYINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.criteria_pb2'
+ ,
+ __doc__ = """City the hotel is located in.
+
+
+ Attributes:
+ city_criterion:
+ The Geo Target Constant resource name.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.HotelCityInfo)
+ ))
+_sym_db.RegisterMessage(HotelCityInfo)
+
+ListingCustomAttributeInfo = _reflection.GeneratedProtocolMessageType('ListingCustomAttributeInfo', (_message.Message,), dict(
+ DESCRIPTOR = _LISTINGCUSTOMATTRIBUTEINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.criteria_pb2'
+ ,
+ __doc__ = """Listing custom attribute.
+
+
+ Attributes:
+ value:
+ String value of the listing custom attribute.
+ index:
+ Indicates the index of the custom attribute.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.ListingCustomAttributeInfo)
+ ))
+_sym_db.RegisterMessage(ListingCustomAttributeInfo)
+
+HotelDateSelectionTypeInfo = _reflection.GeneratedProtocolMessageType('HotelDateSelectionTypeInfo', (_message.Message,), dict(
+ DESCRIPTOR = _HOTELDATESELECTIONTYPEINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.criteria_pb2'
+ ,
+ __doc__ = """Criterion for hotel date selection (default dates vs. user selected).
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.HotelDateSelectionTypeInfo)
+ ))
+_sym_db.RegisterMessage(HotelDateSelectionTypeInfo)
+
+HotelAdvanceBookingWindowInfo = _reflection.GeneratedProtocolMessageType('HotelAdvanceBookingWindowInfo', (_message.Message,), dict(
+ DESCRIPTOR = _HOTELADVANCEBOOKINGWINDOWINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.criteria_pb2'
+ ,
+ __doc__ = """Criterion for number of days prior to the stay the booking is being
+ made.
+
+
+ Attributes:
+ min_days:
+ Low end of the number of days prior to the stay.
+ max_days:
+ High end of the number of days prior to the stay.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.HotelAdvanceBookingWindowInfo)
+ ))
+_sym_db.RegisterMessage(HotelAdvanceBookingWindowInfo)
+
+HotelLengthOfStayInfo = _reflection.GeneratedProtocolMessageType('HotelLengthOfStayInfo', (_message.Message,), dict(
+ DESCRIPTOR = _HOTELLENGTHOFSTAYINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.criteria_pb2'
+ ,
+ __doc__ = """Criterion for length of hotel stay in nights.
+
+
+ Attributes:
+ min_nights:
+ Low end of the number of nights in the stay.
+ max_nights:
+ High end of the number of nights in the stay.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.HotelLengthOfStayInfo)
+ ))
+_sym_db.RegisterMessage(HotelLengthOfStayInfo)
+
+HotelCheckInDayInfo = _reflection.GeneratedProtocolMessageType('HotelCheckInDayInfo', (_message.Message,), dict(
+ DESCRIPTOR = _HOTELCHECKINDAYINFO,
+ __module__ = 'google.ads.googleads_v0.proto.common.criteria_pb2'
+ ,
+ __doc__ = """Criterion for day of the week the booking is for.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.HotelCheckInDayInfo)
+ ))
+_sym_db.RegisterMessage(HotelCheckInDayInfo)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.commonB\rCriteriaProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/common;common\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Common\312\002\036Google\\Ads\\GoogleAds\\V0\\Common'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/common/criteria_pb2_grpc.py b/google/ads/google_ads/v0/proto/common/criteria_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/common/criteria_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/common/custom_parameter_pb2.py b/google/ads/google_ads/v0/proto/common/custom_parameter_pb2.py
new file mode 100644
index 000000000..101348815
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/common/custom_parameter_pb2.py
@@ -0,0 +1,93 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/common/custom_parameter.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/common/custom_parameter.proto',
+ package='google.ads.googleads.v0.common',
+ syntax='proto3',
+ serialized_pb=_b('\n;google/ads/googleads_v0/proto/common/custom_parameter.proto\x12\x1egoogle.ads.googleads.v0.common\x1a\x1egoogle/protobuf/wrappers.proto\"i\n\x0f\x43ustomParameter\x12)\n\x03key\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\xca\x01\n\"com.google.ads.googleads.v0.commonB\x14\x43ustomParameterProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/common;common\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Common\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Commonb\x06proto3')
+ ,
+ dependencies=[google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_CUSTOMPARAMETER = _descriptor.Descriptor(
+ name='CustomParameter',
+ full_name='google.ads.googleads.v0.common.CustomParameter',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='key', full_name='google.ads.googleads.v0.common.CustomParameter.key', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='value', full_name='google.ads.googleads.v0.common.CustomParameter.value', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=127,
+ serialized_end=232,
+)
+
+_CUSTOMPARAMETER.fields_by_name['key'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CUSTOMPARAMETER.fields_by_name['value'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+DESCRIPTOR.message_types_by_name['CustomParameter'] = _CUSTOMPARAMETER
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+CustomParameter = _reflection.GeneratedProtocolMessageType('CustomParameter', (_message.Message,), dict(
+ DESCRIPTOR = _CUSTOMPARAMETER,
+ __module__ = 'google.ads.googleads_v0.proto.common.custom_parameter_pb2'
+ ,
+ __doc__ = """A mapping that can be used by custom parameter tags in a
+ ``tracking_url_template``, ``final_urls``, or ``mobile_final_urls``.
+
+
+ Attributes:
+ key:
+ The key matching the parameter tag name.
+ value:
+ The value to be substituted.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.CustomParameter)
+ ))
+_sym_db.RegisterMessage(CustomParameter)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.commonB\024CustomParameterProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/common;common\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Common\312\002\036Google\\Ads\\GoogleAds\\V0\\Common'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/common/custom_parameter_pb2_grpc.py b/google/ads/google_ads/v0/proto/common/custom_parameter_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/common/custom_parameter_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/common/metrics_pb2.py b/google/ads/google_ads/v0/proto/common/metrics_pb2.py
new file mode 100644
index 000000000..5218cc836
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/common/metrics_pb2.py
@@ -0,0 +1,568 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/common/metrics.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/common/metrics.proto',
+ package='google.ads.googleads.v0.common',
+ syntax='proto3',
+ serialized_pb=_b('\n2google/ads/googleads_v0/proto/common/metrics.proto\x12\x1egoogle.ads.googleads.v0.common\x1a\x1egoogle/protobuf/wrappers.proto\"\xf7\x13\n\x07Metrics\x12\x39\n\x13\x61ll_conversion_rate\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12:\n\x14\x61ll_conversion_value\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x35\n\x0f\x61ll_conversions\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x44\n\x1e\x61ll_conversions_value_per_cost\x18> \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12K\n%all_conversions_value_per_interaction\x18= \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x32\n\x0c\x61verage_cost\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x31\n\x0b\x61verage_cpc\x18\t \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x31\n\x0b\x61verage_cpm\x18\n \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x36\n\x10\x61verage_position\x18\r \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x31\n\x0b\x62ounce_rate\x18\x0f \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12+\n\x06\x63licks\x18\x13 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12J\n$content_budget_lost_impression_share\x18\x14 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12>\n\x18\x63ontent_impression_share\x18\x15 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12H\n\"content_rank_lost_impression_share\x18\x16 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x35\n\x0f\x63onversion_rate\x18\x17 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x36\n\x10\x63onversion_value\x18\x18 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12?\n\x19\x63onversion_value_per_cost\x18@ \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x46\n conversion_value_per_interaction\x18? \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x31\n\x0b\x63onversions\x18\x19 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x30\n\x0b\x63ost_micros\x18\x1a \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12=\n\x17\x63ost_per_all_conversion\x18\x1b \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x39\n\x13\x63ost_per_conversion\x18\x1c \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12>\n\x18\x63ross_device_conversions\x18\x1d \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12)\n\x03\x63tr\x18\x1e \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x35\n\x0f\x65ngagement_rate\x18\x1f \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x30\n\x0b\x65ngagements\x18 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x30\n\x0bimpressions\x18% \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x36\n\x10interaction_rate\x18& \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x31\n\x0cinteractions\x18\' \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x38\n\x12invalid_click_rate\x18( \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x33\n\x0einvalid_clicks\x18) \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12:\n\x14percent_new_visitors\x18* \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x30\n\x0bphone_calls\x18+ \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x36\n\x11phone_impressions\x18, \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x38\n\x12phone_through_rate\x18- \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12\x32\n\x0crelative_ctr\x18. \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12I\n#search_budget_lost_impression_share\x18/ \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12I\n#search_exact_match_impression_share\x18\x31 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12=\n\x17search_impression_share\x18\x32 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12G\n!search_rank_lost_impression_share\x18\x33 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12?\n\x19value_per_all_conversions\x18\x34 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12:\n\x14value_per_conversion\x18\x35 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12=\n\x18view_through_conversions\x18< \x01(\x0b\x32\x1b.google.protobuf.Int64ValueB\xc2\x01\n\"com.google.ads.googleads.v0.commonB\x0cMetricsProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/common;common\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Common\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Commonb\x06proto3')
+ ,
+ dependencies=[google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_METRICS = _descriptor.Descriptor(
+ name='Metrics',
+ full_name='google.ads.googleads.v0.common.Metrics',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='all_conversion_rate', full_name='google.ads.googleads.v0.common.Metrics.all_conversion_rate', index=0,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='all_conversion_value', full_name='google.ads.googleads.v0.common.Metrics.all_conversion_value', index=1,
+ number=6, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='all_conversions', full_name='google.ads.googleads.v0.common.Metrics.all_conversions', index=2,
+ number=7, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='all_conversions_value_per_cost', full_name='google.ads.googleads.v0.common.Metrics.all_conversions_value_per_cost', index=3,
+ number=62, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='all_conversions_value_per_interaction', full_name='google.ads.googleads.v0.common.Metrics.all_conversions_value_per_interaction', index=4,
+ number=61, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='average_cost', full_name='google.ads.googleads.v0.common.Metrics.average_cost', index=5,
+ number=8, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='average_cpc', full_name='google.ads.googleads.v0.common.Metrics.average_cpc', index=6,
+ number=9, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='average_cpm', full_name='google.ads.googleads.v0.common.Metrics.average_cpm', index=7,
+ number=10, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='average_position', full_name='google.ads.googleads.v0.common.Metrics.average_position', index=8,
+ number=13, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='bounce_rate', full_name='google.ads.googleads.v0.common.Metrics.bounce_rate', index=9,
+ number=15, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='clicks', full_name='google.ads.googleads.v0.common.Metrics.clicks', index=10,
+ number=19, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='content_budget_lost_impression_share', full_name='google.ads.googleads.v0.common.Metrics.content_budget_lost_impression_share', index=11,
+ number=20, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='content_impression_share', full_name='google.ads.googleads.v0.common.Metrics.content_impression_share', index=12,
+ number=21, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='content_rank_lost_impression_share', full_name='google.ads.googleads.v0.common.Metrics.content_rank_lost_impression_share', index=13,
+ number=22, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='conversion_rate', full_name='google.ads.googleads.v0.common.Metrics.conversion_rate', index=14,
+ number=23, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='conversion_value', full_name='google.ads.googleads.v0.common.Metrics.conversion_value', index=15,
+ number=24, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='conversion_value_per_cost', full_name='google.ads.googleads.v0.common.Metrics.conversion_value_per_cost', index=16,
+ number=64, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='conversion_value_per_interaction', full_name='google.ads.googleads.v0.common.Metrics.conversion_value_per_interaction', index=17,
+ number=63, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='conversions', full_name='google.ads.googleads.v0.common.Metrics.conversions', index=18,
+ number=25, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cost_micros', full_name='google.ads.googleads.v0.common.Metrics.cost_micros', index=19,
+ number=26, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cost_per_all_conversion', full_name='google.ads.googleads.v0.common.Metrics.cost_per_all_conversion', index=20,
+ number=27, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cost_per_conversion', full_name='google.ads.googleads.v0.common.Metrics.cost_per_conversion', index=21,
+ number=28, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cross_device_conversions', full_name='google.ads.googleads.v0.common.Metrics.cross_device_conversions', index=22,
+ number=29, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ctr', full_name='google.ads.googleads.v0.common.Metrics.ctr', index=23,
+ number=30, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='engagement_rate', full_name='google.ads.googleads.v0.common.Metrics.engagement_rate', index=24,
+ number=31, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='engagements', full_name='google.ads.googleads.v0.common.Metrics.engagements', index=25,
+ number=32, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='impressions', full_name='google.ads.googleads.v0.common.Metrics.impressions', index=26,
+ number=37, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='interaction_rate', full_name='google.ads.googleads.v0.common.Metrics.interaction_rate', index=27,
+ number=38, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='interactions', full_name='google.ads.googleads.v0.common.Metrics.interactions', index=28,
+ number=39, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='invalid_click_rate', full_name='google.ads.googleads.v0.common.Metrics.invalid_click_rate', index=29,
+ number=40, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='invalid_clicks', full_name='google.ads.googleads.v0.common.Metrics.invalid_clicks', index=30,
+ number=41, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='percent_new_visitors', full_name='google.ads.googleads.v0.common.Metrics.percent_new_visitors', index=31,
+ number=42, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='phone_calls', full_name='google.ads.googleads.v0.common.Metrics.phone_calls', index=32,
+ number=43, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='phone_impressions', full_name='google.ads.googleads.v0.common.Metrics.phone_impressions', index=33,
+ number=44, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='phone_through_rate', full_name='google.ads.googleads.v0.common.Metrics.phone_through_rate', index=34,
+ number=45, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='relative_ctr', full_name='google.ads.googleads.v0.common.Metrics.relative_ctr', index=35,
+ number=46, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='search_budget_lost_impression_share', full_name='google.ads.googleads.v0.common.Metrics.search_budget_lost_impression_share', index=36,
+ number=47, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='search_exact_match_impression_share', full_name='google.ads.googleads.v0.common.Metrics.search_exact_match_impression_share', index=37,
+ number=49, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='search_impression_share', full_name='google.ads.googleads.v0.common.Metrics.search_impression_share', index=38,
+ number=50, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='search_rank_lost_impression_share', full_name='google.ads.googleads.v0.common.Metrics.search_rank_lost_impression_share', index=39,
+ number=51, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='value_per_all_conversions', full_name='google.ads.googleads.v0.common.Metrics.value_per_all_conversions', index=40,
+ number=52, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='value_per_conversion', full_name='google.ads.googleads.v0.common.Metrics.value_per_conversion', index=41,
+ number=53, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='view_through_conversions', full_name='google.ads.googleads.v0.common.Metrics.view_through_conversions', index=42,
+ number=60, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=119,
+ serialized_end=2670,
+)
+
+_METRICS.fields_by_name['all_conversion_rate'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['all_conversion_value'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['all_conversions'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['all_conversions_value_per_cost'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['all_conversions_value_per_interaction'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['average_cost'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['average_cpc'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['average_cpm'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['average_position'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['bounce_rate'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['clicks'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_METRICS.fields_by_name['content_budget_lost_impression_share'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['content_impression_share'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['content_rank_lost_impression_share'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['conversion_rate'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['conversion_value'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['conversion_value_per_cost'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['conversion_value_per_interaction'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['conversions'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['cost_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_METRICS.fields_by_name['cost_per_all_conversion'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['cost_per_conversion'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['cross_device_conversions'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['ctr'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['engagement_rate'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['engagements'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_METRICS.fields_by_name['impressions'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_METRICS.fields_by_name['interaction_rate'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['interactions'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_METRICS.fields_by_name['invalid_click_rate'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['invalid_clicks'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_METRICS.fields_by_name['percent_new_visitors'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['phone_calls'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_METRICS.fields_by_name['phone_impressions'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_METRICS.fields_by_name['phone_through_rate'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['relative_ctr'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['search_budget_lost_impression_share'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['search_exact_match_impression_share'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['search_impression_share'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['search_rank_lost_impression_share'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['value_per_all_conversions'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['value_per_conversion'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_METRICS.fields_by_name['view_through_conversions'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+DESCRIPTOR.message_types_by_name['Metrics'] = _METRICS
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+Metrics = _reflection.GeneratedProtocolMessageType('Metrics', (_message.Message,), dict(
+ DESCRIPTOR = _METRICS,
+ __module__ = 'google.ads.googleads_v0.proto.common.metrics_pb2'
+ ,
+ __doc__ = """Metrics data.
+
+
+ Attributes:
+ all_conversion_rate:
+ All conversions divided by the number of ad interactions.
+ all_conversion_value:
+ The total value of all conversions.
+ all_conversions:
+ The total number of conversions. This includes "Conversions"
+ plus conversions that have their "Include in Conversions"
+ setting unchecked.
+ all_conversions_value_per_cost:
+ The value of all conversions divided by the total cost of ad
+ interactions (such as clicks for text ads or views for video
+ ads).
+ all_conversions_value_per_interaction:
+ The value of all conversions divided by the total number of
+ interactions.
+ average_cost:
+ The average amount you pay per interaction. This amount is the
+ total cost of your ads divided by the total number of
+ interactions.
+ average_cpc:
+ The total cost of all clicks divided by the total number of
+ clicks received.
+ average_cpm:
+ Average cost-per-thousand impressions (CPM).
+ average_position:
+ Your ad's position relative to those of other advertisers.
+ bounce_rate:
+ Percentage of clicks where the user only visited a single page
+ on your site. Imported from Google Analytics.
+ clicks:
+ The number of clicks.
+ content_budget_lost_impression_share:
+ The estimated percent of times that your ad was eligible to
+ show on the Display Network but didn't because your budget was
+ too low. Note: Content budget lost impression share is
+ reported in the range of 0 to 0.9. Any value above 0.9 is
+ reported as 0.9001.
+ content_impression_share:
+ The impressions you've received on the Display Network divided
+ by the estimated number of impressions you were eligible to
+ receive. Note: Content impression share is reported in the
+ range of 0.1 to 1. Any value below 0.1 is reported as 0.0999.
+ content_rank_lost_impression_share:
+ The estimated percentage of impressions on the Display Network
+ that your ads didn't receive due to poor Ad Rank. Note:
+ Content rank lost impression share is reported in the range of
+ 0 to 0.9. Any value above 0.9 is reported as 0.9001.
+ conversion_rate:
+ Conversions divided by the number of ad interactions (such as
+ clicks for text ads or views for video ads).
+ conversion_value:
+ The total value of conversions.
+ conversion_value_per_cost:
+ The value of conversions divided by the cost of ad
+ interactions.
+ conversion_value_per_interaction:
+ The value of conversions divided by the number of ad
+ interactions.
+ conversions:
+ The number of conversions. This only includes conversion
+ actions which have "Include in Conversions" checked.
+ cost_micros:
+ The sum of your cost-per-click (CPC) and cost-per-thousand
+ impressions (CPM) costs during this period.
+ cost_per_all_conversion:
+ The cost of ad interactions divided by all conversions.
+ cost_per_conversion:
+ The cost of ad interactions divided by conversions.
+ cross_device_conversions:
+ Conversions from when a customer clicks on an AdWords ad on
+ one device, then converts on a different device or browser.
+ Cross-device conversions are already included in
+ all\_conversions.
+ ctr:
+ The number of clicks your ad receives (Clicks) divided by the
+ number of times your ad is shown (Impressions).
+ engagement_rate:
+ How often people engage with your ad after it's shown to them.
+ This is the number of ad expansions divided by the number of
+ times your ad is shown.
+ engagements:
+ The number of engagements. An engagement occurs when a viewer
+ expands your Lightbox ad. Also, in the future, other ad types
+ may support engagement metrics.
+ impressions:
+ Count of how often your ad has appeared on a search results
+ page or website on the Google Network.
+ interaction_rate:
+ How often people interact with your ad after it is shown to
+ them. This is the number of interactions divided by the number
+ of times your ad is shown.
+ interactions:
+ The number of interactions. An interaction is the main user
+ action associated with an ad format-clicks for text and
+ shopping ads, views for video ads, and so on.
+ invalid_click_rate:
+ The percentage of clicks filtered out of your total number of
+ clicks (filtered + non-filtered clicks) during the reporting
+ period.
+ invalid_clicks:
+ Number of clicks Google considers illegitimate and doesn't
+ charge you for.
+ percent_new_visitors:
+ Percentage of first-time sessions (from people who had never
+ visited your site before). Imported from Google Analytics.
+ phone_calls:
+ Number of offline phone calls.
+ phone_impressions:
+ Number of offline phone impressions.
+ phone_through_rate:
+ Number of phone calls received (phone\_calls) divided by the
+ number of times your phone number is shown
+ (phone\_impressions).
+ relative_ctr:
+ Your clickthrough rate (Ctr) divided by the average
+ clickthrough rate of all advertisers on the websites that show
+ your ads. Measures how your ads perform on Display Network
+ sites compared to other ads on the same sites.
+ search_budget_lost_impression_share:
+ The estimated percent of times that your ad was eligible to
+ show on the Search Network but didn't because your budget was
+ too low. Note: Search budget lost impression share is reported
+ in the range of 0 to 0.9. Any value above 0.9 is reported as
+ 0.9001.
+ search_exact_match_impression_share:
+ The impressions you've received divided by the estimated
+ number of impressions you were eligible to receive on the
+ Search Network for search terms that matched your keywords
+ exactly (or were close variants of your keyword), regardless
+ of your keyword match types. Note: Search exact match
+ impression share is reported in the range of 0.1 to 1. Any
+ value below 0.1 is reported as 0.0999.
+ search_impression_share:
+ The impressions you've received on the Search Network divided
+ by the estimated number of impressions you were eligible to
+ receive. Note: Search impression share is reported in the
+ range of 0.1 to 1. Any value below 0.1 is reported as 0.0999.
+ search_rank_lost_impression_share:
+ The estimated percentage of impressions on the Search Network
+ that your ads didn't receive due to poor Ad Rank. Note: Search
+ rank lost impression share is reported in the range of 0 to
+ 0.9. Any value above 0.9 is reported as 0.9001.
+ value_per_all_conversions:
+ The value of all conversions divided by the number of all
+ conversions.
+ value_per_conversion:
+ The value of conversions divided by the number of conversions.
+ view_through_conversions:
+ The total number of view-through conversions. These happen
+ when a customer sees an image or rich media ad, then later
+ completes a conversion on your site without interacting with
+ (e.g., clicking on) another ad.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.Metrics)
+ ))
+_sym_db.RegisterMessage(Metrics)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.commonB\014MetricsProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/common;common\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Common\312\002\036Google\\Ads\\GoogleAds\\V0\\Common'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/common/metrics_pb2_grpc.py b/google/ads/google_ads/v0/proto/common/metrics_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/common/metrics_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/common/policy_pb2.py b/google/ads/google_ads/v0/proto/common/policy_pb2.py
new file mode 100644
index 000000000..1560c6fbe
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/common/policy_pb2.py
@@ -0,0 +1,97 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/common/policy.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/common/policy.proto',
+ package='google.ads.googleads.v0.common',
+ syntax='proto3',
+ serialized_pb=_b('\n1google/ads/googleads_v0/proto/common/policy.proto\x12\x1egoogle.ads.googleads.v0.common\x1a\x1egoogle/protobuf/wrappers.proto\"}\n\x12PolicyViolationKey\x12\x31\n\x0bpolicy_name\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x34\n\x0eviolating_text\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\xc1\x01\n\"com.google.ads.googleads.v0.commonB\x0bPolicyProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/common;common\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Common\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Commonb\x06proto3')
+ ,
+ dependencies=[google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_POLICYVIOLATIONKEY = _descriptor.Descriptor(
+ name='PolicyViolationKey',
+ full_name='google.ads.googleads.v0.common.PolicyViolationKey',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='policy_name', full_name='google.ads.googleads.v0.common.PolicyViolationKey.policy_name', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='violating_text', full_name='google.ads.googleads.v0.common.PolicyViolationKey.violating_text', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=117,
+ serialized_end=242,
+)
+
+_POLICYVIOLATIONKEY.fields_by_name['policy_name'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_POLICYVIOLATIONKEY.fields_by_name['violating_text'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+DESCRIPTOR.message_types_by_name['PolicyViolationKey'] = _POLICYVIOLATIONKEY
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+PolicyViolationKey = _reflection.GeneratedProtocolMessageType('PolicyViolationKey', (_message.Message,), dict(
+ DESCRIPTOR = _POLICYVIOLATIONKEY,
+ __module__ = 'google.ads.googleads_v0.proto.common.policy_pb2'
+ ,
+ __doc__ = """Key of the violation. The key is used for referring to a violation when
+ filing an exemption request.
+
+
+ Attributes:
+ policy_name:
+ Unique ID of the violated policy.
+ violating_text:
+ The text that violates the policy if specified. Otherwise,
+ refers to the policy in general (e.g., when requesting to be
+ exempt from the whole policy). If not specified for criterion
+ exemptions, the whole policy is implied. Must be specified for
+ ad exemptions.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.PolicyViolationKey)
+ ))
+_sym_db.RegisterMessage(PolicyViolationKey)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.commonB\013PolicyProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/common;common\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Common\312\002\036Google\\Ads\\GoogleAds\\V0\\Common'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/common/policy_pb2_grpc.py b/google/ads/google_ads/v0/proto/common/policy_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/common/policy_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/common/value_pb2.py b/google/ads/google_ads/v0/proto/common/value_pb2.py
new file mode 100644
index 000000000..e0dbd18ee
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/common/value_pb2.py
@@ -0,0 +1,135 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/common/value.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/common/value.proto',
+ package='google.ads.googleads.v0.common',
+ syntax='proto3',
+ serialized_pb=_b('\n0google/ads/googleads_v0/proto/common/value.proto\x12\x1egoogle.ads.googleads.v0.common\"\x87\x01\n\x05Value\x12\x17\n\rboolean_value\x18\x01 \x01(\x08H\x00\x12\x15\n\x0bint64_value\x18\x02 \x01(\x03H\x00\x12\x15\n\x0b\x66loat_value\x18\x03 \x01(\x02H\x00\x12\x16\n\x0c\x64ouble_value\x18\x04 \x01(\x01H\x00\x12\x16\n\x0cstring_value\x18\x05 \x01(\tH\x00\x42\x07\n\x05valueB\xc0\x01\n\"com.google.ads.googleads.v0.commonB\nValueProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/common;common\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Common\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Commonb\x06proto3')
+)
+
+
+
+
+_VALUE = _descriptor.Descriptor(
+ name='Value',
+ full_name='google.ads.googleads.v0.common.Value',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='boolean_value', full_name='google.ads.googleads.v0.common.Value.boolean_value', index=0,
+ number=1, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='int64_value', full_name='google.ads.googleads.v0.common.Value.int64_value', index=1,
+ number=2, type=3, cpp_type=2, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='float_value', full_name='google.ads.googleads.v0.common.Value.float_value', index=2,
+ number=3, type=2, cpp_type=6, label=1,
+ has_default_value=False, default_value=float(0),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='double_value', full_name='google.ads.googleads.v0.common.Value.double_value', index=3,
+ number=4, type=1, cpp_type=5, label=1,
+ has_default_value=False, default_value=float(0),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='string_value', full_name='google.ads.googleads.v0.common.Value.string_value', index=4,
+ number=5, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='value', full_name='google.ads.googleads.v0.common.Value.value',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=85,
+ serialized_end=220,
+)
+
+_VALUE.oneofs_by_name['value'].fields.append(
+ _VALUE.fields_by_name['boolean_value'])
+_VALUE.fields_by_name['boolean_value'].containing_oneof = _VALUE.oneofs_by_name['value']
+_VALUE.oneofs_by_name['value'].fields.append(
+ _VALUE.fields_by_name['int64_value'])
+_VALUE.fields_by_name['int64_value'].containing_oneof = _VALUE.oneofs_by_name['value']
+_VALUE.oneofs_by_name['value'].fields.append(
+ _VALUE.fields_by_name['float_value'])
+_VALUE.fields_by_name['float_value'].containing_oneof = _VALUE.oneofs_by_name['value']
+_VALUE.oneofs_by_name['value'].fields.append(
+ _VALUE.fields_by_name['double_value'])
+_VALUE.fields_by_name['double_value'].containing_oneof = _VALUE.oneofs_by_name['value']
+_VALUE.oneofs_by_name['value'].fields.append(
+ _VALUE.fields_by_name['string_value'])
+_VALUE.fields_by_name['string_value'].containing_oneof = _VALUE.oneofs_by_name['value']
+DESCRIPTOR.message_types_by_name['Value'] = _VALUE
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+Value = _reflection.GeneratedProtocolMessageType('Value', (_message.Message,), dict(
+ DESCRIPTOR = _VALUE,
+ __module__ = 'google.ads.googleads_v0.proto.common.value_pb2'
+ ,
+ __doc__ = """A generic data container.
+
+
+ Attributes:
+ value:
+ A value.
+ boolean_value:
+ A boolean.
+ int64_value:
+ An int64.
+ float_value:
+ A float.
+ double_value:
+ A double.
+ string_value:
+ A string.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.common.Value)
+ ))
+_sym_db.RegisterMessage(Value)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.commonB\nValueProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/common;common\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Common\312\002\036Google\\Ads\\GoogleAds\\V0\\Common'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/common/value_pb2_grpc.py b/google/ads/google_ads/v0/proto/common/value_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/common/value_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/enums/__init__.py b/google/ads/google_ads/v0/proto/enums/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/google/ads/google_ads/v0/proto/enums/ad_group_ad_status_pb2.py b/google/ads/google_ads/v0/proto/enums/ad_group_ad_status_pb2.py
new file mode 100644
index 000000000..6ddb8186f
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/enums/ad_group_ad_status_pb2.py
@@ -0,0 +1,103 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/enums/ad_group_ad_status.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/enums/ad_group_ad_status.proto',
+ package='google.ads.googleads.v0.enums',
+ syntax='proto3',
+ serialized_pb=_b('\ngoogle/ads/googleads_v0/proto/enums/quality_score_bucket.proto\x12\x1dgoogle.ads.googleads.v0.enums\"\x7f\n\x16QualityScoreBucketEnum\"e\n\x12QualityScoreBucket\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x11\n\rBELOW_AVERAGE\x10\x02\x12\x0b\n\x07\x41VERAGE\x10\x03\x12\x11\n\rABOVE_AVERAGE\x10\x04\x42\xc8\x01\n!com.google.ads.googleads.v0.enumsB\x17QualityScoreBucketProtoP\x01ZBgoogle.golang.org/genproto/googleapis/ads/googleads/v0/enums;enums\xa2\x02\x03GAA\xaa\x02\x1dGoogle.Ads.GoogleAds.V0.Enums\xca\x02\x1dGoogle\\Ads\\GoogleAds\\V0\\Enumsb\x06proto3')
+)
+
+
+
+_QUALITYSCOREBUCKETENUM_QUALITYSCOREBUCKET = _descriptor.EnumDescriptor(
+ name='QualityScoreBucket',
+ full_name='google.ads.googleads.v0.enums.QualityScoreBucketEnum.QualityScoreBucket',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BELOW_AVERAGE', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='AVERAGE', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ABOVE_AVERAGE', index=4, number=4,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=123,
+ serialized_end=224,
+)
+_sym_db.RegisterEnumDescriptor(_QUALITYSCOREBUCKETENUM_QUALITYSCOREBUCKET)
+
+
+_QUALITYSCOREBUCKETENUM = _descriptor.Descriptor(
+ name='QualityScoreBucketEnum',
+ full_name='google.ads.googleads.v0.enums.QualityScoreBucketEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _QUALITYSCOREBUCKETENUM_QUALITYSCOREBUCKET,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=97,
+ serialized_end=224,
+)
+
+_QUALITYSCOREBUCKETENUM_QUALITYSCOREBUCKET.containing_type = _QUALITYSCOREBUCKETENUM
+DESCRIPTOR.message_types_by_name['QualityScoreBucketEnum'] = _QUALITYSCOREBUCKETENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+QualityScoreBucketEnum = _reflection.GeneratedProtocolMessageType('QualityScoreBucketEnum', (_message.Message,), dict(
+ DESCRIPTOR = _QUALITYSCOREBUCKETENUM,
+ __module__ = 'google.ads.googleads_v0.proto.enums.quality_score_bucket_pb2'
+ ,
+ __doc__ = """The relative performance compared to other advertisers.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.enums.QualityScoreBucketEnum)
+ ))
+_sym_db.RegisterMessage(QualityScoreBucketEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n!com.google.ads.googleads.v0.enumsB\027QualityScoreBucketProtoP\001ZBgoogle.golang.org/genproto/googleapis/ads/googleads/v0/enums;enums\242\002\003GAA\252\002\035Google.Ads.GoogleAds.V0.Enums\312\002\035Google\\Ads\\GoogleAds\\V0\\Enums'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/enums/quality_score_bucket_pb2_grpc.py b/google/ads/google_ads/v0/proto/enums/quality_score_bucket_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/enums/quality_score_bucket_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/enums/recommendation_type_pb2.py b/google/ads/google_ads/v0/proto/enums/recommendation_type_pb2.py
new file mode 100644
index 000000000..461ea4a01
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/enums/recommendation_type_pb2.py
@@ -0,0 +1,107 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/enums/recommendation_type.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/enums/recommendation_type.proto',
+ package='google.ads.googleads.v0.enums',
+ syntax='proto3',
+ serialized_pb=_b('\n=google/ads/googleads_v0/proto/enums/recommendation_type.proto\x12\x1dgoogle.ads.googleads.v0.enums\"\x92\x01\n\x16RecommendationTypeEnum\"x\n\x12RecommendationType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x13\n\x0f\x43\x41MPAIGN_BUDGET\x10\x02\x12\x0b\n\x07KEYWORD\x10\x03\x12\x0b\n\x07TEXT_AD\x10\x04\x12\x15\n\x11TARGET_CPA_OPT_IN\x10\x05\x42\xc8\x01\n!com.google.ads.googleads.v0.enumsB\x17RecommendationTypeProtoP\x01ZBgoogle.golang.org/genproto/googleapis/ads/googleads/v0/enums;enums\xa2\x02\x03GAA\xaa\x02\x1dGoogle.Ads.GoogleAds.V0.Enums\xca\x02\x1dGoogle\\Ads\\GoogleAds\\V0\\Enumsb\x06proto3')
+)
+
+
+
+_RECOMMENDATIONTYPEENUM_RECOMMENDATIONTYPE = _descriptor.EnumDescriptor(
+ name='RecommendationType',
+ full_name='google.ads.googleads.v0.enums.RecommendationTypeEnum.RecommendationType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CAMPAIGN_BUDGET', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='KEYWORD', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TEXT_AD', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TARGET_CPA_OPT_IN', index=5, number=5,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=123,
+ serialized_end=243,
+)
+_sym_db.RegisterEnumDescriptor(_RECOMMENDATIONTYPEENUM_RECOMMENDATIONTYPE)
+
+
+_RECOMMENDATIONTYPEENUM = _descriptor.Descriptor(
+ name='RecommendationTypeEnum',
+ full_name='google.ads.googleads.v0.enums.RecommendationTypeEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _RECOMMENDATIONTYPEENUM_RECOMMENDATIONTYPE,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=97,
+ serialized_end=243,
+)
+
+_RECOMMENDATIONTYPEENUM_RECOMMENDATIONTYPE.containing_type = _RECOMMENDATIONTYPEENUM
+DESCRIPTOR.message_types_by_name['RecommendationTypeEnum'] = _RECOMMENDATIONTYPEENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+RecommendationTypeEnum = _reflection.GeneratedProtocolMessageType('RecommendationTypeEnum', (_message.Message,), dict(
+ DESCRIPTOR = _RECOMMENDATIONTYPEENUM,
+ __module__ = 'google.ads.googleads_v0.proto.enums.recommendation_type_pb2'
+ ,
+ __doc__ = """Container for enum describing types of recommendations.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.enums.RecommendationTypeEnum)
+ ))
+_sym_db.RegisterMessage(RecommendationTypeEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n!com.google.ads.googleads.v0.enumsB\027RecommendationTypeProtoP\001ZBgoogle.golang.org/genproto/googleapis/ads/googleads/v0/enums;enums\242\002\003GAA\252\002\035Google.Ads.GoogleAds.V0.Enums\312\002\035Google\\Ads\\GoogleAds\\V0\\Enums'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/enums/recommendation_type_pb2_grpc.py b/google/ads/google_ads/v0/proto/enums/recommendation_type_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/enums/recommendation_type_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/enums/slot_pb2.py b/google/ads/google_ads/v0/proto/enums/slot_pb2.py
new file mode 100644
index 000000000..c35b746b5
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/enums/slot_pb2.py
@@ -0,0 +1,115 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/enums/slot.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/enums/slot.proto',
+ package='google.ads.googleads.v0.enums',
+ syntax='proto3',
+ serialized_pb=_b('\n.google/ads/googleads_v0/proto/enums/slot.proto\x12\x1dgoogle.ads.googleads.v0.enums\"\xa3\x01\n\x08SlotEnum\"\x96\x01\n\x04Slot\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x0f\n\x0bSEARCH_SIDE\x10\x02\x12\x0e\n\nSEARCH_TOP\x10\x03\x12\x10\n\x0cSEARCH_OTHER\x10\x04\x12\x0b\n\x07\x43ONTENT\x10\x05\x12\x16\n\x12SEARCH_PARTNER_TOP\x10\x06\x12\x18\n\x14SEARCH_PARTNER_OTHER\x10\x07\x42\xba\x01\n!com.google.ads.googleads.v0.enumsB\tSlotProtoP\x01ZBgoogle.golang.org/genproto/googleapis/ads/googleads/v0/enums;enums\xa2\x02\x03GAA\xaa\x02\x1dGoogle.Ads.GoogleAds.V0.Enums\xca\x02\x1dGoogle\\Ads\\GoogleAds\\V0\\Enumsb\x06proto3')
+)
+
+
+
+_SLOTENUM_SLOT = _descriptor.EnumDescriptor(
+ name='Slot',
+ full_name='google.ads.googleads.v0.enums.SlotEnum.Slot',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SEARCH_SIDE', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SEARCH_TOP', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SEARCH_OTHER', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CONTENT', index=5, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SEARCH_PARTNER_TOP', index=6, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SEARCH_PARTNER_OTHER', index=7, number=7,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=95,
+ serialized_end=245,
+)
+_sym_db.RegisterEnumDescriptor(_SLOTENUM_SLOT)
+
+
+_SLOTENUM = _descriptor.Descriptor(
+ name='SlotEnum',
+ full_name='google.ads.googleads.v0.enums.SlotEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _SLOTENUM_SLOT,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=82,
+ serialized_end=245,
+)
+
+_SLOTENUM_SLOT.containing_type = _SLOTENUM
+DESCRIPTOR.message_types_by_name['SlotEnum'] = _SLOTENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+SlotEnum = _reflection.GeneratedProtocolMessageType('SlotEnum', (_message.Message,), dict(
+ DESCRIPTOR = _SLOTENUM,
+ __module__ = 'google.ads.googleads_v0.proto.enums.slot_pb2'
+ ,
+ __doc__ = """Container for enumeration of possible positions of the Ad.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.enums.SlotEnum)
+ ))
+_sym_db.RegisterMessage(SlotEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n!com.google.ads.googleads.v0.enumsB\tSlotProtoP\001ZBgoogle.golang.org/genproto/googleapis/ads/googleads/v0/enums;enums\242\002\003GAA\252\002\035Google.Ads.GoogleAds.V0.Enums\312\002\035Google\\Ads\\GoogleAds\\V0\\Enums'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/enums/slot_pb2_grpc.py b/google/ads/google_ads/v0/proto/enums/slot_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/enums/slot_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/enums/target_cpa_opt_in_recommendation_goal_pb2.py b/google/ads/google_ads/v0/proto/enums/target_cpa_opt_in_recommendation_goal_pb2.py
new file mode 100644
index 000000000..9d2c1d009
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/enums/target_cpa_opt_in_recommendation_goal_pb2.py
@@ -0,0 +1,107 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/enums/target_cpa_opt_in_recommendation_goal.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/enums/target_cpa_opt_in_recommendation_goal.proto',
+ package='google.ads.googleads.v0.enums',
+ syntax='proto3',
+ serialized_pb=_b('\nOgoogle/ads/googleads_v0/proto/enums/target_cpa_opt_in_recommendation_goal.proto\x12\x1dgoogle.ads.googleads.v0.enums\"\xad\x01\n$TargetCpaOptInRecommendationGoalEnum\"\x84\x01\n TargetCpaOptInRecommendationGoal\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\r\n\tSAME_COST\x10\x02\x12\x14\n\x10SAME_CONVERSIONS\x10\x03\x12\x0c\n\x08SAME_CPA\x10\x04\x12\x0f\n\x0b\x43LOSEST_CPA\x10\x05\x42\xd6\x01\n!com.google.ads.googleads.v0.enumsB%TargetCpaOptInRecommendationGoalProtoP\x01ZBgoogle.golang.org/genproto/googleapis/ads/googleads/v0/enums;enums\xa2\x02\x03GAA\xaa\x02\x1dGoogle.Ads.GoogleAds.V0.Enums\xca\x02\x1dGoogle\\Ads\\GoogleAds\\V0\\Enumsb\x06proto3')
+)
+
+
+
+_TARGETCPAOPTINRECOMMENDATIONGOALENUM_TARGETCPAOPTINRECOMMENDATIONGOAL = _descriptor.EnumDescriptor(
+ name='TargetCpaOptInRecommendationGoal',
+ full_name='google.ads.googleads.v0.enums.TargetCpaOptInRecommendationGoalEnum.TargetCpaOptInRecommendationGoal',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SAME_COST', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SAME_CONVERSIONS', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SAME_CPA', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CLOSEST_CPA', index=5, number=5,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=156,
+ serialized_end=288,
+)
+_sym_db.RegisterEnumDescriptor(_TARGETCPAOPTINRECOMMENDATIONGOALENUM_TARGETCPAOPTINRECOMMENDATIONGOAL)
+
+
+_TARGETCPAOPTINRECOMMENDATIONGOALENUM = _descriptor.Descriptor(
+ name='TargetCpaOptInRecommendationGoalEnum',
+ full_name='google.ads.googleads.v0.enums.TargetCpaOptInRecommendationGoalEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _TARGETCPAOPTINRECOMMENDATIONGOALENUM_TARGETCPAOPTINRECOMMENDATIONGOAL,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=115,
+ serialized_end=288,
+)
+
+_TARGETCPAOPTINRECOMMENDATIONGOALENUM_TARGETCPAOPTINRECOMMENDATIONGOAL.containing_type = _TARGETCPAOPTINRECOMMENDATIONGOALENUM
+DESCRIPTOR.message_types_by_name['TargetCpaOptInRecommendationGoalEnum'] = _TARGETCPAOPTINRECOMMENDATIONGOALENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+TargetCpaOptInRecommendationGoalEnum = _reflection.GeneratedProtocolMessageType('TargetCpaOptInRecommendationGoalEnum', (_message.Message,), dict(
+ DESCRIPTOR = _TARGETCPAOPTINRECOMMENDATIONGOALENUM,
+ __module__ = 'google.ads.googleads_v0.proto.enums.target_cpa_opt_in_recommendation_goal_pb2'
+ ,
+ __doc__ = """Container for enum describing goals for TargetCpaOptIn recommendation.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.enums.TargetCpaOptInRecommendationGoalEnum)
+ ))
+_sym_db.RegisterMessage(TargetCpaOptInRecommendationGoalEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n!com.google.ads.googleads.v0.enumsB%TargetCpaOptInRecommendationGoalProtoP\001ZBgoogle.golang.org/genproto/googleapis/ads/googleads/v0/enums;enums\242\002\003GAA\252\002\035Google.Ads.GoogleAds.V0.Enums\312\002\035Google\\Ads\\GoogleAds\\V0\\Enums'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/enums/target_cpa_opt_in_recommendation_goal_pb2_grpc.py b/google/ads/google_ads/v0/proto/enums/target_cpa_opt_in_recommendation_goal_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/enums/target_cpa_opt_in_recommendation_goal_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/__init__.py b/google/ads/google_ads/v0/proto/errors/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/google/ads/google_ads/v0/proto/errors/ad_customizer_error_pb2.py b/google/ads/google_ads/v0/proto/errors/ad_customizer_error_pb2.py
new file mode 100644
index 000000000..4f756e777
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/ad_customizer_error_pb2.py
@@ -0,0 +1,111 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/ad_customizer_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/ad_customizer_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n>google/ads/googleads_v0/proto/errors/ad_customizer_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xe8\x01\n\x15\x41\x64\x43ustomizerErrorEnum\"\xce\x01\n\x11\x41\x64\x43ustomizerError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12!\n\x1d\x43OUNTDOWN_INVALID_DATE_FORMAT\x10\x02\x12\x1a\n\x16\x43OUNTDOWN_DATE_IN_PAST\x10\x03\x12\x1c\n\x18\x43OUNTDOWN_INVALID_LOCALE\x10\x04\x12\'\n#COUNTDOWN_INVALID_START_DAYS_BEFORE\x10\x05\x12\x15\n\x11UNKNOWN_USER_LIST\x10\x06\x42\xcc\x01\n\"com.google.ads.googleads.v0.errorsB\x16\x41\x64\x43ustomizerErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_ADCUSTOMIZERERRORENUM_ADCUSTOMIZERERROR = _descriptor.EnumDescriptor(
+ name='AdCustomizerError',
+ full_name='google.ads.googleads.v0.errors.AdCustomizerErrorEnum.AdCustomizerError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='COUNTDOWN_INVALID_DATE_FORMAT', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='COUNTDOWN_DATE_IN_PAST', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='COUNTDOWN_INVALID_LOCALE', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='COUNTDOWN_INVALID_START_DAYS_BEFORE', index=5, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN_USER_LIST', index=6, number=6,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=125,
+ serialized_end=331,
+)
+_sym_db.RegisterEnumDescriptor(_ADCUSTOMIZERERRORENUM_ADCUSTOMIZERERROR)
+
+
+_ADCUSTOMIZERERRORENUM = _descriptor.Descriptor(
+ name='AdCustomizerErrorEnum',
+ full_name='google.ads.googleads.v0.errors.AdCustomizerErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _ADCUSTOMIZERERRORENUM_ADCUSTOMIZERERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=99,
+ serialized_end=331,
+)
+
+_ADCUSTOMIZERERRORENUM_ADCUSTOMIZERERROR.containing_type = _ADCUSTOMIZERERRORENUM
+DESCRIPTOR.message_types_by_name['AdCustomizerErrorEnum'] = _ADCUSTOMIZERERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+AdCustomizerErrorEnum = _reflection.GeneratedProtocolMessageType('AdCustomizerErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _ADCUSTOMIZERERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.ad_customizer_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible ad customizer errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.AdCustomizerErrorEnum)
+ ))
+_sym_db.RegisterMessage(AdCustomizerErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\026AdCustomizerErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/ad_customizer_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/ad_customizer_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/ad_customizer_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/ad_error_pb2.py b/google/ads/google_ads/v0/proto/errors/ad_error_pb2.py
new file mode 100644
index 000000000..a7bf5be3e
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/ad_error_pb2.py
@@ -0,0 +1,607 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/ad_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/ad_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n3google/ads/googleads_v0/proto/errors/ad_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xca \n\x0b\x41\x64\x45rrorEnum\"\xba \n\x07\x41\x64\x45rror\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12,\n(AD_CUSTOMIZERS_NOT_SUPPORTED_FOR_AD_TYPE\x10\x02\x12\x1a\n\x16\x41PPROXIMATELY_TOO_LONG\x10\x03\x12\x1b\n\x17\x41PPROXIMATELY_TOO_SHORT\x10\x04\x12\x0f\n\x0b\x42\x41\x44_SNIPPET\x10\x05\x12\x14\n\x10\x43\x41NNOT_MODIFY_AD\x10\x06\x12\'\n#CANNOT_SET_BUSINESS_NAME_IF_URL_SET\x10\x07\x12\x14\n\x10\x43\x41NNOT_SET_FIELD\x10\x08\x12*\n&CANNOT_SET_FIELD_WITH_ORIGIN_AD_ID_SET\x10\t\x12/\n+CANNOT_SET_FIELD_WITH_AD_ID_SET_FOR_SHARING\x10\n\x12)\n%CANNOT_SET_ALLOW_FLEXIBLE_COLOR_FALSE\x10\x0b\x12\x37\n3CANNOT_SET_COLOR_CONTROL_WHEN_NATIVE_FORMAT_SETTING\x10\x0c\x12\x12\n\x0e\x43\x41NNOT_SET_URL\x10\r\x12!\n\x1d\x43\x41NNOT_SET_WITHOUT_FINAL_URLS\x10\x0e\x12\x1e\n\x1a\x43\x41NNOT_SET_WITH_FINAL_URLS\x10\x0f\x12)\n%CANNOT_SET_WITH_TRACKING_URL_TEMPLATE\x10\x10\x12\x1c\n\x18\x43\x41NNOT_SET_WITH_URL_DATA\x10\x11\x12\'\n#CANNOT_USE_AD_SUBCLASS_FOR_OPERATOR\x10\x12\x12#\n\x1f\x43USTOMER_NOT_APPROVED_MOBILEADS\x10\x13\x12(\n$CUSTOMER_NOT_APPROVED_THIRDPARTY_ADS\x10\x14\x12\x31\n-CUSTOMER_NOT_APPROVED_THIRDPARTY_REDIRECT_ADS\x10\x15\x12\x19\n\x15\x43USTOMER_NOT_ELIGIBLE\x10\x16\x12\x31\n-CUSTOMER_NOT_ELIGIBLE_FOR_UPDATING_BEACON_URL\x10\x17\x12\x1e\n\x1a\x44IMENSION_ALREADY_IN_UNION\x10\x18\x12\x19\n\x15\x44IMENSION_MUST_BE_SET\x10\x19\x12\x1a\n\x16\x44IMENSION_NOT_IN_UNION\x10\x1a\x12#\n\x1f\x44ISPLAY_URL_CANNOT_BE_SPECIFIED\x10\x1b\x12 \n\x1c\x44OMESTIC_PHONE_NUMBER_FORMAT\x10\x1c\x12\x1a\n\x16\x45MERGENCY_PHONE_NUMBER\x10\x1d\x12\x0f\n\x0b\x45MPTY_FIELD\x10\x1e\x12\x30\n,FEED_ATTRIBUTE_MUST_HAVE_MAPPING_FOR_TYPE_ID\x10\x1f\x12(\n$FEED_ATTRIBUTE_MAPPING_TYPE_MISMATCH\x10 \x12!\n\x1dILLEGAL_AD_CUSTOMIZER_TAG_USE\x10!\x12\x13\n\x0fILLEGAL_TAG_USE\x10\"\x12\x1b\n\x17INCONSISTENT_DIMENSIONS\x10#\x12)\n%INCONSISTENT_STATUS_IN_TEMPLATE_UNION\x10$\x12\x14\n\x10INCORRECT_LENGTH\x10%\x12\x1a\n\x16INELIGIBLE_FOR_UPGRADE\x10&\x12&\n\"INVALID_AD_ADDRESS_CAMPAIGN_TARGET\x10\'\x12\x13\n\x0fINVALID_AD_TYPE\x10(\x12\'\n#INVALID_ATTRIBUTES_FOR_MOBILE_IMAGE\x10)\x12&\n\"INVALID_ATTRIBUTES_FOR_MOBILE_TEXT\x10*\x12\x1f\n\x1bINVALID_CALL_TO_ACTION_TEXT\x10+\x12\x1d\n\x19INVALID_CHARACTER_FOR_URL\x10,\x12\x18\n\x14INVALID_COUNTRY_CODE\x10-\x12\x17\n\x13INVALID_DSA_URL_TAG\x10.\x12*\n&INVALID_EXPANDED_DYNAMIC_SEARCH_AD_TAG\x10/\x12\x11\n\rINVALID_INPUT\x10\x30\x12\x1b\n\x17INVALID_MARKUP_LANGUAGE\x10\x31\x12\x1a\n\x16INVALID_MOBILE_CARRIER\x10\x32\x12!\n\x1dINVALID_MOBILE_CARRIER_TARGET\x10\x33\x12\x1e\n\x1aINVALID_NUMBER_OF_ELEMENTS\x10\x34\x12\x1f\n\x1bINVALID_PHONE_NUMBER_FORMAT\x10\x35\x12\x31\n-INVALID_RICH_MEDIA_CERTIFIED_VENDOR_FORMAT_ID\x10\x36\x12\x19\n\x15INVALID_TEMPLATE_DATA\x10\x37\x12\'\n#INVALID_TEMPLATE_ELEMENT_FIELD_TYPE\x10\x38\x12\x17\n\x13INVALID_TEMPLATE_ID\x10\x39\x12\x11\n\rLINE_TOO_WIDE\x10:\x12!\n\x1dMISSING_AD_CUSTOMIZER_MAPPING\x10;\x12\x1d\n\x19MISSING_ADDRESS_COMPONENT\x10<\x12\x1e\n\x1aMISSING_ADVERTISEMENT_NAME\x10=\x12\x19\n\x15MISSING_BUSINESS_NAME\x10>\x12\x18\n\x14MISSING_DESCRIPTION1\x10?\x12\x18\n\x14MISSING_DESCRIPTION2\x10@\x12\x1f\n\x1bMISSING_DESTINATION_URL_TAG\x10\x41\x12 \n\x1cMISSING_LANDING_PAGE_URL_TAG\x10\x42\x12\x15\n\x11MISSING_DIMENSION\x10\x43\x12\x17\n\x13MISSING_DISPLAY_URL\x10\x44\x12\x14\n\x10MISSING_HEADLINE\x10\x45\x12\x12\n\x0eMISSING_HEIGHT\x10\x46\x12\x11\n\rMISSING_IMAGE\x10G\x12-\n)MISSING_MARKETING_IMAGE_OR_PRODUCT_VIDEOS\x10H\x12\x1c\n\x18MISSING_MARKUP_LANGUAGES\x10I\x12\x1a\n\x16MISSING_MOBILE_CARRIER\x10J\x12\x11\n\rMISSING_PHONE\x10K\x12$\n MISSING_REQUIRED_TEMPLATE_FIELDS\x10L\x12 \n\x1cMISSING_TEMPLATE_FIELD_VALUE\x10M\x12\x10\n\x0cMISSING_TEXT\x10N\x12\x17\n\x13MISSING_VISIBLE_URL\x10O\x12\x11\n\rMISSING_WIDTH\x10P\x12\'\n#MULTIPLE_DISTINCT_FEEDS_UNSUPPORTED\x10Q\x12$\n MUST_USE_TEMP_AD_UNION_ID_ON_ADD\x10R\x12\x0c\n\x08TOO_LONG\x10S\x12\r\n\tTOO_SHORT\x10T\x12\"\n\x1eUNION_DIMENSIONS_CANNOT_CHANGE\x10U\x12\x1d\n\x19UNKNOWN_ADDRESS_COMPONENT\x10V\x12\x16\n\x12UNKNOWN_FIELD_NAME\x10W\x12\x17\n\x13UNKNOWN_UNIQUE_NAME\x10X\x12\x1a\n\x16UNSUPPORTED_DIMENSIONS\x10Y\x12\x16\n\x12URL_INVALID_SCHEME\x10Z\x12 \n\x1cURL_INVALID_TOP_LEVEL_DOMAIN\x10[\x12\x11\n\rURL_MALFORMED\x10\\\x12\x0f\n\x0bURL_NO_HOST\x10]\x12\x16\n\x12URL_NOT_EQUIVALENT\x10^\x12\x1a\n\x16URL_HOST_NAME_TOO_LONG\x10_\x12\x11\n\rURL_NO_SCHEME\x10`\x12\x1b\n\x17URL_NO_TOP_LEVEL_DOMAIN\x10\x61\x12\x18\n\x14URL_PATH_NOT_ALLOWED\x10\x62\x12\x18\n\x14URL_PORT_NOT_ALLOWED\x10\x63\x12\x19\n\x15URL_QUERY_NOT_ALLOWED\x10\x64\x12\x1d\n\x19URL_SCHEME_BEFORE_DSA_TAG\x10\x65\x12\x34\n0URL_SCHEME_BEFORE_EXPANDED_DYNAMIC_SEARCH_AD_TAG\x10\x66\x12)\n%USER_DOES_NOT_HAVE_ACCESS_TO_TEMPLATE\x10g\x12$\n INCONSISTENT_EXPANDABLE_SETTINGS\x10h\x12\x12\n\x0eINVALID_FORMAT\x10i\x12\x16\n\x12INVALID_FIELD_TEXT\x10j\x12\x17\n\x13\x45LEMENT_NOT_PRESENT\x10k\x12\x0f\n\x0bIMAGE_ERROR\x10l\x12\x16\n\x12VALUE_NOT_IN_RANGE\x10m\x12\x15\n\x11\x46IELD_NOT_PRESENT\x10n\x12\x18\n\x14\x41\x44\x44RESS_NOT_COMPLETE\x10o\x12\x13\n\x0f\x41\x44\x44RESS_INVALID\x10p\x12\x19\n\x15VIDEO_RETRIEVAL_ERROR\x10q\x12\x0f\n\x0b\x41UDIO_ERROR\x10r\x12\x1f\n\x1bINVALID_YOUTUBE_DISPLAY_URL\x10s\x12\x1b\n\x17TOO_MANY_PRODUCT_IMAGES\x10t\x12\x1b\n\x17TOO_MANY_PRODUCT_VIDEOS\x10u\x12.\n*INCOMPATIBLE_AD_TYPE_AND_DEVICE_PREFERENCE\x10v\x12*\n&CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY\x10w\x12-\n)CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED\x10x\x12\x1a\n\x16\x44ISALLOWED_NUMBER_TYPE\x10y\x12*\n&PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY\x10z\x12<\n8PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY\x10{\x12#\n\x1fPREMIUM_RATE_NUMBER_NOT_ALLOWED\x10|\x12#\n\x1fVANITY_PHONE_NUMBER_NOT_ALLOWED\x10}\x12#\n\x1fINVALID_CALL_CONVERSION_TYPE_ID\x10~\x12=\n9CANNOT_DISABLE_CALL_CONVERSION_AND_SET_CONVERSION_TYPE_ID\x10\x7f\x12#\n\x1e\x43\x41NNOT_SET_PATH2_WITHOUT_PATH1\x10\x80\x01\x12\x33\n.MISSING_DYNAMIC_SEARCH_ADS_SETTING_DOMAIN_NAME\x10\x81\x01\x12\'\n\"INCOMPATIBLE_WITH_RESTRICTION_TYPE\x10\x82\x01\x42\xc2\x01\n\"com.google.ads.googleads.v0.errorsB\x0c\x41\x64\x45rrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_ADERRORENUM_ADERROR = _descriptor.EnumDescriptor(
+ name='AdError',
+ full_name='google.ads.googleads.v0.errors.AdErrorEnum.AdError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='AD_CUSTOMIZERS_NOT_SUPPORTED_FOR_AD_TYPE', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='APPROXIMATELY_TOO_LONG', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='APPROXIMATELY_TOO_SHORT', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BAD_SNIPPET', index=5, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_MODIFY_AD', index=6, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SET_BUSINESS_NAME_IF_URL_SET', index=7, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SET_FIELD', index=8, number=8,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SET_FIELD_WITH_ORIGIN_AD_ID_SET', index=9, number=9,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SET_FIELD_WITH_AD_ID_SET_FOR_SHARING', index=10, number=10,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SET_ALLOW_FLEXIBLE_COLOR_FALSE', index=11, number=11,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SET_COLOR_CONTROL_WHEN_NATIVE_FORMAT_SETTING', index=12, number=12,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SET_URL', index=13, number=13,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SET_WITHOUT_FINAL_URLS', index=14, number=14,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SET_WITH_FINAL_URLS', index=15, number=15,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SET_WITH_TRACKING_URL_TEMPLATE', index=16, number=16,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SET_WITH_URL_DATA', index=17, number=17,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_USE_AD_SUBCLASS_FOR_OPERATOR', index=18, number=18,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CUSTOMER_NOT_APPROVED_MOBILEADS', index=19, number=19,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CUSTOMER_NOT_APPROVED_THIRDPARTY_ADS', index=20, number=20,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CUSTOMER_NOT_APPROVED_THIRDPARTY_REDIRECT_ADS', index=21, number=21,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CUSTOMER_NOT_ELIGIBLE', index=22, number=22,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CUSTOMER_NOT_ELIGIBLE_FOR_UPDATING_BEACON_URL', index=23, number=23,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DIMENSION_ALREADY_IN_UNION', index=24, number=24,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DIMENSION_MUST_BE_SET', index=25, number=25,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DIMENSION_NOT_IN_UNION', index=26, number=26,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DISPLAY_URL_CANNOT_BE_SPECIFIED', index=27, number=27,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DOMESTIC_PHONE_NUMBER_FORMAT', index=28, number=28,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EMERGENCY_PHONE_NUMBER', index=29, number=29,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EMPTY_FIELD', index=30, number=30,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FEED_ATTRIBUTE_MUST_HAVE_MAPPING_FOR_TYPE_ID', index=31, number=31,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FEED_ATTRIBUTE_MAPPING_TYPE_MISMATCH', index=32, number=32,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ILLEGAL_AD_CUSTOMIZER_TAG_USE', index=33, number=33,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ILLEGAL_TAG_USE', index=34, number=34,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INCONSISTENT_DIMENSIONS', index=35, number=35,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INCONSISTENT_STATUS_IN_TEMPLATE_UNION', index=36, number=36,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INCORRECT_LENGTH', index=37, number=37,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INELIGIBLE_FOR_UPGRADE', index=38, number=38,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_AD_ADDRESS_CAMPAIGN_TARGET', index=39, number=39,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_AD_TYPE', index=40, number=40,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_ATTRIBUTES_FOR_MOBILE_IMAGE', index=41, number=41,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_ATTRIBUTES_FOR_MOBILE_TEXT', index=42, number=42,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_CALL_TO_ACTION_TEXT', index=43, number=43,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_CHARACTER_FOR_URL', index=44, number=44,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_COUNTRY_CODE', index=45, number=45,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_DSA_URL_TAG', index=46, number=46,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_EXPANDED_DYNAMIC_SEARCH_AD_TAG', index=47, number=47,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_INPUT', index=48, number=48,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_MARKUP_LANGUAGE', index=49, number=49,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_MOBILE_CARRIER', index=50, number=50,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_MOBILE_CARRIER_TARGET', index=51, number=51,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_NUMBER_OF_ELEMENTS', index=52, number=52,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_PHONE_NUMBER_FORMAT', index=53, number=53,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_RICH_MEDIA_CERTIFIED_VENDOR_FORMAT_ID', index=54, number=54,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_TEMPLATE_DATA', index=55, number=55,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_TEMPLATE_ELEMENT_FIELD_TYPE', index=56, number=56,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_TEMPLATE_ID', index=57, number=57,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LINE_TOO_WIDE', index=58, number=58,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_AD_CUSTOMIZER_MAPPING', index=59, number=59,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_ADDRESS_COMPONENT', index=60, number=60,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_ADVERTISEMENT_NAME', index=61, number=61,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_BUSINESS_NAME', index=62, number=62,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_DESCRIPTION1', index=63, number=63,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_DESCRIPTION2', index=64, number=64,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_DESTINATION_URL_TAG', index=65, number=65,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_LANDING_PAGE_URL_TAG', index=66, number=66,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_DIMENSION', index=67, number=67,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_DISPLAY_URL', index=68, number=68,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_HEADLINE', index=69, number=69,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_HEIGHT', index=70, number=70,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_IMAGE', index=71, number=71,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_MARKETING_IMAGE_OR_PRODUCT_VIDEOS', index=72, number=72,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_MARKUP_LANGUAGES', index=73, number=73,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_MOBILE_CARRIER', index=74, number=74,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_PHONE', index=75, number=75,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_REQUIRED_TEMPLATE_FIELDS', index=76, number=76,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_TEMPLATE_FIELD_VALUE', index=77, number=77,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_TEXT', index=78, number=78,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_VISIBLE_URL', index=79, number=79,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_WIDTH', index=80, number=80,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MULTIPLE_DISTINCT_FEEDS_UNSUPPORTED', index=81, number=81,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MUST_USE_TEMP_AD_UNION_ID_ON_ADD', index=82, number=82,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_LONG', index=83, number=83,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_SHORT', index=84, number=84,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNION_DIMENSIONS_CANNOT_CHANGE', index=85, number=85,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN_ADDRESS_COMPONENT', index=86, number=86,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN_FIELD_NAME', index=87, number=87,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN_UNIQUE_NAME', index=88, number=88,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNSUPPORTED_DIMENSIONS', index=89, number=89,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='URL_INVALID_SCHEME', index=90, number=90,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='URL_INVALID_TOP_LEVEL_DOMAIN', index=91, number=91,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='URL_MALFORMED', index=92, number=92,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='URL_NO_HOST', index=93, number=93,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='URL_NOT_EQUIVALENT', index=94, number=94,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='URL_HOST_NAME_TOO_LONG', index=95, number=95,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='URL_NO_SCHEME', index=96, number=96,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='URL_NO_TOP_LEVEL_DOMAIN', index=97, number=97,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='URL_PATH_NOT_ALLOWED', index=98, number=98,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='URL_PORT_NOT_ALLOWED', index=99, number=99,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='URL_QUERY_NOT_ALLOWED', index=100, number=100,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='URL_SCHEME_BEFORE_DSA_TAG', index=101, number=101,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='URL_SCHEME_BEFORE_EXPANDED_DYNAMIC_SEARCH_AD_TAG', index=102, number=102,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='USER_DOES_NOT_HAVE_ACCESS_TO_TEMPLATE', index=103, number=103,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INCONSISTENT_EXPANDABLE_SETTINGS', index=104, number=104,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_FORMAT', index=105, number=105,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_FIELD_TEXT', index=106, number=106,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ELEMENT_NOT_PRESENT', index=107, number=107,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='IMAGE_ERROR', index=108, number=108,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='VALUE_NOT_IN_RANGE', index=109, number=109,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FIELD_NOT_PRESENT', index=110, number=110,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ADDRESS_NOT_COMPLETE', index=111, number=111,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ADDRESS_INVALID', index=112, number=112,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='VIDEO_RETRIEVAL_ERROR', index=113, number=113,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='AUDIO_ERROR', index=114, number=114,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_YOUTUBE_DISPLAY_URL', index=115, number=115,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_MANY_PRODUCT_IMAGES', index=116, number=116,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_MANY_PRODUCT_VIDEOS', index=117, number=117,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INCOMPATIBLE_AD_TYPE_AND_DEVICE_PREFERENCE', index=118, number=118,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY', index=119, number=119,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED', index=120, number=120,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DISALLOWED_NUMBER_TYPE', index=121, number=121,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY', index=122, number=122,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY', index=123, number=123,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PREMIUM_RATE_NUMBER_NOT_ALLOWED', index=124, number=124,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='VANITY_PHONE_NUMBER_NOT_ALLOWED', index=125, number=125,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_CALL_CONVERSION_TYPE_ID', index=126, number=126,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_DISABLE_CALL_CONVERSION_AND_SET_CONVERSION_TYPE_ID', index=127, number=127,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SET_PATH2_WITHOUT_PATH1', index=128, number=128,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_DYNAMIC_SEARCH_ADS_SETTING_DOMAIN_NAME', index=129, number=129,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INCOMPATIBLE_WITH_RESTRICTION_TYPE', index=130, number=130,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=104,
+ serialized_end=4258,
+)
+_sym_db.RegisterEnumDescriptor(_ADERRORENUM_ADERROR)
+
+
+_ADERRORENUM = _descriptor.Descriptor(
+ name='AdErrorEnum',
+ full_name='google.ads.googleads.v0.errors.AdErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _ADERRORENUM_ADERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=88,
+ serialized_end=4258,
+)
+
+_ADERRORENUM_ADERROR.containing_type = _ADERRORENUM
+DESCRIPTOR.message_types_by_name['AdErrorEnum'] = _ADERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+AdErrorEnum = _reflection.GeneratedProtocolMessageType('AdErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _ADERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.ad_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible ad errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.AdErrorEnum)
+ ))
+_sym_db.RegisterMessage(AdErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\014AdErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/ad_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/ad_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/ad_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/ad_group_ad_error_pb2.py b/google/ads/google_ads/v0/proto/errors/ad_group_ad_error_pb2.py
new file mode 100644
index 000000000..1e5705065
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/ad_group_ad_error_pb2.py
@@ -0,0 +1,123 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/ad_group_ad_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/ad_group_ad_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\nCANNOT_ADD_ADGROUP_OF_TYPE_DSA_TO_CAMPAIGN_WITHOUT_DSA_SETTING\x10\x0e\x42\xc7\x01\n\"com.google.ads.googleads.v0.errorsB\x11\x41\x64GroupErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_ADGROUPERRORENUM_ADGROUPERROR = _descriptor.EnumDescriptor(
+ name='AdGroupError',
+ full_name='google.ads.googleads.v0.errors.AdGroupErrorEnum.AdGroupError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DUPLICATE_ADGROUP_NAME', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_ADGROUP_NAME', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ADVERTISER_NOT_ON_CONTENT_NETWORK', index=4, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BID_TOO_BIG', index=5, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BID_TYPE_AND_BIDDING_STRATEGY_MISMATCH', index=6, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_ADGROUP_NAME', index=7, number=8,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ADGROUP_LABEL_DOES_NOT_EXIST', index=8, number=9,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ADGROUP_LABEL_ALREADY_EXISTS', index=9, number=10,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_CONTENT_BID_CRITERION_TYPE_GROUP', index=10, number=11,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='AD_GROUP_TYPE_NOT_VALID_FOR_ADVERTISING_CHANNEL_TYPE', index=11, number=12,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ADGROUP_TYPE_NOT_SUPPORTED_FOR_CAMPAIGN_SALES_COUNTRY', index=12, number=13,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_ADD_ADGROUP_OF_TYPE_DSA_TO_CAMPAIGN_WITHOUT_DSA_SETTING', index=13, number=14,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=115,
+ serialized_end=638,
+)
+_sym_db.RegisterEnumDescriptor(_ADGROUPERRORENUM_ADGROUPERROR)
+
+
+_ADGROUPERRORENUM = _descriptor.Descriptor(
+ name='AdGroupErrorEnum',
+ full_name='google.ads.googleads.v0.errors.AdGroupErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _ADGROUPERRORENUM_ADGROUPERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=94,
+ serialized_end=638,
+)
+
+_ADGROUPERRORENUM_ADGROUPERROR.containing_type = _ADGROUPERRORENUM
+DESCRIPTOR.message_types_by_name['AdGroupErrorEnum'] = _ADGROUPERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+AdGroupErrorEnum = _reflection.GeneratedProtocolMessageType('AdGroupErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _ADGROUPERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.ad_group_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible ad group errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.AdGroupErrorEnum)
+ ))
+_sym_db.RegisterMessage(AdGroupErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\021AdGroupErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/ad_group_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/ad_group_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/ad_group_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/ad_sharing_error_pb2.py b/google/ads/google_ads/v0/proto/errors/ad_sharing_error_pb2.py
new file mode 100644
index 000000000..3a4d47e98
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/ad_sharing_error_pb2.py
@@ -0,0 +1,103 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/ad_sharing_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/ad_sharing_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n;google/ads/googleads_v0/proto/errors/ad_sharing_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xa9\x01\n\x12\x41\x64SharingErrorEnum\"\x92\x01\n\x0e\x41\x64SharingError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12 \n\x1c\x41\x44_GROUP_ALREADY_CONTAINS_AD\x10\x02\x12\"\n\x1eINCOMPATIBLE_AD_UNDER_AD_GROUP\x10\x03\x12\x1c\n\x18\x43\x41NNOT_SHARE_INACTIVE_AD\x10\x04\x42\xc9\x01\n\"com.google.ads.googleads.v0.errorsB\x13\x41\x64SharingErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_ADSHARINGERRORENUM_ADSHARINGERROR = _descriptor.EnumDescriptor(
+ name='AdSharingError',
+ full_name='google.ads.googleads.v0.errors.AdSharingErrorEnum.AdSharingError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='AD_GROUP_ALREADY_CONTAINS_AD', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INCOMPATIBLE_AD_UNDER_AD_GROUP', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SHARE_INACTIVE_AD', index=4, number=4,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=119,
+ serialized_end=265,
+)
+_sym_db.RegisterEnumDescriptor(_ADSHARINGERRORENUM_ADSHARINGERROR)
+
+
+_ADSHARINGERRORENUM = _descriptor.Descriptor(
+ name='AdSharingErrorEnum',
+ full_name='google.ads.googleads.v0.errors.AdSharingErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _ADSHARINGERRORENUM_ADSHARINGERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=96,
+ serialized_end=265,
+)
+
+_ADSHARINGERRORENUM_ADSHARINGERROR.containing_type = _ADSHARINGERRORENUM
+DESCRIPTOR.message_types_by_name['AdSharingErrorEnum'] = _ADSHARINGERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+AdSharingErrorEnum = _reflection.GeneratedProtocolMessageType('AdSharingErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _ADSHARINGERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.ad_sharing_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible ad sharing errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.AdSharingErrorEnum)
+ ))
+_sym_db.RegisterMessage(AdSharingErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\023AdSharingErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/ad_sharing_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/ad_sharing_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/ad_sharing_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/adx_error_pb2.py b/google/ads/google_ads/v0/proto/errors/adx_error_pb2.py
new file mode 100644
index 000000000..d0c05bc88
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/adx_error_pb2.py
@@ -0,0 +1,95 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/adx_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/adx_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n4google/ads/googleads_v0/proto/errors/adx_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"Q\n\x0c\x41\x64xErrorEnum\"A\n\x08\x41\x64xError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x17\n\x13UNSUPPORTED_FEATURE\x10\x02\x42\xc3\x01\n\"com.google.ads.googleads.v0.errorsB\rAdxErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_ADXERRORENUM_ADXERROR = _descriptor.EnumDescriptor(
+ name='AdxError',
+ full_name='google.ads.googleads.v0.errors.AdxErrorEnum.AdxError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNSUPPORTED_FEATURE', index=2, number=2,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=104,
+ serialized_end=169,
+)
+_sym_db.RegisterEnumDescriptor(_ADXERRORENUM_ADXERROR)
+
+
+_ADXERRORENUM = _descriptor.Descriptor(
+ name='AdxErrorEnum',
+ full_name='google.ads.googleads.v0.errors.AdxErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _ADXERRORENUM_ADXERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=88,
+ serialized_end=169,
+)
+
+_ADXERRORENUM_ADXERROR.containing_type = _ADXERRORENUM
+DESCRIPTOR.message_types_by_name['AdxErrorEnum'] = _ADXERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+AdxErrorEnum = _reflection.GeneratedProtocolMessageType('AdxErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _ADXERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.adx_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible adx errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.AdxErrorEnum)
+ ))
+_sym_db.RegisterMessage(AdxErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\rAdxErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/adx_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/adx_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/adx_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/authentication_error_pb2.py b/google/ads/google_ads/v0/proto/errors/authentication_error_pb2.py
new file mode 100644
index 000000000..a38169b79
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/authentication_error_pb2.py
@@ -0,0 +1,159 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/authentication_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/authentication_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n?google/ads/googleads_v0/proto/errors/authentication_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xc0\x04\n\x17\x41uthenticationErrorEnum\"\xa4\x04\n\x13\x41uthenticationError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x18\n\x14\x41UTHENTICATION_ERROR\x10\x02\x12\x1e\n\x1a\x43LIENT_CUSTOMER_ID_INVALID\x10\x05\x12\x16\n\x12\x43USTOMER_NOT_FOUND\x10\x08\x12\x1a\n\x16GOOGLE_ACCOUNT_DELETED\x10\t\x12!\n\x1dGOOGLE_ACCOUNT_COOKIE_INVALID\x10\n\x12)\n%FAILED_TO_AUTHENTICATE_GOOGLE_ACCOUNT\x10\x0b\x12-\n)GOOGLE_ACCOUNT_USER_AND_ADS_USER_MISMATCH\x10\x0c\x12\x19\n\x15LOGIN_COOKIE_REQUIRED\x10\r\x12\x10\n\x0cNOT_ADS_USER\x10\x0e\x12\x17\n\x13OAUTH_TOKEN_INVALID\x10\x0f\x12\x17\n\x13OAUTH_TOKEN_EXPIRED\x10\x10\x12\x18\n\x14OAUTH_TOKEN_DISABLED\x10\x11\x12\x17\n\x13OAUTH_TOKEN_REVOKED\x10\x12\x12\x1e\n\x1aOAUTH_TOKEN_HEADER_INVALID\x10\x13\x12\x18\n\x14LOGIN_COOKIE_INVALID\x10\x14\x12#\n\x1f\x46\x41ILED_TO_RETRIEVE_LOGIN_COOKIE\x10\x15\x12\x13\n\x0fUSER_ID_INVALID\x10\x16\x42\xce\x01\n\"com.google.ads.googleads.v0.errorsB\x18\x41uthenticationErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_AUTHENTICATIONERRORENUM_AUTHENTICATIONERROR = _descriptor.EnumDescriptor(
+ name='AuthenticationError',
+ full_name='google.ads.googleads.v0.errors.AuthenticationErrorEnum.AuthenticationError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='AUTHENTICATION_ERROR', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CLIENT_CUSTOMER_ID_INVALID', index=3, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CUSTOMER_NOT_FOUND', index=4, number=8,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='GOOGLE_ACCOUNT_DELETED', index=5, number=9,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='GOOGLE_ACCOUNT_COOKIE_INVALID', index=6, number=10,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FAILED_TO_AUTHENTICATE_GOOGLE_ACCOUNT', index=7, number=11,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='GOOGLE_ACCOUNT_USER_AND_ADS_USER_MISMATCH', index=8, number=12,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LOGIN_COOKIE_REQUIRED', index=9, number=13,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='NOT_ADS_USER', index=10, number=14,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='OAUTH_TOKEN_INVALID', index=11, number=15,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='OAUTH_TOKEN_EXPIRED', index=12, number=16,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='OAUTH_TOKEN_DISABLED', index=13, number=17,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='OAUTH_TOKEN_REVOKED', index=14, number=18,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='OAUTH_TOKEN_HEADER_INVALID', index=15, number=19,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LOGIN_COOKIE_INVALID', index=16, number=20,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FAILED_TO_RETRIEVE_LOGIN_COOKIE', index=17, number=21,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='USER_ID_INVALID', index=18, number=22,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=128,
+ serialized_end=676,
+)
+_sym_db.RegisterEnumDescriptor(_AUTHENTICATIONERRORENUM_AUTHENTICATIONERROR)
+
+
+_AUTHENTICATIONERRORENUM = _descriptor.Descriptor(
+ name='AuthenticationErrorEnum',
+ full_name='google.ads.googleads.v0.errors.AuthenticationErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _AUTHENTICATIONERRORENUM_AUTHENTICATIONERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=100,
+ serialized_end=676,
+)
+
+_AUTHENTICATIONERRORENUM_AUTHENTICATIONERROR.containing_type = _AUTHENTICATIONERRORENUM
+DESCRIPTOR.message_types_by_name['AuthenticationErrorEnum'] = _AUTHENTICATIONERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+AuthenticationErrorEnum = _reflection.GeneratedProtocolMessageType('AuthenticationErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _AUTHENTICATIONERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.authentication_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible authentication errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.AuthenticationErrorEnum)
+ ))
+_sym_db.RegisterMessage(AuthenticationErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\030AuthenticationErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/authentication_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/authentication_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/authentication_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/authorization_error_pb2.py b/google/ads/google_ads/v0/proto/errors/authorization_error_pb2.py
new file mode 100644
index 000000000..43a96cc64
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/authorization_error_pb2.py
@@ -0,0 +1,111 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/authorization_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/authorization_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n>google/ads/googleads_v0/proto/errors/authorization_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xdd\x01\n\x16\x41uthorizationErrorEnum\"\xc2\x01\n\x12\x41uthorizationError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x1a\n\x16USER_PERMISSION_DENIED\x10\x02\x12#\n\x1f\x44\x45VELOPER_TOKEN_NOT_WHITELISTED\x10\x03\x12\x1e\n\x1a\x44\x45VELOPER_TOKEN_PROHIBITED\x10\x04\x12\x14\n\x10PROJECT_DISABLED\x10\x05\x12\x17\n\x13\x41UTHORIZATION_ERROR\x10\x06\x42\xcd\x01\n\"com.google.ads.googleads.v0.errorsB\x17\x41uthorizationErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_AUTHORIZATIONERRORENUM_AUTHORIZATIONERROR = _descriptor.EnumDescriptor(
+ name='AuthorizationError',
+ full_name='google.ads.googleads.v0.errors.AuthorizationErrorEnum.AuthorizationError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='USER_PERMISSION_DENIED', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DEVELOPER_TOKEN_NOT_WHITELISTED', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DEVELOPER_TOKEN_PROHIBITED', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROJECT_DISABLED', index=5, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='AUTHORIZATION_ERROR', index=6, number=6,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=126,
+ serialized_end=320,
+)
+_sym_db.RegisterEnumDescriptor(_AUTHORIZATIONERRORENUM_AUTHORIZATIONERROR)
+
+
+_AUTHORIZATIONERRORENUM = _descriptor.Descriptor(
+ name='AuthorizationErrorEnum',
+ full_name='google.ads.googleads.v0.errors.AuthorizationErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _AUTHORIZATIONERRORENUM_AUTHORIZATIONERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=99,
+ serialized_end=320,
+)
+
+_AUTHORIZATIONERRORENUM_AUTHORIZATIONERROR.containing_type = _AUTHORIZATIONERRORENUM
+DESCRIPTOR.message_types_by_name['AuthorizationErrorEnum'] = _AUTHORIZATIONERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+AuthorizationErrorEnum = _reflection.GeneratedProtocolMessageType('AuthorizationErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _AUTHORIZATIONERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.authorization_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible authorization errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.AuthorizationErrorEnum)
+ ))
+_sym_db.RegisterMessage(AuthorizationErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\027AuthorizationErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/authorization_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/authorization_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/authorization_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/bidding_error_pb2.py b/google/ads/google_ads/v0/proto/errors/bidding_error_pb2.py
new file mode 100644
index 000000000..1a70de4b3
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/bidding_error_pb2.py
@@ -0,0 +1,171 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/bidding_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/bidding_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n8google/ads/googleads_v0/proto/errors/bidding_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xb9\x07\n\x10\x42iddingErrorEnum\"\xa4\x07\n\x0c\x42iddingError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12+\n\'BIDDING_STRATEGY_TRANSITION_NOT_ALLOWED\x10\x02\x12.\n*CANNOT_ATTACH_BIDDING_STRATEGY_TO_CAMPAIGN\x10\x07\x12+\n\'INVALID_ANONYMOUS_BIDDING_STRATEGY_TYPE\x10\n\x12!\n\x1dINVALID_BIDDING_STRATEGY_TYPE\x10\x0e\x12\x0f\n\x0bINVALID_BID\x10\x11\x12\x33\n/BIDDING_STRATEGY_NOT_AVAILABLE_FOR_ACCOUNT_TYPE\x10\x12\x12#\n\x1f\x43ONVERSION_TRACKING_NOT_ENABLED\x10\x13\x12\x1a\n\x16NOT_ENOUGH_CONVERSIONS\x10\x14\x12\x30\n,CANNOT_CREATE_CAMPAIGN_WITH_BIDDING_STRATEGY\x10\x15\x12O\nKCANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CAMPAIGN_LEVEL_POP_BIDDING_STRATEGY\x10\x17\x12\x33\n/BIDDING_STRATEGY_NOT_SUPPORTED_WITH_AD_SCHEDULE\x10\x18\x12\x31\n-PAY_PER_CONVERSION_NOT_AVAILABLE_FOR_CUSTOMER\x10\x19\x12\x32\n.PAY_PER_CONVERSION_NOT_ALLOWED_WITH_TARGET_CPA\x10\x1a\x12:\n6BIDDING_STRATEGY_NOT_ALLOWED_FOR_SEARCH_ONLY_CAMPAIGNS\x10\x1b\x12;\n7BIDDING_STRATEGY_NOT_SUPPORTED_IN_DRAFTS_OR_EXPERIMENTS\x10\x1c\x12I\nEBIDDING_STRATEGY_TYPE_DOES_NOT_SUPPORT_PRODUCT_TYPE_ADGROUP_CRITERION\x10\x1d\x12\x11\n\rBID_TOO_SMALL\x10\x1e\x12\x0f\n\x0b\x42ID_TOO_BIG\x10\x1f\x12\"\n\x1e\x42ID_TOO_MANY_FRACTIONAL_DIGITS\x10 \x12\x17\n\x13INVALID_DOMAIN_NAME\x10!B\xc7\x01\n\"com.google.ads.googleads.v0.errorsB\x11\x42iddingErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_BIDDINGERRORENUM_BIDDINGERROR = _descriptor.EnumDescriptor(
+ name='BiddingError',
+ full_name='google.ads.googleads.v0.errors.BiddingErrorEnum.BiddingError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BIDDING_STRATEGY_TRANSITION_NOT_ALLOWED', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_ATTACH_BIDDING_STRATEGY_TO_CAMPAIGN', index=3, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_ANONYMOUS_BIDDING_STRATEGY_TYPE', index=4, number=10,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_BIDDING_STRATEGY_TYPE', index=5, number=14,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_BID', index=6, number=17,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BIDDING_STRATEGY_NOT_AVAILABLE_FOR_ACCOUNT_TYPE', index=7, number=18,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CONVERSION_TRACKING_NOT_ENABLED', index=8, number=19,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='NOT_ENOUGH_CONVERSIONS', index=9, number=20,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_CREATE_CAMPAIGN_WITH_BIDDING_STRATEGY', index=10, number=21,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CAMPAIGN_LEVEL_POP_BIDDING_STRATEGY', index=11, number=23,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BIDDING_STRATEGY_NOT_SUPPORTED_WITH_AD_SCHEDULE', index=12, number=24,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PAY_PER_CONVERSION_NOT_AVAILABLE_FOR_CUSTOMER', index=13, number=25,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PAY_PER_CONVERSION_NOT_ALLOWED_WITH_TARGET_CPA', index=14, number=26,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BIDDING_STRATEGY_NOT_ALLOWED_FOR_SEARCH_ONLY_CAMPAIGNS', index=15, number=27,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BIDDING_STRATEGY_NOT_SUPPORTED_IN_DRAFTS_OR_EXPERIMENTS', index=16, number=28,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BIDDING_STRATEGY_TYPE_DOES_NOT_SUPPORT_PRODUCT_TYPE_ADGROUP_CRITERION', index=17, number=29,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BID_TOO_SMALL', index=18, number=30,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BID_TOO_BIG', index=19, number=31,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BID_TOO_MANY_FRACTIONAL_DIGITS', index=20, number=32,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_DOMAIN_NAME', index=21, number=33,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=114,
+ serialized_end=1046,
+)
+_sym_db.RegisterEnumDescriptor(_BIDDINGERRORENUM_BIDDINGERROR)
+
+
+_BIDDINGERRORENUM = _descriptor.Descriptor(
+ name='BiddingErrorEnum',
+ full_name='google.ads.googleads.v0.errors.BiddingErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _BIDDINGERRORENUM_BIDDINGERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=93,
+ serialized_end=1046,
+)
+
+_BIDDINGERRORENUM_BIDDINGERROR.containing_type = _BIDDINGERRORENUM
+DESCRIPTOR.message_types_by_name['BiddingErrorEnum'] = _BIDDINGERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+BiddingErrorEnum = _reflection.GeneratedProtocolMessageType('BiddingErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _BIDDINGERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.bidding_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible bidding errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.BiddingErrorEnum)
+ ))
+_sym_db.RegisterMessage(BiddingErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\021BiddingErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/bidding_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/bidding_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/bidding_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/bidding_strategy_error_pb2.py b/google/ads/google_ads/v0/proto/errors/bidding_strategy_error_pb2.py
new file mode 100644
index 000000000..20ae57c10
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/bidding_strategy_error_pb2.py
@@ -0,0 +1,107 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/bidding_strategy_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/bidding_strategy_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\nAgoogle/ads/googleads_v0/proto/errors/bidding_strategy_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xd9\x01\n\x18\x42iddingStrategyErrorEnum\"\xbc\x01\n\x14\x42iddingStrategyError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x12\n\x0e\x44UPLICATE_NAME\x10\x02\x12\'\n#CANNOT_CHANGE_BIDDING_STRATEGY_TYPE\x10\x03\x12%\n!CANNOT_REMOVE_ASSOCIATED_STRATEGY\x10\x04\x12\"\n\x1e\x42IDDING_STRATEGY_NOT_SUPPORTED\x10\x05\x42\xcf\x01\n\"com.google.ads.googleads.v0.errorsB\x19\x42iddingStrategyErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_BIDDINGSTRATEGYERRORENUM_BIDDINGSTRATEGYERROR = _descriptor.EnumDescriptor(
+ name='BiddingStrategyError',
+ full_name='google.ads.googleads.v0.errors.BiddingStrategyErrorEnum.BiddingStrategyError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DUPLICATE_NAME', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_CHANGE_BIDDING_STRATEGY_TYPE', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_REMOVE_ASSOCIATED_STRATEGY', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BIDDING_STRATEGY_NOT_SUPPORTED', index=5, number=5,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=131,
+ serialized_end=319,
+)
+_sym_db.RegisterEnumDescriptor(_BIDDINGSTRATEGYERRORENUM_BIDDINGSTRATEGYERROR)
+
+
+_BIDDINGSTRATEGYERRORENUM = _descriptor.Descriptor(
+ name='BiddingStrategyErrorEnum',
+ full_name='google.ads.googleads.v0.errors.BiddingStrategyErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _BIDDINGSTRATEGYERRORENUM_BIDDINGSTRATEGYERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=102,
+ serialized_end=319,
+)
+
+_BIDDINGSTRATEGYERRORENUM_BIDDINGSTRATEGYERROR.containing_type = _BIDDINGSTRATEGYERRORENUM
+DESCRIPTOR.message_types_by_name['BiddingStrategyErrorEnum'] = _BIDDINGSTRATEGYERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+BiddingStrategyErrorEnum = _reflection.GeneratedProtocolMessageType('BiddingStrategyErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _BIDDINGSTRATEGYERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.bidding_strategy_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible bidding strategy errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.BiddingStrategyErrorEnum)
+ ))
+_sym_db.RegisterMessage(BiddingStrategyErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\031BiddingStrategyErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/bidding_strategy_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/bidding_strategy_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/bidding_strategy_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/campaign_budget_error_pb2.py b/google/ads/google_ads/v0/proto/errors/campaign_budget_error_pb2.py
new file mode 100644
index 000000000..9d6350488
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/campaign_budget_error_pb2.py
@@ -0,0 +1,147 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/campaign_budget_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/campaign_budget_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n@google/ads/googleads_v0/proto/errors/campaign_budget_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xba\x05\n\x17\x43\x61mpaignBudgetErrorEnum\"\x9e\x05\n\x13\x43\x61mpaignBudgetError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x1b\n\x17\x43\x41MPAIGN_BUDGET_REMOVED\x10\x02\x12\x1a\n\x16\x43\x41MPAIGN_BUDGET_IN_USE\x10\x03\x12(\n$CAMPAIGN_BUDGET_PERIOD_NOT_AVAILABLE\x10\x04\x12<\n8CANNOT_MODIFY_FIELD_OF_IMPLICITLY_SHARED_CAMPAIGN_BUDGET\x10\x06\x12\x36\n2CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_IMPLICITLY_SHARED\x10\x07\x12\x43\n?CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED_WITHOUT_NAME\x10\x08\x12\x36\n2CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED\x10\t\x12H\nDCANNOT_USE_IMPLICITLY_SHARED_CAMPAIGN_BUDGET_WITH_MULTIPLE_CAMPAIGNS\x10\n\x12\x12\n\x0e\x44UPLICATE_NAME\x10\x0b\x12\"\n\x1eMONEY_AMOUNT_IN_WRONG_CURRENCY\x10\x0c\x12/\n+MONEY_AMOUNT_LESS_THAN_CURRENCY_MINIMUM_CPC\x10\r\x12\x1a\n\x16MONEY_AMOUNT_TOO_LARGE\x10\x0e\x12\x19\n\x15NEGATIVE_MONEY_AMOUNT\x10\x0f\x12)\n%NON_MULTIPLE_OF_MINIMUM_CURRENCY_UNIT\x10\x10\x42\xce\x01\n\"com.google.ads.googleads.v0.errorsB\x18\x43\x61mpaignBudgetErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_CAMPAIGNBUDGETERRORENUM_CAMPAIGNBUDGETERROR = _descriptor.EnumDescriptor(
+ name='CampaignBudgetError',
+ full_name='google.ads.googleads.v0.errors.CampaignBudgetErrorEnum.CampaignBudgetError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CAMPAIGN_BUDGET_REMOVED', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CAMPAIGN_BUDGET_IN_USE', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CAMPAIGN_BUDGET_PERIOD_NOT_AVAILABLE', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_MODIFY_FIELD_OF_IMPLICITLY_SHARED_CAMPAIGN_BUDGET', index=5, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_IMPLICITLY_SHARED', index=6, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED_WITHOUT_NAME', index=7, number=8,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED', index=8, number=9,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_USE_IMPLICITLY_SHARED_CAMPAIGN_BUDGET_WITH_MULTIPLE_CAMPAIGNS', index=9, number=10,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DUPLICATE_NAME', index=10, number=11,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MONEY_AMOUNT_IN_WRONG_CURRENCY', index=11, number=12,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MONEY_AMOUNT_LESS_THAN_CURRENCY_MINIMUM_CPC', index=12, number=13,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MONEY_AMOUNT_TOO_LARGE', index=13, number=14,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='NEGATIVE_MONEY_AMOUNT', index=14, number=15,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='NON_MULTIPLE_OF_MINIMUM_CURRENCY_UNIT', index=15, number=16,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=129,
+ serialized_end=799,
+)
+_sym_db.RegisterEnumDescriptor(_CAMPAIGNBUDGETERRORENUM_CAMPAIGNBUDGETERROR)
+
+
+_CAMPAIGNBUDGETERRORENUM = _descriptor.Descriptor(
+ name='CampaignBudgetErrorEnum',
+ full_name='google.ads.googleads.v0.errors.CampaignBudgetErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _CAMPAIGNBUDGETERRORENUM_CAMPAIGNBUDGETERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=101,
+ serialized_end=799,
+)
+
+_CAMPAIGNBUDGETERRORENUM_CAMPAIGNBUDGETERROR.containing_type = _CAMPAIGNBUDGETERRORENUM
+DESCRIPTOR.message_types_by_name['CampaignBudgetErrorEnum'] = _CAMPAIGNBUDGETERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+CampaignBudgetErrorEnum = _reflection.GeneratedProtocolMessageType('CampaignBudgetErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _CAMPAIGNBUDGETERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.campaign_budget_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible campaign budget errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.CampaignBudgetErrorEnum)
+ ))
+_sym_db.RegisterMessage(CampaignBudgetErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\030CampaignBudgetErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/campaign_budget_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/campaign_budget_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/campaign_budget_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/campaign_criterion_error_pb2.py b/google/ads/google_ads/v0/proto/errors/campaign_criterion_error_pb2.py
new file mode 100644
index 000000000..5435d9237
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/campaign_criterion_error_pb2.py
@@ -0,0 +1,131 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/campaign_criterion_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/campaign_criterion_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\nCgoogle/ads/googleads_v0/proto/errors/campaign_criterion_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xcf\x03\n\x1a\x43\x61mpaignCriterionErrorEnum\"\xb0\x03\n\x16\x43\x61mpaignCriterionError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x1a\n\x16\x43ONCRETE_TYPE_REQUIRED\x10\x02\x12\x19\n\x15INVALID_PLACEMENT_URL\x10\x03\x12 \n\x1c\x43\x41NNOT_EXCLUDE_CRITERIA_TYPE\x10\x04\x12\'\n#CANNOT_SET_STATUS_FOR_CRITERIA_TYPE\x10\x05\x12+\n\'CANNOT_SET_STATUS_FOR_EXCLUDED_CRITERIA\x10\x06\x12\x1d\n\x19\x43\x41NNOT_TARGET_AND_EXCLUDE\x10\x07\x12\x17\n\x13TOO_MANY_OPERATIONS\x10\x08\x12-\n)OPERATOR_NOT_SUPPORTED_FOR_CRITERION_TYPE\x10\t\x12\x43\n?SHOPPING_CAMPAIGN_SALES_COUNTRY_NOT_SUPPORTED_FOR_SALES_CHANNEL\x10\n\x12\x1d\n\x19\x43\x41NNOT_ADD_EXISTING_FIELD\x10\x0b\x42\xd1\x01\n\"com.google.ads.googleads.v0.errorsB\x1b\x43\x61mpaignCriterionErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_CAMPAIGNCRITERIONERRORENUM_CAMPAIGNCRITERIONERROR = _descriptor.EnumDescriptor(
+ name='CampaignCriterionError',
+ full_name='google.ads.googleads.v0.errors.CampaignCriterionErrorEnum.CampaignCriterionError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CONCRETE_TYPE_REQUIRED', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_PLACEMENT_URL', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_EXCLUDE_CRITERIA_TYPE', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SET_STATUS_FOR_CRITERIA_TYPE', index=5, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SET_STATUS_FOR_EXCLUDED_CRITERIA', index=6, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_TARGET_AND_EXCLUDE', index=7, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_MANY_OPERATIONS', index=8, number=8,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='OPERATOR_NOT_SUPPORTED_FOR_CRITERION_TYPE', index=9, number=9,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SHOPPING_CAMPAIGN_SALES_COUNTRY_NOT_SUPPORTED_FOR_SALES_CHANNEL', index=10, number=10,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_ADD_EXISTING_FIELD', index=11, number=11,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=135,
+ serialized_end=567,
+)
+_sym_db.RegisterEnumDescriptor(_CAMPAIGNCRITERIONERRORENUM_CAMPAIGNCRITERIONERROR)
+
+
+_CAMPAIGNCRITERIONERRORENUM = _descriptor.Descriptor(
+ name='CampaignCriterionErrorEnum',
+ full_name='google.ads.googleads.v0.errors.CampaignCriterionErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _CAMPAIGNCRITERIONERRORENUM_CAMPAIGNCRITERIONERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=104,
+ serialized_end=567,
+)
+
+_CAMPAIGNCRITERIONERRORENUM_CAMPAIGNCRITERIONERROR.containing_type = _CAMPAIGNCRITERIONERRORENUM
+DESCRIPTOR.message_types_by_name['CampaignCriterionErrorEnum'] = _CAMPAIGNCRITERIONERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+CampaignCriterionErrorEnum = _reflection.GeneratedProtocolMessageType('CampaignCriterionErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _CAMPAIGNCRITERIONERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.campaign_criterion_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible campaign criterion errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.CampaignCriterionErrorEnum)
+ ))
+_sym_db.RegisterMessage(CampaignCriterionErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\033CampaignCriterionErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/campaign_criterion_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/campaign_criterion_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/campaign_criterion_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/campaign_error_pb2.py b/google/ads/google_ads/v0/proto/errors/campaign_error_pb2.py
new file mode 100644
index 000000000..1f99cd3ea
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/campaign_error_pb2.py
@@ -0,0 +1,239 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/campaign_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/campaign_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n9google/ads/googleads_v0/proto/errors/campaign_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xcf\x0c\n\x11\x43\x61mpaignErrorEnum\"\xb9\x0c\n\rCampaignError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12!\n\x1d\x43\x41NNOT_TARGET_CONTENT_NETWORK\x10\x03\x12 \n\x1c\x43\x41NNOT_TARGET_SEARCH_NETWORK\x10\x04\x12\x36\n2CANNOT_TARGET_SEARCH_NETWORK_WITHOUT_GOOGLE_SEARCH\x10\x05\x12\x30\n,CANNOT_TARGET_GOOGLE_SEARCH_FOR_CPM_CAMPAIGN\x10\x06\x12-\n)CAMPAIGN_MUST_TARGET_AT_LEAST_ONE_NETWORK\x10\x07\x12(\n$CANNOT_TARGET_PARTNER_SEARCH_NETWORK\x10\x08\x12K\nGCANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CRITERIA_LEVEL_BIDDING_STRATEGY\x10\t\x12\x36\n2CAMPAIGN_DURATION_MUST_CONTAIN_ALL_RUNNABLE_TRIALS\x10\n\x12$\n CANNOT_MODIFY_FOR_TRIAL_CAMPAIGN\x10\x0b\x12\x1b\n\x17\x44UPLICATE_CAMPAIGN_NAME\x10\x0c\x12\x1f\n\x1bINCOMPATIBLE_CAMPAIGN_FIELD\x10\r\x12\x19\n\x15INVALID_CAMPAIGN_NAME\x10\x0e\x12*\n&INVALID_AD_SERVING_OPTIMIZATION_STATUS\x10\x0f\x12\x18\n\x14INVALID_TRACKING_URL\x10\x10\x12>\n:CANNOT_SET_BOTH_TRACKING_URL_TEMPLATE_AND_TRACKING_SETTING\x10\x11\x12 \n\x1cMAX_IMPRESSIONS_NOT_IN_RANGE\x10\x12\x12\x1b\n\x17TIME_UNIT_NOT_SUPPORTED\x10\x13\x12\x31\n-INVALID_OPERATION_IF_SERVING_STATUS_HAS_ENDED\x10\x14\x12\x1b\n\x17\x42UDGET_CANNOT_BE_SHARED\x10\x15\x12%\n!CAMPAIGN_CANNOT_USE_SHARED_BUDGET\x10\x16\x12\x30\n,CANNOT_CHANGE_BUDGET_ON_CAMPAIGN_WITH_TRIALS\x10\x17\x12!\n\x1d\x43\x41MPAIGN_LABEL_DOES_NOT_EXIST\x10\x18\x12!\n\x1d\x43\x41MPAIGN_LABEL_ALREADY_EXISTS\x10\x19\x12\x1c\n\x18MISSING_SHOPPING_SETTING\x10\x1a\x12\"\n\x1eINVALID_SHOPPING_SALES_COUNTRY\x10\x1b\x12\x39\n5SHOPPING_MERCHANT_NOT_ALLOWED_FOR_PURCHASES_ON_GOOGLE\x10\x1c\x12@\n\x12(\n$CANNOT_BID_MODIFY_NEGATIVE_CRITERION\x10?\x12\x1f\n\x1b\x42ID_MODIFIER_ALREADY_EXISTS\x10@\x12\x17\n\x13\x46\x45\x45\x44_ID_NOT_ALLOWED\x10\x41\x12(\n$ACCOUNT_INELIGIBLE_FOR_CRITERIA_TYPE\x10\x42\x12.\n*CRITERIA_TYPE_INVALID_FOR_BIDDING_STRATEGY\x10\x43\x12\x1c\n\x18\x43\x41NNOT_EXCLUDE_CRITERION\x10\x44\x12\x1b\n\x17\x43\x41NNOT_REMOVE_CRITERION\x10\x45\x12\x1a\n\x16PRODUCT_SCOPE_TOO_LONG\x10\x46\x12%\n!PRODUCT_SCOPE_TOO_MANY_DIMENSIONS\x10G\x12\x1e\n\x1aPRODUCT_PARTITION_TOO_LONG\x10H\x12)\n%PRODUCT_PARTITION_TOO_MANY_DIMENSIONS\x10I\x12\x1d\n\x19INVALID_PRODUCT_DIMENSION\x10J\x12\"\n\x1eINVALID_PRODUCT_DIMENSION_TYPE\x10K\x12$\n INVALID_PRODUCT_BIDDING_CATEGORY\x10L\x12\x1c\n\x18MISSING_SHOPPING_SETTING\x10M\x12\x1d\n\x19INVALID_MATCHING_FUNCTION\x10N\x12\x1f\n\x1bLOCATION_FILTER_NOT_ALLOWED\x10O\x12\x1b\n\x17LOCATION_FILTER_INVALID\x10P\x12\x32\n.CANNOT_ATTACH_CRITERIA_AT_CAMPAIGN_AND_ADGROUP\x10Q\x12\x39\n5HOTEL_LENGTH_OF_STAY_OVERLAPS_WITH_EXISTING_CRITERION\x10R\x12\x41\n=HOTEL_ADVANCE_BOOKING_WINDOW_OVERLAPS_WITH_EXISTING_CRITERION\x10S\x12.\n*FIELD_INCOMPATIBLE_WITH_NEGATIVE_TARGETING\x10TB\xc9\x01\n\"com.google.ads.googleads.v0.errorsB\x13\x43riterionErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_CRITERIONERRORENUM_CRITERIONERROR = _descriptor.EnumDescriptor(
+ name='CriterionError',
+ full_name='google.ads.googleads.v0.errors.CriterionErrorEnum.CriterionError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CONCRETE_TYPE_REQUIRED', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_EXCLUDED_CATEGORY', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_KEYWORD_TEXT', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='KEYWORD_TEXT_TOO_LONG', index=5, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='KEYWORD_HAS_TOO_MANY_WORDS', index=6, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='KEYWORD_HAS_INVALID_CHARS', index=7, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_PLACEMENT_URL', index=8, number=8,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_USER_LIST', index=9, number=9,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_USER_INTEREST', index=10, number=10,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_FORMAT_FOR_PLACEMENT_URL', index=11, number=11,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PLACEMENT_URL_IS_TOO_LONG', index=12, number=12,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PLACEMENT_URL_HAS_ILLEGAL_CHAR', index=13, number=13,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PLACEMENT_URL_HAS_MULTIPLE_SITES_IN_LINE', index=14, number=14,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PLACEMENT_IS_NOT_AVAILABLE_FOR_TARGETING_OR_EXCLUSION', index=15, number=15,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_VERTICAL_PATH', index=16, number=16,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_YOUTUBE_CHANNEL_ID', index=17, number=17,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_YOUTUBE_VIDEO_ID', index=18, number=18,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='YOUTUBE_VERTICAL_CHANNEL_DEPRECATED', index=19, number=19,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='YOUTUBE_DEMOGRAPHIC_CHANNEL_DEPRECATED', index=20, number=20,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='YOUTUBE_URL_UNSUPPORTED', index=21, number=21,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_EXCLUDE_CRITERIA_TYPE', index=22, number=22,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_ADD_CRITERIA_TYPE', index=23, number=23,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_PRODUCT_FILTER', index=24, number=24,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PRODUCT_FILTER_TOO_LONG', index=25, number=25,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_EXCLUDE_SIMILAR_USER_LIST', index=26, number=26,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_ADD_CLOSED_USER_LIST', index=27, number=27,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_ONLY_CAMPAIGNS', index=28, number=28,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_CAMPAIGNS', index=29, number=29,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SHOPPING_CAMPAIGNS', index=30, number=30,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_ADD_USER_INTERESTS_TO_SEARCH_CAMPAIGNS', index=31, number=31,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SET_BIDS_ON_CRITERION_TYPE_IN_SEARCH_CAMPAIGNS', index=32, number=32,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_ADD_URLS_TO_CRITERION_TYPE_FOR_CAMPAIGN_TYPE', index=33, number=33,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_IP_ADDRESS', index=34, number=34,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_IP_FORMAT', index=35, number=35,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_MOBILE_APP', index=36, number=36,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_MOBILE_APP_CATEGORY', index=37, number=37,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_CRITERION_ID', index=38, number=38,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_TARGET_CRITERION', index=39, number=39,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_TARGET_OBSOLETE_CRITERION', index=40, number=40,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CRITERION_ID_AND_TYPE_MISMATCH', index=41, number=41,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_PROXIMITY_RADIUS', index=42, number=42,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_PROXIMITY_RADIUS_UNITS', index=43, number=43,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_STREETADDRESS_LENGTH', index=44, number=44,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_CITYNAME_LENGTH', index=45, number=45,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_REGIONCODE_LENGTH', index=46, number=46,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_REGIONNAME_LENGTH', index=47, number=47,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_POSTALCODE_LENGTH', index=48, number=48,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_COUNTRY_CODE', index=49, number=49,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_LATITUDE', index=50, number=50,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_LONGITUDE', index=51, number=51,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROXIMITY_GEOPOINT_AND_ADDRESS_BOTH_CANNOT_BE_NULL', index=52, number=52,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_PROXIMITY_ADDRESS', index=53, number=53,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_USER_DOMAIN_NAME', index=54, number=54,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CRITERION_PARAMETER_TOO_LONG', index=55, number=55,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='AD_SCHEDULE_TIME_INTERVALS_OVERLAP', index=56, number=56,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='AD_SCHEDULE_INTERVAL_CANNOT_SPAN_MULTIPLE_DAYS', index=57, number=57,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='AD_SCHEDULE_INVALID_TIME_INTERVAL', index=58, number=58,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='AD_SCHEDULE_EXCEEDED_INTERVALS_PER_DAY_LIMIT', index=59, number=59,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='AD_SCHEDULE_CRITERION_ID_MISMATCHING_FIELDS', index=60, number=60,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_BID_MODIFY_CRITERION_TYPE', index=61, number=61,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_BID_MODIFY_CRITERION_CAMPAIGN_OPTED_OUT', index=62, number=62,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_BID_MODIFY_NEGATIVE_CRITERION', index=63, number=63,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BID_MODIFIER_ALREADY_EXISTS', index=64, number=64,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FEED_ID_NOT_ALLOWED', index=65, number=65,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ACCOUNT_INELIGIBLE_FOR_CRITERIA_TYPE', index=66, number=66,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CRITERIA_TYPE_INVALID_FOR_BIDDING_STRATEGY', index=67, number=67,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_EXCLUDE_CRITERION', index=68, number=68,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_REMOVE_CRITERION', index=69, number=69,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PRODUCT_SCOPE_TOO_LONG', index=70, number=70,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PRODUCT_SCOPE_TOO_MANY_DIMENSIONS', index=71, number=71,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PRODUCT_PARTITION_TOO_LONG', index=72, number=72,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PRODUCT_PARTITION_TOO_MANY_DIMENSIONS', index=73, number=73,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_PRODUCT_DIMENSION', index=74, number=74,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_PRODUCT_DIMENSION_TYPE', index=75, number=75,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_PRODUCT_BIDDING_CATEGORY', index=76, number=76,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_SHOPPING_SETTING', index=77, number=77,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_MATCHING_FUNCTION', index=78, number=78,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LOCATION_FILTER_NOT_ALLOWED', index=79, number=79,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LOCATION_FILTER_INVALID', index=80, number=80,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_ATTACH_CRITERIA_AT_CAMPAIGN_AND_ADGROUP', index=81, number=81,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HOTEL_LENGTH_OF_STAY_OVERLAPS_WITH_EXISTING_CRITERION', index=82, number=82,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HOTEL_ADVANCE_BOOKING_WINDOW_OVERLAPS_WITH_EXISTING_CRITERION', index=83, number=83,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FIELD_INCOMPATIBLE_WITH_NEGATIVE_TARGETING', index=84, number=84,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=118,
+ serialized_end=3202,
+)
+_sym_db.RegisterEnumDescriptor(_CRITERIONERRORENUM_CRITERIONERROR)
+
+
+_CRITERIONERRORENUM = _descriptor.Descriptor(
+ name='CriterionErrorEnum',
+ full_name='google.ads.googleads.v0.errors.CriterionErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _CRITERIONERRORENUM_CRITERIONERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=95,
+ serialized_end=3202,
+)
+
+_CRITERIONERRORENUM_CRITERIONERROR.containing_type = _CRITERIONERRORENUM
+DESCRIPTOR.message_types_by_name['CriterionErrorEnum'] = _CRITERIONERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+CriterionErrorEnum = _reflection.GeneratedProtocolMessageType('CriterionErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _CRITERIONERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.criterion_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible criterion errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.CriterionErrorEnum)
+ ))
+_sym_db.RegisterMessage(CriterionErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\023CriterionErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/criterion_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/criterion_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/criterion_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/date_error_pb2.py b/google/ads/google_ads/v0/proto/errors/date_error_pb2.py
new file mode 100644
index 000000000..8f17a0e83
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/date_error_pb2.py
@@ -0,0 +1,123 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/date_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/date_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n5google/ads/googleads_v0/proto/errors/date_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xe0\x02\n\rDateErrorEnum\"\xce\x02\n\tDateError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12 \n\x1cINVALID_FIELD_VALUES_IN_DATE\x10\x02\x12%\n!INVALID_FIELD_VALUES_IN_DATE_TIME\x10\x03\x12\x17\n\x13INVALID_STRING_DATE\x10\x04\x12\x1c\n\x18INVALID_STRING_DATE_TIME\x10\x06\x12\x1d\n\x19\x45\x41RLIER_THAN_MINIMUM_DATE\x10\x07\x12\x1b\n\x17LATER_THAN_MAXIMUM_DATE\x10\x08\x12\x33\n/DATE_RANGE_MINIMUM_DATE_LATER_THAN_MAXIMUM_DATE\x10\t\x12\x32\n.DATE_RANGE_MINIMUM_AND_MAXIMUM_DATES_BOTH_NULL\x10\nB\xc4\x01\n\"com.google.ads.googleads.v0.errorsB\x0e\x44\x61teErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_DATEERRORENUM_DATEERROR = _descriptor.EnumDescriptor(
+ name='DateError',
+ full_name='google.ads.googleads.v0.errors.DateErrorEnum.DateError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_FIELD_VALUES_IN_DATE', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_FIELD_VALUES_IN_DATE_TIME', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_STRING_DATE', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_STRING_DATE_TIME', index=5, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EARLIER_THAN_MINIMUM_DATE', index=6, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LATER_THAN_MAXIMUM_DATE', index=7, number=8,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DATE_RANGE_MINIMUM_DATE_LATER_THAN_MAXIMUM_DATE', index=8, number=9,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DATE_RANGE_MINIMUM_AND_MAXIMUM_DATES_BOTH_NULL', index=9, number=10,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=108,
+ serialized_end=442,
+)
+_sym_db.RegisterEnumDescriptor(_DATEERRORENUM_DATEERROR)
+
+
+_DATEERRORENUM = _descriptor.Descriptor(
+ name='DateErrorEnum',
+ full_name='google.ads.googleads.v0.errors.DateErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _DATEERRORENUM_DATEERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=90,
+ serialized_end=442,
+)
+
+_DATEERRORENUM_DATEERROR.containing_type = _DATEERRORENUM
+DESCRIPTOR.message_types_by_name['DateErrorEnum'] = _DATEERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+DateErrorEnum = _reflection.GeneratedProtocolMessageType('DateErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _DATEERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.date_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible date errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.DateErrorEnum)
+ ))
+_sym_db.RegisterMessage(DateErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\016DateErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/date_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/date_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/date_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/date_range_error_pb2.py b/google/ads/google_ads/v0/proto/errors/date_range_error_pb2.py
new file mode 100644
index 000000000..4fd26b63b
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/date_range_error_pb2.py
@@ -0,0 +1,111 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/date_range_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/date_range_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n;google/ads/googleads_v0/proto/errors/date_range_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xe6\x01\n\x12\x44\x61teRangeErrorEnum\"\xcf\x01\n\x0e\x44\x61teRangeError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x10\n\x0cINVALID_DATE\x10\x02\x12\x1d\n\x19START_DATE_AFTER_END_DATE\x10\x03\x12\x1b\n\x17\x43\x41NNOT_SET_DATE_TO_PAST\x10\x04\x12 \n\x1c\x41\x46TER_MAXIMUM_ALLOWABLE_DATE\x10\x05\x12/\n+CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED\x10\x06\x42\xc9\x01\n\"com.google.ads.googleads.v0.errorsB\x13\x44\x61teRangeErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_DATERANGEERRORENUM_DATERANGEERROR = _descriptor.EnumDescriptor(
+ name='DateRangeError',
+ full_name='google.ads.googleads.v0.errors.DateRangeErrorEnum.DateRangeError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_DATE', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='START_DATE_AFTER_END_DATE', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SET_DATE_TO_PAST', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='AFTER_MAXIMUM_ALLOWABLE_DATE', index=5, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED', index=6, number=6,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=119,
+ serialized_end=326,
+)
+_sym_db.RegisterEnumDescriptor(_DATERANGEERRORENUM_DATERANGEERROR)
+
+
+_DATERANGEERRORENUM = _descriptor.Descriptor(
+ name='DateRangeErrorEnum',
+ full_name='google.ads.googleads.v0.errors.DateRangeErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _DATERANGEERRORENUM_DATERANGEERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=96,
+ serialized_end=326,
+)
+
+_DATERANGEERRORENUM_DATERANGEERROR.containing_type = _DATERANGEERRORENUM
+DESCRIPTOR.message_types_by_name['DateRangeErrorEnum'] = _DATERANGEERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+DateRangeErrorEnum = _reflection.GeneratedProtocolMessageType('DateRangeErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _DATERANGEERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.date_range_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible date range errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.DateRangeErrorEnum)
+ ))
+_sym_db.RegisterMessage(DateRangeErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\023DateRangeErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/date_range_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/date_range_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/date_range_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/distinct_error_pb2.py b/google/ads/google_ads/v0/proto/errors/distinct_error_pb2.py
new file mode 100644
index 000000000..65fb5577c
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/distinct_error_pb2.py
@@ -0,0 +1,99 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/distinct_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/distinct_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n9google/ads/googleads_v0/proto/errors/distinct_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"m\n\x11\x44istinctErrorEnum\"X\n\rDistinctError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x15\n\x11\x44UPLICATE_ELEMENT\x10\x02\x12\x12\n\x0e\x44UPLICATE_TYPE\x10\x03\x42\xc8\x01\n\"com.google.ads.googleads.v0.errorsB\x12\x44istinctErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_DISTINCTERRORENUM_DISTINCTERROR = _descriptor.EnumDescriptor(
+ name='DistinctError',
+ full_name='google.ads.googleads.v0.errors.DistinctErrorEnum.DistinctError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DUPLICATE_ELEMENT', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DUPLICATE_TYPE', index=3, number=3,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=114,
+ serialized_end=202,
+)
+_sym_db.RegisterEnumDescriptor(_DISTINCTERRORENUM_DISTINCTERROR)
+
+
+_DISTINCTERRORENUM = _descriptor.Descriptor(
+ name='DistinctErrorEnum',
+ full_name='google.ads.googleads.v0.errors.DistinctErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _DISTINCTERRORENUM_DISTINCTERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=93,
+ serialized_end=202,
+)
+
+_DISTINCTERRORENUM_DISTINCTERROR.containing_type = _DISTINCTERRORENUM
+DESCRIPTOR.message_types_by_name['DistinctErrorEnum'] = _DISTINCTERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+DistinctErrorEnum = _reflection.GeneratedProtocolMessageType('DistinctErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _DISTINCTERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.distinct_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible distinct errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.DistinctErrorEnum)
+ ))
+_sym_db.RegisterMessage(DistinctErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\022DistinctErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/distinct_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/distinct_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/distinct_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/errors_pb2.py b/google/ads/google_ads/v0/proto/errors/errors_pb2.py
new file mode 100644
index 000000000..826755495
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/errors_pb2.py
@@ -0,0 +1,1182 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/errors.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.common import policy_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_policy__pb2
+from google.ads.google_ads.v0.proto.common import value_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_value__pb2
+from google.ads.google_ads.v0.proto.errors import ad_customizer_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__customizer__error__pb2
+from google.ads.google_ads.v0.proto.errors import ad_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__error__pb2
+from google.ads.google_ads.v0.proto.errors import ad_group_ad_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__group__ad__error__pb2
+from google.ads.google_ads.v0.proto.errors import ad_group_bid_modifier_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__group__bid__modifier__error__pb2
+from google.ads.google_ads.v0.proto.errors import ad_group_criterion_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__group__criterion__error__pb2
+from google.ads.google_ads.v0.proto.errors import ad_group_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__group__error__pb2
+from google.ads.google_ads.v0.proto.errors import ad_sharing_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__sharing__error__pb2
+from google.ads.google_ads.v0.proto.errors import adx_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_adx__error__pb2
+from google.ads.google_ads.v0.proto.errors import authentication_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_authentication__error__pb2
+from google.ads.google_ads.v0.proto.errors import authorization_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_authorization__error__pb2
+from google.ads.google_ads.v0.proto.errors import bidding_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_bidding__error__pb2
+from google.ads.google_ads.v0.proto.errors import bidding_strategy_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_bidding__strategy__error__pb2
+from google.ads.google_ads.v0.proto.errors import campaign_budget_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_campaign__budget__error__pb2
+from google.ads.google_ads.v0.proto.errors import campaign_criterion_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_campaign__criterion__error__pb2
+from google.ads.google_ads.v0.proto.errors import campaign_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_campaign__error__pb2
+from google.ads.google_ads.v0.proto.errors import collection_size_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_collection__size__error__pb2
+from google.ads.google_ads.v0.proto.errors import context_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_context__error__pb2
+from google.ads.google_ads.v0.proto.errors import criterion_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_criterion__error__pb2
+from google.ads.google_ads.v0.proto.errors import date_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_date__error__pb2
+from google.ads.google_ads.v0.proto.errors import date_range_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_date__range__error__pb2
+from google.ads.google_ads.v0.proto.errors import distinct_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_distinct__error__pb2
+from google.ads.google_ads.v0.proto.errors import feed_attribute_reference_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_feed__attribute__reference__error__pb2
+from google.ads.google_ads.v0.proto.errors import field_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_field__error__pb2
+from google.ads.google_ads.v0.proto.errors import field_mask_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_field__mask__error__pb2
+from google.ads.google_ads.v0.proto.errors import function_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_function__error__pb2
+from google.ads.google_ads.v0.proto.errors import function_parsing_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_function__parsing__error__pb2
+from google.ads.google_ads.v0.proto.errors import id_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_id__error__pb2
+from google.ads.google_ads.v0.proto.errors import image_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_image__error__pb2
+from google.ads.google_ads.v0.proto.errors import internal_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_internal__error__pb2
+from google.ads.google_ads.v0.proto.errors import list_operation_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_list__operation__error__pb2
+from google.ads.google_ads.v0.proto.errors import media_bundle_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_media__bundle__error__pb2
+from google.ads.google_ads.v0.proto.errors import media_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_media__error__pb2
+from google.ads.google_ads.v0.proto.errors import multiplier_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_multiplier__error__pb2
+from google.ads.google_ads.v0.proto.errors import mutate_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_mutate__error__pb2
+from google.ads.google_ads.v0.proto.errors import new_resource_creation_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_new__resource__creation__error__pb2
+from google.ads.google_ads.v0.proto.errors import not_empty_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_not__empty__error__pb2
+from google.ads.google_ads.v0.proto.errors import null_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_null__error__pb2
+from google.ads.google_ads.v0.proto.errors import operation_access_denied_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_operation__access__denied__error__pb2
+from google.ads.google_ads.v0.proto.errors import operator_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_operator__error__pb2
+from google.ads.google_ads.v0.proto.errors import query_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_query__error__pb2
+from google.ads.google_ads.v0.proto.errors import quota_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_quota__error__pb2
+from google.ads.google_ads.v0.proto.errors import range_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_range__error__pb2
+from google.ads.google_ads.v0.proto.errors import recommendation_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_recommendation__error__pb2
+from google.ads.google_ads.v0.proto.errors import region_code_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_region__code__error__pb2
+from google.ads.google_ads.v0.proto.errors import request_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_request__error__pb2
+from google.ads.google_ads.v0.proto.errors import resource_access_denied_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_resource__access__denied__error__pb2
+from google.ads.google_ads.v0.proto.errors import resource_count_limit_exceeded_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_resource__count__limit__exceeded__error__pb2
+from google.ads.google_ads.v0.proto.errors import setting_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_setting__error__pb2
+from google.ads.google_ads.v0.proto.errors import string_format_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_string__format__error__pb2
+from google.ads.google_ads.v0.proto.errors import string_length_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_string__length__error__pb2
+from google.ads.google_ads.v0.proto.errors import url_field_error_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_url__field__error__pb2
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/errors.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n1google/ads/googleads_v0/proto/errors/errors.proto\x12\x1egoogle.ads.googleads.v0.errors\x1a\x31google/ads/googleads_v0/proto/common/policy.proto\x1a\x30google/ads/googleads_v0/proto/common/value.proto\x1a>google/ads/googleads_v0/proto/errors/ad_customizer_error.proto\x1a\x33google/ads/googleads_v0/proto/errors/ad_error.proto\x1agoogle/ads/googleads_v0/proto/errors/authorization_error.proto\x1a\x38google/ads/googleads_v0/proto/errors/bidding_error.proto\x1a\x41google/ads/googleads_v0/proto/errors/bidding_strategy_error.proto\x1a@google/ads/googleads_v0/proto/errors/campaign_budget_error.proto\x1a\x43google/ads/googleads_v0/proto/errors/campaign_criterion_error.proto\x1a\x39google/ads/googleads_v0/proto/errors/campaign_error.proto\x1a@google/ads/googleads_v0/proto/errors/collection_size_error.proto\x1a\x38google/ads/googleads_v0/proto/errors/context_error.proto\x1a:google/ads/googleads_v0/proto/errors/criterion_error.proto\x1a\x35google/ads/googleads_v0/proto/errors/date_error.proto\x1a;google/ads/googleads_v0/proto/errors/date_range_error.proto\x1a\x39google/ads/googleads_v0/proto/errors/distinct_error.proto\x1aIgoogle/ads/googleads_v0/proto/errors/feed_attribute_reference_error.proto\x1a\x36google/ads/googleads_v0/proto/errors/field_error.proto\x1a;google/ads/googleads_v0/proto/errors/field_mask_error.proto\x1a\x39google/ads/googleads_v0/proto/errors/function_error.proto\x1a\x41google/ads/googleads_v0/proto/errors/function_parsing_error.proto\x1a\x33google/ads/googleads_v0/proto/errors/id_error.proto\x1a\x36google/ads/googleads_v0/proto/errors/image_error.proto\x1a\x39google/ads/googleads_v0/proto/errors/internal_error.proto\x1a?google/ads/googleads_v0/proto/errors/list_operation_error.proto\x1a=google/ads/googleads_v0/proto/errors/media_bundle_error.proto\x1a\x36google/ads/googleads_v0/proto/errors/media_error.proto\x1a;google/ads/googleads_v0/proto/errors/multiplier_error.proto\x1a\x37google/ads/googleads_v0/proto/errors/mutate_error.proto\x1a\x46google/ads/googleads_v0/proto/errors/new_resource_creation_error.proto\x1a:google/ads/googleads_v0/proto/errors/not_empty_error.proto\x1a\x35google/ads/googleads_v0/proto/errors/null_error.proto\x1aHgoogle/ads/googleads_v0/proto/errors/operation_access_denied_error.proto\x1a\x39google/ads/googleads_v0/proto/errors/operator_error.proto\x1a\x36google/ads/googleads_v0/proto/errors/query_error.proto\x1a\x36google/ads/googleads_v0/proto/errors/quota_error.proto\x1a\x36google/ads/googleads_v0/proto/errors/range_error.proto\x1a?google/ads/googleads_v0/proto/errors/recommendation_error.proto\x1agoogle/ads/googleads_v0/proto/errors/string_format_error.proto\x1a>google/ads/googleads_v0/proto/errors/string_length_error.proto\x1a:google/ads/googleads_v0/proto/errors/url_field_error.proto\x1a\x1egoogle/protobuf/wrappers.proto\"R\n\x10GoogleAdsFailure\x12>\n\x06\x65rrors\x18\x01 \x03(\x0b\x32..google.ads.googleads.v0.errors.GoogleAdsError\"\x98\x02\n\x0eGoogleAdsError\x12=\n\nerror_code\x18\x01 \x01(\x0b\x32).google.ads.googleads.v0.errors.ErrorCode\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x36\n\x07trigger\x18\x03 \x01(\x0b\x32%.google.ads.googleads.v0.common.Value\x12?\n\x08location\x18\x04 \x01(\x0b\x32-.google.ads.googleads.v0.errors.ErrorLocation\x12=\n\x07\x64\x65tails\x18\x05 \x01(\x0b\x32,.google.ads.googleads.v0.errors.ErrorDetails\"\xbf\'\n\tErrorCode\x12V\n\rrequest_error\x18\x01 \x01(\x0e\x32=.google.ads.googleads.v0.errors.RequestErrorEnum.RequestErrorH\x00\x12o\n\x16\x62idding_strategy_error\x18\x02 \x01(\x0e\x32M.google.ads.googleads.v0.errors.BiddingStrategyErrorEnum.BiddingStrategyErrorH\x00\x12Z\n\x0furl_field_error\x18\x03 \x01(\x0e\x32?.google.ads.googleads.v0.errors.UrlFieldErrorEnum.UrlFieldErrorH\x00\x12i\n\x14list_operation_error\x18\x04 \x01(\x0e\x32I.google.ads.googleads.v0.errors.ListOperationErrorEnum.ListOperationErrorH\x00\x12P\n\x0bquery_error\x18\x05 \x01(\x0e\x32\x39.google.ads.googleads.v0.errors.QueryErrorEnum.QueryErrorH\x00\x12S\n\x0cmutate_error\x18\x07 \x01(\x0e\x32;.google.ads.googleads.v0.errors.MutateErrorEnum.MutateErrorH\x00\x12]\n\x10\x66ield_mask_error\x18\x08 \x01(\x0e\x32\x41.google.ads.googleads.v0.errors.FieldMaskErrorEnum.FieldMaskErrorH\x00\x12h\n\x13\x61uthorization_error\x18\t \x01(\x0e\x32I.google.ads.googleads.v0.errors.AuthorizationErrorEnum.AuthorizationErrorH\x00\x12Y\n\x0einternal_error\x18\n \x01(\x0e\x32?.google.ads.googleads.v0.errors.InternalErrorEnum.InternalErrorH\x00\x12P\n\x0bquota_error\x18\x0b \x01(\x0e\x32\x39.google.ads.googleads.v0.errors.QuotaErrorEnum.QuotaErrorH\x00\x12G\n\x08\x61\x64_error\x18\x0c \x01(\x0e\x32\x33.google.ads.googleads.v0.errors.AdErrorEnum.AdErrorH\x00\x12W\n\x0e\x61\x64_group_error\x18\r \x01(\x0e\x32=.google.ads.googleads.v0.errors.AdGroupErrorEnum.AdGroupErrorH\x00\x12l\n\x15\x63\x61mpaign_budget_error\x18\x0e \x01(\x0e\x32K.google.ads.googleads.v0.errors.CampaignBudgetErrorEnum.CampaignBudgetErrorH\x00\x12Y\n\x0e\x63\x61mpaign_error\x18\x0f \x01(\x0e\x32?.google.ads.googleads.v0.errors.CampaignErrorEnum.CampaignErrorH\x00\x12k\n\x14\x61uthentication_error\x18\x11 \x01(\x0e\x32K.google.ads.googleads.v0.errors.AuthenticationErrorEnum.AuthenticationErrorH\x00\x12s\n\x18\x61\x64_group_criterion_error\x18\x12 \x01(\x0e\x32O.google.ads.googleads.v0.errors.AdGroupCriterionErrorEnum.AdGroupCriterionErrorH\x00\x12\x66\n\x13\x61\x64_customizer_error\x18\x13 \x01(\x0e\x32G.google.ads.googleads.v0.errors.AdCustomizerErrorEnum.AdCustomizerErrorH\x00\x12^\n\x11\x61\x64_group_ad_error\x18\x15 \x01(\x0e\x32\x41.google.ads.googleads.v0.errors.AdGroupAdErrorEnum.AdGroupAdErrorH\x00\x12]\n\x10\x61\x64_sharing_error\x18\x18 \x01(\x0e\x32\x41.google.ads.googleads.v0.errors.AdSharingErrorEnum.AdSharingErrorH\x00\x12J\n\tadx_error\x18\x19 \x01(\x0e\x32\x35.google.ads.googleads.v0.errors.AdxErrorEnum.AdxErrorH\x00\x12V\n\rbidding_error\x18\x1a \x01(\x0e\x32=.google.ads.googleads.v0.errors.BiddingErrorEnum.BiddingErrorH\x00\x12u\n\x18\x63\x61mpaign_criterion_error\x18\x1d \x01(\x0e\x32Q.google.ads.googleads.v0.errors.CampaignCriterionErrorEnum.CampaignCriterionErrorH\x00\x12l\n\x15\x63ollection_size_error\x18\x1f \x01(\x0e\x32K.google.ads.googleads.v0.errors.CollectionSizeErrorEnum.CollectionSizeErrorH\x00\x12\\\n\x0f\x63riterion_error\x18 \x01(\x0e\x32\x41.google.ads.googleads.v0.errors.CriterionErrorEnum.CriterionErrorH\x00\x12M\n\ndate_error\x18! \x01(\x0e\x32\x37.google.ads.googleads.v0.errors.DateErrorEnum.DateErrorH\x00\x12]\n\x10\x64\x61te_range_error\x18\" \x01(\x0e\x32\x41.google.ads.googleads.v0.errors.DateRangeErrorEnum.DateRangeErrorH\x00\x12Y\n\x0e\x64istinct_error\x18# \x01(\x0e\x32?.google.ads.googleads.v0.errors.DistinctErrorEnum.DistinctErrorH\x00\x12\x85\x01\n\x1e\x66\x65\x65\x64_attribute_reference_error\x18$ \x01(\x0e\x32[.google.ads.googleads.v0.errors.FeedAttributeReferenceErrorEnum.FeedAttributeReferenceErrorH\x00\x12Y\n\x0e\x66unction_error\x18% \x01(\x0e\x32?.google.ads.googleads.v0.errors.FunctionErrorEnum.FunctionErrorH\x00\x12o\n\x16\x66unction_parsing_error\x18& \x01(\x0e\x32M.google.ads.googleads.v0.errors.FunctionParsingErrorEnum.FunctionParsingErrorH\x00\x12G\n\x08id_error\x18\' \x01(\x0e\x32\x33.google.ads.googleads.v0.errors.IdErrorEnum.IdErrorH\x00\x12P\n\x0bimage_error\x18( \x01(\x0e\x32\x39.google.ads.googleads.v0.errors.ImageErrorEnum.ImageErrorH\x00\x12\x63\n\x12media_bundle_error\x18* \x01(\x0e\x32\x45.google.ads.googleads.v0.errors.MediaBundleErrorEnum.MediaBundleErrorH\x00\x12P\n\x0bmedia_error\x18+ \x01(\x0e\x32\x39.google.ads.googleads.v0.errors.MediaErrorEnum.MediaErrorH\x00\x12_\n\x10multiplier_error\x18, \x01(\x0e\x32\x43.google.ads.googleads.v0.errors.MultiplierErrorEnum.MultiplierErrorH\x00\x12|\n\x1bnew_resource_creation_error\x18- \x01(\x0e\x32U.google.ads.googleads.v0.errors.NewResourceCreationErrorEnum.NewResourceCreationErrorH\x00\x12Z\n\x0fnot_empty_error\x18. \x01(\x0e\x32?.google.ads.googleads.v0.errors.NotEmptyErrorEnum.NotEmptyErrorH\x00\x12M\n\nnull_error\x18/ \x01(\x0e\x32\x37.google.ads.googleads.v0.errors.NullErrorEnum.NullErrorH\x00\x12Y\n\x0eoperator_error\x18\x30 \x01(\x0e\x32?.google.ads.googleads.v0.errors.OperatorErrorEnum.OperatorErrorH\x00\x12P\n\x0brange_error\x18\x31 \x01(\x0e\x32\x39.google.ads.googleads.v0.errors.RangeErrorEnum.RangeErrorH\x00\x12k\n\x14recommendation_error\x18: \x01(\x0e\x32K.google.ads.googleads.v0.errors.RecommendationErrorEnum.RecommendationErrorH\x00\x12`\n\x11region_code_error\x18\x33 \x01(\x0e\x32\x43.google.ads.googleads.v0.errors.RegionCodeErrorEnum.RegionCodeErrorH\x00\x12V\n\rsetting_error\x18\x34 \x01(\x0e\x32=.google.ads.googleads.v0.errors.SettingErrorEnum.SettingErrorH\x00\x12\x66\n\x13string_format_error\x18\x35 \x01(\x0e\x32G.google.ads.googleads.v0.errors.StringFormatErrorEnum.StringFormatErrorH\x00\x12\x66\n\x13string_length_error\x18\x36 \x01(\x0e\x32G.google.ads.googleads.v0.errors.StringLengthErrorEnum.StringLengthErrorH\x00\x12\x82\x01\n\x1doperation_access_denied_error\x18\x37 \x01(\x0e\x32Y.google.ads.googleads.v0.errors.OperationAccessDeniedErrorEnum.OperationAccessDeniedErrorH\x00\x12\x7f\n\x1cresource_access_denied_error\x18\x38 \x01(\x0e\x32W.google.ads.googleads.v0.errors.ResourceAccessDeniedErrorEnum.ResourceAccessDeniedErrorH\x00\x12\x92\x01\n#resource_count_limit_exceeded_error\x18\x39 \x01(\x0e\x32\x63.google.ads.googleads.v0.errors.ResourceCountLimitExceededErrorEnum.ResourceCountLimitExceededErrorH\x00\x12z\n\x1b\x61\x64_group_bid_modifier_error\x18; \x01(\x0e\x32S.google.ads.googleads.v0.errors.AdGroupBidModifierErrorEnum.AdGroupBidModifierErrorH\x00\x12V\n\rcontext_error\x18< \x01(\x0e\x32=.google.ads.googleads.v0.errors.ContextErrorEnum.ContextErrorH\x00\x12P\n\x0b\x66ield_error\x18= \x01(\x0e\x32\x39.google.ads.googleads.v0.errors.FieldErrorEnum.FieldErrorH\x00\x42\x0c\n\nerror_code\"\xf6\x01\n\rErrorLocation\x12\x34\n\x0foperation_index\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12[\n\x13\x66ield_path_elements\x18\x02 \x03(\x0b\x32>.google.ads.googleads.v0.errors.ErrorLocation.FieldPathElement\x1aR\n\x10\x46ieldPathElement\x12\x12\n\nfield_name\x18\x01 \x01(\t\x12*\n\x05index\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\"\x88\x01\n\x0c\x45rrorDetails\x12\x1e\n\x16unpublished_error_code\x18\x01 \x01(\t\x12X\n\x18policy_violation_details\x18\x02 \x01(\x0b\x32\x36.google.ads.googleads.v0.errors.PolicyViolationDetails\"\xb3\x01\n\x16PolicyViolationDetails\x12#\n\x1b\x65xternal_policy_description\x18\x02 \x01(\t\x12?\n\x03key\x18\x04 \x01(\x0b\x32\x32.google.ads.googleads.v0.common.PolicyViolationKey\x12\x1c\n\x14\x65xternal_policy_name\x18\x05 \x01(\t\x12\x15\n\ris_exemptible\x18\x06 \x01(\x08\x42\xc1\x01\n\"com.google.ads.googleads.v0.errorsB\x0b\x45rrorsProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_policy__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_value__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__customizer__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__group__ad__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__group__bid__modifier__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__group__criterion__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__group__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__sharing__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_adx__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_authentication__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_authorization__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_bidding__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_bidding__strategy__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_campaign__budget__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_campaign__criterion__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_campaign__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_collection__size__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_context__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_criterion__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_date__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_date__range__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_distinct__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_feed__attribute__reference__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_field__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_field__mask__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_function__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_function__parsing__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_id__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_image__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_internal__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_list__operation__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_media__bundle__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_media__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_multiplier__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_mutate__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_new__resource__creation__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_not__empty__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_null__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_operation__access__denied__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_operator__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_query__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_quota__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_range__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_recommendation__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_region__code__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_request__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_resource__access__denied__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_resource__count__limit__exceeded__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_setting__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_string__format__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_string__length__error__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_url__field__error__pb2.DESCRIPTOR,google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_GOOGLEADSFAILURE = _descriptor.Descriptor(
+ name='GoogleAdsFailure',
+ full_name='google.ads.googleads.v0.errors.GoogleAdsFailure',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='errors', full_name='google.ads.googleads.v0.errors.GoogleAdsFailure.errors', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3379,
+ serialized_end=3461,
+)
+
+
+_GOOGLEADSERROR = _descriptor.Descriptor(
+ name='GoogleAdsError',
+ full_name='google.ads.googleads.v0.errors.GoogleAdsError',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='error_code', full_name='google.ads.googleads.v0.errors.GoogleAdsError.error_code', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='message', full_name='google.ads.googleads.v0.errors.GoogleAdsError.message', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='trigger', full_name='google.ads.googleads.v0.errors.GoogleAdsError.trigger', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='location', full_name='google.ads.googleads.v0.errors.GoogleAdsError.location', index=3,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='details', full_name='google.ads.googleads.v0.errors.GoogleAdsError.details', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3464,
+ serialized_end=3744,
+)
+
+
+_ERRORCODE = _descriptor.Descriptor(
+ name='ErrorCode',
+ full_name='google.ads.googleads.v0.errors.ErrorCode',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='request_error', full_name='google.ads.googleads.v0.errors.ErrorCode.request_error', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='bidding_strategy_error', full_name='google.ads.googleads.v0.errors.ErrorCode.bidding_strategy_error', index=1,
+ number=2, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='url_field_error', full_name='google.ads.googleads.v0.errors.ErrorCode.url_field_error', index=2,
+ number=3, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='list_operation_error', full_name='google.ads.googleads.v0.errors.ErrorCode.list_operation_error', index=3,
+ number=4, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='query_error', full_name='google.ads.googleads.v0.errors.ErrorCode.query_error', index=4,
+ number=5, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='mutate_error', full_name='google.ads.googleads.v0.errors.ErrorCode.mutate_error', index=5,
+ number=7, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='field_mask_error', full_name='google.ads.googleads.v0.errors.ErrorCode.field_mask_error', index=6,
+ number=8, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='authorization_error', full_name='google.ads.googleads.v0.errors.ErrorCode.authorization_error', index=7,
+ number=9, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='internal_error', full_name='google.ads.googleads.v0.errors.ErrorCode.internal_error', index=8,
+ number=10, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='quota_error', full_name='google.ads.googleads.v0.errors.ErrorCode.quota_error', index=9,
+ number=11, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ad_error', full_name='google.ads.googleads.v0.errors.ErrorCode.ad_error', index=10,
+ number=12, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ad_group_error', full_name='google.ads.googleads.v0.errors.ErrorCode.ad_group_error', index=11,
+ number=13, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='campaign_budget_error', full_name='google.ads.googleads.v0.errors.ErrorCode.campaign_budget_error', index=12,
+ number=14, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='campaign_error', full_name='google.ads.googleads.v0.errors.ErrorCode.campaign_error', index=13,
+ number=15, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='authentication_error', full_name='google.ads.googleads.v0.errors.ErrorCode.authentication_error', index=14,
+ number=17, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ad_group_criterion_error', full_name='google.ads.googleads.v0.errors.ErrorCode.ad_group_criterion_error', index=15,
+ number=18, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ad_customizer_error', full_name='google.ads.googleads.v0.errors.ErrorCode.ad_customizer_error', index=16,
+ number=19, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ad_group_ad_error', full_name='google.ads.googleads.v0.errors.ErrorCode.ad_group_ad_error', index=17,
+ number=21, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ad_sharing_error', full_name='google.ads.googleads.v0.errors.ErrorCode.ad_sharing_error', index=18,
+ number=24, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='adx_error', full_name='google.ads.googleads.v0.errors.ErrorCode.adx_error', index=19,
+ number=25, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='bidding_error', full_name='google.ads.googleads.v0.errors.ErrorCode.bidding_error', index=20,
+ number=26, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='campaign_criterion_error', full_name='google.ads.googleads.v0.errors.ErrorCode.campaign_criterion_error', index=21,
+ number=29, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='collection_size_error', full_name='google.ads.googleads.v0.errors.ErrorCode.collection_size_error', index=22,
+ number=31, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='criterion_error', full_name='google.ads.googleads.v0.errors.ErrorCode.criterion_error', index=23,
+ number=32, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='date_error', full_name='google.ads.googleads.v0.errors.ErrorCode.date_error', index=24,
+ number=33, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='date_range_error', full_name='google.ads.googleads.v0.errors.ErrorCode.date_range_error', index=25,
+ number=34, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='distinct_error', full_name='google.ads.googleads.v0.errors.ErrorCode.distinct_error', index=26,
+ number=35, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='feed_attribute_reference_error', full_name='google.ads.googleads.v0.errors.ErrorCode.feed_attribute_reference_error', index=27,
+ number=36, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='function_error', full_name='google.ads.googleads.v0.errors.ErrorCode.function_error', index=28,
+ number=37, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='function_parsing_error', full_name='google.ads.googleads.v0.errors.ErrorCode.function_parsing_error', index=29,
+ number=38, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='id_error', full_name='google.ads.googleads.v0.errors.ErrorCode.id_error', index=30,
+ number=39, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='image_error', full_name='google.ads.googleads.v0.errors.ErrorCode.image_error', index=31,
+ number=40, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='media_bundle_error', full_name='google.ads.googleads.v0.errors.ErrorCode.media_bundle_error', index=32,
+ number=42, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='media_error', full_name='google.ads.googleads.v0.errors.ErrorCode.media_error', index=33,
+ number=43, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='multiplier_error', full_name='google.ads.googleads.v0.errors.ErrorCode.multiplier_error', index=34,
+ number=44, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='new_resource_creation_error', full_name='google.ads.googleads.v0.errors.ErrorCode.new_resource_creation_error', index=35,
+ number=45, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='not_empty_error', full_name='google.ads.googleads.v0.errors.ErrorCode.not_empty_error', index=36,
+ number=46, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='null_error', full_name='google.ads.googleads.v0.errors.ErrorCode.null_error', index=37,
+ number=47, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='operator_error', full_name='google.ads.googleads.v0.errors.ErrorCode.operator_error', index=38,
+ number=48, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='range_error', full_name='google.ads.googleads.v0.errors.ErrorCode.range_error', index=39,
+ number=49, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='recommendation_error', full_name='google.ads.googleads.v0.errors.ErrorCode.recommendation_error', index=40,
+ number=58, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='region_code_error', full_name='google.ads.googleads.v0.errors.ErrorCode.region_code_error', index=41,
+ number=51, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='setting_error', full_name='google.ads.googleads.v0.errors.ErrorCode.setting_error', index=42,
+ number=52, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='string_format_error', full_name='google.ads.googleads.v0.errors.ErrorCode.string_format_error', index=43,
+ number=53, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='string_length_error', full_name='google.ads.googleads.v0.errors.ErrorCode.string_length_error', index=44,
+ number=54, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='operation_access_denied_error', full_name='google.ads.googleads.v0.errors.ErrorCode.operation_access_denied_error', index=45,
+ number=55, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='resource_access_denied_error', full_name='google.ads.googleads.v0.errors.ErrorCode.resource_access_denied_error', index=46,
+ number=56, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='resource_count_limit_exceeded_error', full_name='google.ads.googleads.v0.errors.ErrorCode.resource_count_limit_exceeded_error', index=47,
+ number=57, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ad_group_bid_modifier_error', full_name='google.ads.googleads.v0.errors.ErrorCode.ad_group_bid_modifier_error', index=48,
+ number=59, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='context_error', full_name='google.ads.googleads.v0.errors.ErrorCode.context_error', index=49,
+ number=60, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='field_error', full_name='google.ads.googleads.v0.errors.ErrorCode.field_error', index=50,
+ number=61, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='error_code', full_name='google.ads.googleads.v0.errors.ErrorCode.error_code',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=3747,
+ serialized_end=8802,
+)
+
+
+_ERRORLOCATION_FIELDPATHELEMENT = _descriptor.Descriptor(
+ name='FieldPathElement',
+ full_name='google.ads.googleads.v0.errors.ErrorLocation.FieldPathElement',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='field_name', full_name='google.ads.googleads.v0.errors.ErrorLocation.FieldPathElement.field_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='index', full_name='google.ads.googleads.v0.errors.ErrorLocation.FieldPathElement.index', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=8969,
+ serialized_end=9051,
+)
+
+_ERRORLOCATION = _descriptor.Descriptor(
+ name='ErrorLocation',
+ full_name='google.ads.googleads.v0.errors.ErrorLocation',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='operation_index', full_name='google.ads.googleads.v0.errors.ErrorLocation.operation_index', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='field_path_elements', full_name='google.ads.googleads.v0.errors.ErrorLocation.field_path_elements', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[_ERRORLOCATION_FIELDPATHELEMENT, ],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=8805,
+ serialized_end=9051,
+)
+
+
+_ERRORDETAILS = _descriptor.Descriptor(
+ name='ErrorDetails',
+ full_name='google.ads.googleads.v0.errors.ErrorDetails',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='unpublished_error_code', full_name='google.ads.googleads.v0.errors.ErrorDetails.unpublished_error_code', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='policy_violation_details', full_name='google.ads.googleads.v0.errors.ErrorDetails.policy_violation_details', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=9054,
+ serialized_end=9190,
+)
+
+
+_POLICYVIOLATIONDETAILS = _descriptor.Descriptor(
+ name='PolicyViolationDetails',
+ full_name='google.ads.googleads.v0.errors.PolicyViolationDetails',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='external_policy_description', full_name='google.ads.googleads.v0.errors.PolicyViolationDetails.external_policy_description', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='key', full_name='google.ads.googleads.v0.errors.PolicyViolationDetails.key', index=1,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='external_policy_name', full_name='google.ads.googleads.v0.errors.PolicyViolationDetails.external_policy_name', index=2,
+ number=5, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_exemptible', full_name='google.ads.googleads.v0.errors.PolicyViolationDetails.is_exemptible', index=3,
+ number=6, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=9193,
+ serialized_end=9372,
+)
+
+_GOOGLEADSFAILURE.fields_by_name['errors'].message_type = _GOOGLEADSERROR
+_GOOGLEADSERROR.fields_by_name['error_code'].message_type = _ERRORCODE
+_GOOGLEADSERROR.fields_by_name['trigger'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_value__pb2._VALUE
+_GOOGLEADSERROR.fields_by_name['location'].message_type = _ERRORLOCATION
+_GOOGLEADSERROR.fields_by_name['details'].message_type = _ERRORDETAILS
+_ERRORCODE.fields_by_name['request_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_request__error__pb2._REQUESTERRORENUM_REQUESTERROR
+_ERRORCODE.fields_by_name['bidding_strategy_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_bidding__strategy__error__pb2._BIDDINGSTRATEGYERRORENUM_BIDDINGSTRATEGYERROR
+_ERRORCODE.fields_by_name['url_field_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_url__field__error__pb2._URLFIELDERRORENUM_URLFIELDERROR
+_ERRORCODE.fields_by_name['list_operation_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_list__operation__error__pb2._LISTOPERATIONERRORENUM_LISTOPERATIONERROR
+_ERRORCODE.fields_by_name['query_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_query__error__pb2._QUERYERRORENUM_QUERYERROR
+_ERRORCODE.fields_by_name['mutate_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_mutate__error__pb2._MUTATEERRORENUM_MUTATEERROR
+_ERRORCODE.fields_by_name['field_mask_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_field__mask__error__pb2._FIELDMASKERRORENUM_FIELDMASKERROR
+_ERRORCODE.fields_by_name['authorization_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_authorization__error__pb2._AUTHORIZATIONERRORENUM_AUTHORIZATIONERROR
+_ERRORCODE.fields_by_name['internal_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_internal__error__pb2._INTERNALERRORENUM_INTERNALERROR
+_ERRORCODE.fields_by_name['quota_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_quota__error__pb2._QUOTAERRORENUM_QUOTAERROR
+_ERRORCODE.fields_by_name['ad_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__error__pb2._ADERRORENUM_ADERROR
+_ERRORCODE.fields_by_name['ad_group_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__group__error__pb2._ADGROUPERRORENUM_ADGROUPERROR
+_ERRORCODE.fields_by_name['campaign_budget_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_campaign__budget__error__pb2._CAMPAIGNBUDGETERRORENUM_CAMPAIGNBUDGETERROR
+_ERRORCODE.fields_by_name['campaign_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_campaign__error__pb2._CAMPAIGNERRORENUM_CAMPAIGNERROR
+_ERRORCODE.fields_by_name['authentication_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_authentication__error__pb2._AUTHENTICATIONERRORENUM_AUTHENTICATIONERROR
+_ERRORCODE.fields_by_name['ad_group_criterion_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__group__criterion__error__pb2._ADGROUPCRITERIONERRORENUM_ADGROUPCRITERIONERROR
+_ERRORCODE.fields_by_name['ad_customizer_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__customizer__error__pb2._ADCUSTOMIZERERRORENUM_ADCUSTOMIZERERROR
+_ERRORCODE.fields_by_name['ad_group_ad_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__group__ad__error__pb2._ADGROUPADERRORENUM_ADGROUPADERROR
+_ERRORCODE.fields_by_name['ad_sharing_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__sharing__error__pb2._ADSHARINGERRORENUM_ADSHARINGERROR
+_ERRORCODE.fields_by_name['adx_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_adx__error__pb2._ADXERRORENUM_ADXERROR
+_ERRORCODE.fields_by_name['bidding_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_bidding__error__pb2._BIDDINGERRORENUM_BIDDINGERROR
+_ERRORCODE.fields_by_name['campaign_criterion_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_campaign__criterion__error__pb2._CAMPAIGNCRITERIONERRORENUM_CAMPAIGNCRITERIONERROR
+_ERRORCODE.fields_by_name['collection_size_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_collection__size__error__pb2._COLLECTIONSIZEERRORENUM_COLLECTIONSIZEERROR
+_ERRORCODE.fields_by_name['criterion_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_criterion__error__pb2._CRITERIONERRORENUM_CRITERIONERROR
+_ERRORCODE.fields_by_name['date_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_date__error__pb2._DATEERRORENUM_DATEERROR
+_ERRORCODE.fields_by_name['date_range_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_date__range__error__pb2._DATERANGEERRORENUM_DATERANGEERROR
+_ERRORCODE.fields_by_name['distinct_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_distinct__error__pb2._DISTINCTERRORENUM_DISTINCTERROR
+_ERRORCODE.fields_by_name['feed_attribute_reference_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_feed__attribute__reference__error__pb2._FEEDATTRIBUTEREFERENCEERRORENUM_FEEDATTRIBUTEREFERENCEERROR
+_ERRORCODE.fields_by_name['function_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_function__error__pb2._FUNCTIONERRORENUM_FUNCTIONERROR
+_ERRORCODE.fields_by_name['function_parsing_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_function__parsing__error__pb2._FUNCTIONPARSINGERRORENUM_FUNCTIONPARSINGERROR
+_ERRORCODE.fields_by_name['id_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_id__error__pb2._IDERRORENUM_IDERROR
+_ERRORCODE.fields_by_name['image_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_image__error__pb2._IMAGEERRORENUM_IMAGEERROR
+_ERRORCODE.fields_by_name['media_bundle_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_media__bundle__error__pb2._MEDIABUNDLEERRORENUM_MEDIABUNDLEERROR
+_ERRORCODE.fields_by_name['media_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_media__error__pb2._MEDIAERRORENUM_MEDIAERROR
+_ERRORCODE.fields_by_name['multiplier_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_multiplier__error__pb2._MULTIPLIERERRORENUM_MULTIPLIERERROR
+_ERRORCODE.fields_by_name['new_resource_creation_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_new__resource__creation__error__pb2._NEWRESOURCECREATIONERRORENUM_NEWRESOURCECREATIONERROR
+_ERRORCODE.fields_by_name['not_empty_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_not__empty__error__pb2._NOTEMPTYERRORENUM_NOTEMPTYERROR
+_ERRORCODE.fields_by_name['null_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_null__error__pb2._NULLERRORENUM_NULLERROR
+_ERRORCODE.fields_by_name['operator_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_operator__error__pb2._OPERATORERRORENUM_OPERATORERROR
+_ERRORCODE.fields_by_name['range_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_range__error__pb2._RANGEERRORENUM_RANGEERROR
+_ERRORCODE.fields_by_name['recommendation_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_recommendation__error__pb2._RECOMMENDATIONERRORENUM_RECOMMENDATIONERROR
+_ERRORCODE.fields_by_name['region_code_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_region__code__error__pb2._REGIONCODEERRORENUM_REGIONCODEERROR
+_ERRORCODE.fields_by_name['setting_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_setting__error__pb2._SETTINGERRORENUM_SETTINGERROR
+_ERRORCODE.fields_by_name['string_format_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_string__format__error__pb2._STRINGFORMATERRORENUM_STRINGFORMATERROR
+_ERRORCODE.fields_by_name['string_length_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_string__length__error__pb2._STRINGLENGTHERRORENUM_STRINGLENGTHERROR
+_ERRORCODE.fields_by_name['operation_access_denied_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_operation__access__denied__error__pb2._OPERATIONACCESSDENIEDERRORENUM_OPERATIONACCESSDENIEDERROR
+_ERRORCODE.fields_by_name['resource_access_denied_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_resource__access__denied__error__pb2._RESOURCEACCESSDENIEDERRORENUM_RESOURCEACCESSDENIEDERROR
+_ERRORCODE.fields_by_name['resource_count_limit_exceeded_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_resource__count__limit__exceeded__error__pb2._RESOURCECOUNTLIMITEXCEEDEDERRORENUM_RESOURCECOUNTLIMITEXCEEDEDERROR
+_ERRORCODE.fields_by_name['ad_group_bid_modifier_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_ad__group__bid__modifier__error__pb2._ADGROUPBIDMODIFIERERRORENUM_ADGROUPBIDMODIFIERERROR
+_ERRORCODE.fields_by_name['context_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_context__error__pb2._CONTEXTERRORENUM_CONTEXTERROR
+_ERRORCODE.fields_by_name['field_error'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_errors_dot_field__error__pb2._FIELDERRORENUM_FIELDERROR
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['request_error'])
+_ERRORCODE.fields_by_name['request_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['bidding_strategy_error'])
+_ERRORCODE.fields_by_name['bidding_strategy_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['url_field_error'])
+_ERRORCODE.fields_by_name['url_field_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['list_operation_error'])
+_ERRORCODE.fields_by_name['list_operation_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['query_error'])
+_ERRORCODE.fields_by_name['query_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['mutate_error'])
+_ERRORCODE.fields_by_name['mutate_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['field_mask_error'])
+_ERRORCODE.fields_by_name['field_mask_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['authorization_error'])
+_ERRORCODE.fields_by_name['authorization_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['internal_error'])
+_ERRORCODE.fields_by_name['internal_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['quota_error'])
+_ERRORCODE.fields_by_name['quota_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['ad_error'])
+_ERRORCODE.fields_by_name['ad_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['ad_group_error'])
+_ERRORCODE.fields_by_name['ad_group_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['campaign_budget_error'])
+_ERRORCODE.fields_by_name['campaign_budget_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['campaign_error'])
+_ERRORCODE.fields_by_name['campaign_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['authentication_error'])
+_ERRORCODE.fields_by_name['authentication_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['ad_group_criterion_error'])
+_ERRORCODE.fields_by_name['ad_group_criterion_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['ad_customizer_error'])
+_ERRORCODE.fields_by_name['ad_customizer_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['ad_group_ad_error'])
+_ERRORCODE.fields_by_name['ad_group_ad_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['ad_sharing_error'])
+_ERRORCODE.fields_by_name['ad_sharing_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['adx_error'])
+_ERRORCODE.fields_by_name['adx_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['bidding_error'])
+_ERRORCODE.fields_by_name['bidding_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['campaign_criterion_error'])
+_ERRORCODE.fields_by_name['campaign_criterion_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['collection_size_error'])
+_ERRORCODE.fields_by_name['collection_size_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['criterion_error'])
+_ERRORCODE.fields_by_name['criterion_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['date_error'])
+_ERRORCODE.fields_by_name['date_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['date_range_error'])
+_ERRORCODE.fields_by_name['date_range_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['distinct_error'])
+_ERRORCODE.fields_by_name['distinct_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['feed_attribute_reference_error'])
+_ERRORCODE.fields_by_name['feed_attribute_reference_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['function_error'])
+_ERRORCODE.fields_by_name['function_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['function_parsing_error'])
+_ERRORCODE.fields_by_name['function_parsing_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['id_error'])
+_ERRORCODE.fields_by_name['id_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['image_error'])
+_ERRORCODE.fields_by_name['image_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['media_bundle_error'])
+_ERRORCODE.fields_by_name['media_bundle_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['media_error'])
+_ERRORCODE.fields_by_name['media_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['multiplier_error'])
+_ERRORCODE.fields_by_name['multiplier_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['new_resource_creation_error'])
+_ERRORCODE.fields_by_name['new_resource_creation_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['not_empty_error'])
+_ERRORCODE.fields_by_name['not_empty_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['null_error'])
+_ERRORCODE.fields_by_name['null_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['operator_error'])
+_ERRORCODE.fields_by_name['operator_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['range_error'])
+_ERRORCODE.fields_by_name['range_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['recommendation_error'])
+_ERRORCODE.fields_by_name['recommendation_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['region_code_error'])
+_ERRORCODE.fields_by_name['region_code_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['setting_error'])
+_ERRORCODE.fields_by_name['setting_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['string_format_error'])
+_ERRORCODE.fields_by_name['string_format_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['string_length_error'])
+_ERRORCODE.fields_by_name['string_length_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['operation_access_denied_error'])
+_ERRORCODE.fields_by_name['operation_access_denied_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['resource_access_denied_error'])
+_ERRORCODE.fields_by_name['resource_access_denied_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['resource_count_limit_exceeded_error'])
+_ERRORCODE.fields_by_name['resource_count_limit_exceeded_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['ad_group_bid_modifier_error'])
+_ERRORCODE.fields_by_name['ad_group_bid_modifier_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['context_error'])
+_ERRORCODE.fields_by_name['context_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORCODE.oneofs_by_name['error_code'].fields.append(
+ _ERRORCODE.fields_by_name['field_error'])
+_ERRORCODE.fields_by_name['field_error'].containing_oneof = _ERRORCODE.oneofs_by_name['error_code']
+_ERRORLOCATION_FIELDPATHELEMENT.fields_by_name['index'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ERRORLOCATION_FIELDPATHELEMENT.containing_type = _ERRORLOCATION
+_ERRORLOCATION.fields_by_name['operation_index'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ERRORLOCATION.fields_by_name['field_path_elements'].message_type = _ERRORLOCATION_FIELDPATHELEMENT
+_ERRORDETAILS.fields_by_name['policy_violation_details'].message_type = _POLICYVIOLATIONDETAILS
+_POLICYVIOLATIONDETAILS.fields_by_name['key'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_policy__pb2._POLICYVIOLATIONKEY
+DESCRIPTOR.message_types_by_name['GoogleAdsFailure'] = _GOOGLEADSFAILURE
+DESCRIPTOR.message_types_by_name['GoogleAdsError'] = _GOOGLEADSERROR
+DESCRIPTOR.message_types_by_name['ErrorCode'] = _ERRORCODE
+DESCRIPTOR.message_types_by_name['ErrorLocation'] = _ERRORLOCATION
+DESCRIPTOR.message_types_by_name['ErrorDetails'] = _ERRORDETAILS
+DESCRIPTOR.message_types_by_name['PolicyViolationDetails'] = _POLICYVIOLATIONDETAILS
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+GoogleAdsFailure = _reflection.GeneratedProtocolMessageType('GoogleAdsFailure', (_message.Message,), dict(
+ DESCRIPTOR = _GOOGLEADSFAILURE,
+ __module__ = 'google.ads.googleads_v0.proto.errors.errors_pb2'
+ ,
+ __doc__ = """Describes how a GoogleAds API call failed. It's returned inside
+ google.rpc.Status.details when a call fails.
+
+
+ Attributes:
+ errors:
+ The list of errors that occurred.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.GoogleAdsFailure)
+ ))
+_sym_db.RegisterMessage(GoogleAdsFailure)
+
+GoogleAdsError = _reflection.GeneratedProtocolMessageType('GoogleAdsError', (_message.Message,), dict(
+ DESCRIPTOR = _GOOGLEADSERROR,
+ __module__ = 'google.ads.googleads_v0.proto.errors.errors_pb2'
+ ,
+ __doc__ = """GoogleAds-specific error.
+
+
+ Attributes:
+ error_code:
+ An enum value that indicates which error occurred.
+ message:
+ A human-readable description of the error.
+ trigger:
+ The value that triggered the error.
+ location:
+ Describes the part of the request proto that caused the error.
+ details:
+ Additional error details, which are returned by certain error
+ codes. Most error codes do not include details.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.GoogleAdsError)
+ ))
+_sym_db.RegisterMessage(GoogleAdsError)
+
+ErrorCode = _reflection.GeneratedProtocolMessageType('ErrorCode', (_message.Message,), dict(
+ DESCRIPTOR = _ERRORCODE,
+ __module__ = 'google.ads.googleads_v0.proto.errors.errors_pb2'
+ ,
+ __doc__ = """The error reason represented by type and enum.
+
+
+ Attributes:
+ error_code:
+ The list of error enums
+ request_error:
+ An error caused by the request
+ bidding_strategy_error:
+ An error with a Bidding Strategy mutate.
+ url_field_error:
+ An error with a URL field mutate.
+ list_operation_error:
+ An error with a list operation.
+ query_error:
+ An error with an AWQL query
+ mutate_error:
+ An error with a mutate
+ field_mask_error:
+ An error with a field mask
+ authorization_error:
+ An error encountered when trying to authorize a user.
+ internal_error:
+ An unexpected server-side error.
+ quota_error:
+ An error with the amonut of quota remaining.
+ ad_error:
+ An error with an Ad Group Ad mutate.
+ ad_group_error:
+ An error with an Ad Group mutate.
+ campaign_budget_error:
+ An error with a Campaign Budget mutate.
+ campaign_error:
+ An error with a Campaign mutate.
+ authentication_error:
+ Indicates failure to properly authenticate user.
+ ad_group_criterion_error:
+ Indicates failure to properly authenticate user.
+ ad_customizer_error:
+ The reasons for the ad customizer error
+ ad_group_ad_error:
+ The reasons for the ad group ad error
+ ad_sharing_error:
+ The reasons for the ad sharing error
+ adx_error:
+ The reasons for the adx error
+ bidding_error:
+ The reasons for the bidding errors
+ campaign_criterion_error:
+ The reasons for the campaign criterion error
+ collection_size_error:
+ The reasons for the collection size error
+ criterion_error:
+ The reasons for the criterion error
+ date_error:
+ The reasons for the date error
+ date_range_error:
+ The reasons for the date range error
+ distinct_error:
+ The reasons for the distinct error
+ feed_attribute_reference_error:
+ The reasons for the feed attribute reference error
+ function_error:
+ The reasons for the function error
+ function_parsing_error:
+ The reasons for the function parsing error
+ id_error:
+ The reasons for the id error
+ image_error:
+ The reasons for the image error
+ media_bundle_error:
+ The reasons for the media bundle error
+ media_error:
+ The reasons for the media error
+ multiplier_error:
+ The reasons for the multiplier error
+ new_resource_creation_error:
+ The reasons for the new resource creation error
+ not_empty_error:
+ The reasons for the not empty error
+ null_error:
+ The reasons for the null error
+ operator_error:
+ The reasons for the operator error
+ range_error:
+ The reasons for the range error
+ recommendation_error:
+ The reasons for error in applying a recommendation
+ region_code_error:
+ The reasons for the region code error
+ setting_error:
+ The reasons for the setting error
+ string_format_error:
+ The reasons for the string format error
+ string_length_error:
+ The reasons for the string length error
+ operation_access_denied_error:
+ The reasons for the operation access denied error
+ resource_access_denied_error:
+ The reasons for the resource access denied error
+ resource_count_limit_exceeded_error:
+ The reasons for the resource count limit exceeded error
+ ad_group_bid_modifier_error:
+ The reasons for the ad group bid modifier error
+ context_error:
+ The reasons for the context error
+ field_error:
+ The reasons for the field error
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.ErrorCode)
+ ))
+_sym_db.RegisterMessage(ErrorCode)
+
+ErrorLocation = _reflection.GeneratedProtocolMessageType('ErrorLocation', (_message.Message,), dict(
+
+ FieldPathElement = _reflection.GeneratedProtocolMessageType('FieldPathElement', (_message.Message,), dict(
+ DESCRIPTOR = _ERRORLOCATION_FIELDPATHELEMENT,
+ __module__ = 'google.ads.googleads_v0.proto.errors.errors_pb2'
+ ,
+ __doc__ = """A part of a field path.
+
+
+ Attributes:
+ field_name:
+ The name of a field
+ index:
+ If field\_name is a list, this is the element that failed
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.ErrorLocation.FieldPathElement)
+ ))
+ ,
+ DESCRIPTOR = _ERRORLOCATION,
+ __module__ = 'google.ads.googleads_v0.proto.errors.errors_pb2'
+ ,
+ __doc__ = """Describes the part of the request proto that caused the error.
+
+
+ Attributes:
+ operation_index:
+ The mutate operation that failed
+ field_path_elements:
+ A field path that indicates which field was invalid in the
+ resource being mutated.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.ErrorLocation)
+ ))
+_sym_db.RegisterMessage(ErrorLocation)
+_sym_db.RegisterMessage(ErrorLocation.FieldPathElement)
+
+ErrorDetails = _reflection.GeneratedProtocolMessageType('ErrorDetails', (_message.Message,), dict(
+ DESCRIPTOR = _ERRORDETAILS,
+ __module__ = 'google.ads.googleads_v0.proto.errors.errors_pb2'
+ ,
+ __doc__ = """Additional error details.
+
+
+ Attributes:
+ unpublished_error_code:
+ The error code that should have been returned, but wasn't.
+ This is used when the error code is
+ InternalError.ERROR\_CODE\_NOT\_PUBLISHED.
+ policy_violation_details:
+ Describes an ad policy violation.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.ErrorDetails)
+ ))
+_sym_db.RegisterMessage(ErrorDetails)
+
+PolicyViolationDetails = _reflection.GeneratedProtocolMessageType('PolicyViolationDetails', (_message.Message,), dict(
+ DESCRIPTOR = _POLICYVIOLATIONDETAILS,
+ __module__ = 'google.ads.googleads_v0.proto.errors.errors_pb2'
+ ,
+ __doc__ = """Error returned as part of a mutate response. This error indicates single
+ policy violation by some text in one of the fields.
+
+
+ Attributes:
+ external_policy_description:
+ Human readable description of policy violation.
+ key:
+ Unique identifier for this violation. If policy is exemptible,
+ this key may be used to request exemption.
+ external_policy_name:
+ Human readable name of the policy.
+ is_exemptible:
+ Whether user can file an exemption request for this violation.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.PolicyViolationDetails)
+ ))
+_sym_db.RegisterMessage(PolicyViolationDetails)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\013ErrorsProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/errors_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/errors_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/errors_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/feed_attribute_reference_error_pb2.py b/google/ads/google_ads/v0/proto/errors/feed_attribute_reference_error_pb2.py
new file mode 100644
index 000000000..8e7aa3d78
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/feed_attribute_reference_error_pb2.py
@@ -0,0 +1,103 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/feed_attribute_reference_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/feed_attribute_reference_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\nIgoogle/ads/googleads_v0/proto/errors/feed_attribute_reference_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xba\x01\n\x1f\x46\x65\x65\x64\x41ttributeReferenceErrorEnum\"\x96\x01\n\x1b\x46\x65\x65\x64\x41ttributeReferenceError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12!\n\x1d\x43\x41NNOT_REFERENCE_DELETED_FEED\x10\x02\x12\x15\n\x11INVALID_FEED_NAME\x10\x03\x12\x1f\n\x1bINVALID_FEED_ATTRIBUTE_NAME\x10\x04\x42\xd6\x01\n\"com.google.ads.googleads.v0.errorsB FeedAttributeReferenceErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_FEEDATTRIBUTEREFERENCEERRORENUM_FEEDATTRIBUTEREFERENCEERROR = _descriptor.EnumDescriptor(
+ name='FeedAttributeReferenceError',
+ full_name='google.ads.googleads.v0.errors.FeedAttributeReferenceErrorEnum.FeedAttributeReferenceError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_REFERENCE_DELETED_FEED', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_FEED_NAME', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_FEED_ATTRIBUTE_NAME', index=4, number=4,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=146,
+ serialized_end=296,
+)
+_sym_db.RegisterEnumDescriptor(_FEEDATTRIBUTEREFERENCEERRORENUM_FEEDATTRIBUTEREFERENCEERROR)
+
+
+_FEEDATTRIBUTEREFERENCEERRORENUM = _descriptor.Descriptor(
+ name='FeedAttributeReferenceErrorEnum',
+ full_name='google.ads.googleads.v0.errors.FeedAttributeReferenceErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _FEEDATTRIBUTEREFERENCEERRORENUM_FEEDATTRIBUTEREFERENCEERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=110,
+ serialized_end=296,
+)
+
+_FEEDATTRIBUTEREFERENCEERRORENUM_FEEDATTRIBUTEREFERENCEERROR.containing_type = _FEEDATTRIBUTEREFERENCEERRORENUM
+DESCRIPTOR.message_types_by_name['FeedAttributeReferenceErrorEnum'] = _FEEDATTRIBUTEREFERENCEERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+FeedAttributeReferenceErrorEnum = _reflection.GeneratedProtocolMessageType('FeedAttributeReferenceErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _FEEDATTRIBUTEREFERENCEERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.feed_attribute_reference_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible feed attribute reference errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.FeedAttributeReferenceErrorEnum)
+ ))
+_sym_db.RegisterMessage(FeedAttributeReferenceErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB FeedAttributeReferenceErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/feed_attribute_reference_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/feed_attribute_reference_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/feed_attribute_reference_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/field_error_pb2.py b/google/ads/google_ads/v0/proto/errors/field_error_pb2.py
new file mode 100644
index 000000000..a2152a5e1
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/field_error_pb2.py
@@ -0,0 +1,111 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/field_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/field_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n6google/ads/googleads_v0/proto/errors/field_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xa8\x01\n\x0e\x46ieldErrorEnum\"\x95\x01\n\nFieldError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x0c\n\x08REQUIRED\x10\x02\x12\x13\n\x0fIMMUTABLE_FIELD\x10\x03\x12\x11\n\rINVALID_VALUE\x10\x04\x12\x17\n\x13VALUE_MUST_BE_UNSET\x10\x05\x12\x1a\n\x16REQUIRED_NONEMPTY_LIST\x10\x06\x42\xc5\x01\n\"com.google.ads.googleads.v0.errorsB\x0f\x46ieldErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_FIELDERRORENUM_FIELDERROR = _descriptor.EnumDescriptor(
+ name='FieldError',
+ full_name='google.ads.googleads.v0.errors.FieldErrorEnum.FieldError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REQUIRED', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='IMMUTABLE_FIELD', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_VALUE', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='VALUE_MUST_BE_UNSET', index=5, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REQUIRED_NONEMPTY_LIST', index=6, number=6,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=110,
+ serialized_end=259,
+)
+_sym_db.RegisterEnumDescriptor(_FIELDERRORENUM_FIELDERROR)
+
+
+_FIELDERRORENUM = _descriptor.Descriptor(
+ name='FieldErrorEnum',
+ full_name='google.ads.googleads.v0.errors.FieldErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _FIELDERRORENUM_FIELDERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=91,
+ serialized_end=259,
+)
+
+_FIELDERRORENUM_FIELDERROR.containing_type = _FIELDERRORENUM
+DESCRIPTOR.message_types_by_name['FieldErrorEnum'] = _FIELDERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+FieldErrorEnum = _reflection.GeneratedProtocolMessageType('FieldErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _FIELDERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.field_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible field errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.FieldErrorEnum)
+ ))
+_sym_db.RegisterMessage(FieldErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\017FieldErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/field_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/field_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/field_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/field_mask_error_pb2.py b/google/ads/google_ads/v0/proto/errors/field_mask_error_pb2.py
new file mode 100644
index 000000000..76ec0433c
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/field_mask_error_pb2.py
@@ -0,0 +1,107 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/field_mask_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/field_mask_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n;google/ads/googleads_v0/proto/errors/field_mask_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xa7\x01\n\x12\x46ieldMaskErrorEnum\"\x90\x01\n\x0e\x46ieldMaskError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x16\n\x12\x46IELD_MASK_MISSING\x10\x05\x12\x1a\n\x16\x46IELD_MASK_NOT_ALLOWED\x10\x04\x12\x13\n\x0f\x46IELD_NOT_FOUND\x10\x02\x12\x17\n\x13\x46IELD_HAS_SUBFIELDS\x10\x03\x42\xc9\x01\n\"com.google.ads.googleads.v0.errorsB\x13\x46ieldMaskErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_FIELDMASKERRORENUM_FIELDMASKERROR = _descriptor.EnumDescriptor(
+ name='FieldMaskError',
+ full_name='google.ads.googleads.v0.errors.FieldMaskErrorEnum.FieldMaskError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FIELD_MASK_MISSING', index=2, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FIELD_MASK_NOT_ALLOWED', index=3, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FIELD_NOT_FOUND', index=4, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FIELD_HAS_SUBFIELDS', index=5, number=3,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=119,
+ serialized_end=263,
+)
+_sym_db.RegisterEnumDescriptor(_FIELDMASKERRORENUM_FIELDMASKERROR)
+
+
+_FIELDMASKERRORENUM = _descriptor.Descriptor(
+ name='FieldMaskErrorEnum',
+ full_name='google.ads.googleads.v0.errors.FieldMaskErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _FIELDMASKERRORENUM_FIELDMASKERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=96,
+ serialized_end=263,
+)
+
+_FIELDMASKERRORENUM_FIELDMASKERROR.containing_type = _FIELDMASKERRORENUM
+DESCRIPTOR.message_types_by_name['FieldMaskErrorEnum'] = _FIELDMASKERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+FieldMaskErrorEnum = _reflection.GeneratedProtocolMessageType('FieldMaskErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _FIELDMASKERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.field_mask_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible field mask errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.FieldMaskErrorEnum)
+ ))
+_sym_db.RegisterMessage(FieldMaskErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\023FieldMaskErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/field_mask_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/field_mask_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/field_mask_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/function_error_pb2.py b/google/ads/google_ads/v0/proto/errors/function_error_pb2.py
new file mode 100644
index 000000000..f3dfe726b
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/function_error_pb2.py
@@ -0,0 +1,155 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/function_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/function_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n9google/ads/googleads_v0/proto/errors/function_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xc1\x04\n\x11\x46unctionErrorEnum\"\xab\x04\n\rFunctionError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x1b\n\x17INVALID_FUNCTION_FORMAT\x10\x02\x12\x16\n\x12\x44\x41TA_TYPE_MISMATCH\x10\x03\x12 \n\x1cINVALID_CONJUNCTION_OPERANDS\x10\x04\x12\x1e\n\x1aINVALID_NUMBER_OF_OPERANDS\x10\x05\x12\x18\n\x14INVALID_OPERAND_TYPE\x10\x06\x12\x14\n\x10INVALID_OPERATOR\x10\x07\x12 \n\x1cINVALID_REQUEST_CONTEXT_TYPE\x10\x08\x12)\n%INVALID_FUNCTION_FOR_CALL_PLACEHOLDER\x10\t\x12$\n INVALID_FUNCTION_FOR_PLACEHOLDER\x10\n\x12\x13\n\x0fINVALID_OPERAND\x10\x0b\x12\"\n\x1eMISSING_CONSTANT_OPERAND_VALUE\x10\x0c\x12\"\n\x1eINVALID_CONSTANT_OPERAND_VALUE\x10\r\x12\x13\n\x0fINVALID_NESTING\x10\x0e\x12#\n\x1fMULTIPLE_FEED_IDS_NOT_SUPPORTED\x10\x0f\x12/\n+INVALID_FUNCTION_FOR_FEED_WITH_FIXED_SCHEMA\x10\x10\x12\x1a\n\x16INVALID_ATTRIBUTE_NAME\x10\x11\x42\xc8\x01\n\"com.google.ads.googleads.v0.errorsB\x12\x46unctionErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_FUNCTIONERRORENUM_FUNCTIONERROR = _descriptor.EnumDescriptor(
+ name='FunctionError',
+ full_name='google.ads.googleads.v0.errors.FunctionErrorEnum.FunctionError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_FUNCTION_FORMAT', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DATA_TYPE_MISMATCH', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_CONJUNCTION_OPERANDS', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_NUMBER_OF_OPERANDS', index=5, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_OPERAND_TYPE', index=6, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_OPERATOR', index=7, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_REQUEST_CONTEXT_TYPE', index=8, number=8,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_FUNCTION_FOR_CALL_PLACEHOLDER', index=9, number=9,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_FUNCTION_FOR_PLACEHOLDER', index=10, number=10,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_OPERAND', index=11, number=11,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_CONSTANT_OPERAND_VALUE', index=12, number=12,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_CONSTANT_OPERAND_VALUE', index=13, number=13,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_NESTING', index=14, number=14,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MULTIPLE_FEED_IDS_NOT_SUPPORTED', index=15, number=15,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_FUNCTION_FOR_FEED_WITH_FIXED_SCHEMA', index=16, number=16,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_ATTRIBUTE_NAME', index=17, number=17,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=116,
+ serialized_end=671,
+)
+_sym_db.RegisterEnumDescriptor(_FUNCTIONERRORENUM_FUNCTIONERROR)
+
+
+_FUNCTIONERRORENUM = _descriptor.Descriptor(
+ name='FunctionErrorEnum',
+ full_name='google.ads.googleads.v0.errors.FunctionErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _FUNCTIONERRORENUM_FUNCTIONERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=94,
+ serialized_end=671,
+)
+
+_FUNCTIONERRORENUM_FUNCTIONERROR.containing_type = _FUNCTIONERRORENUM
+DESCRIPTOR.message_types_by_name['FunctionErrorEnum'] = _FUNCTIONERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+FunctionErrorEnum = _reflection.GeneratedProtocolMessageType('FunctionErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _FUNCTIONERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.function_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible function errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.FunctionErrorEnum)
+ ))
+_sym_db.RegisterMessage(FunctionErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\022FunctionErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/function_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/function_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/function_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/function_parsing_error_pb2.py b/google/ads/google_ads/v0/proto/errors/function_parsing_error_pb2.py
new file mode 100644
index 000000000..312b3e586
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/function_parsing_error_pb2.py
@@ -0,0 +1,135 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/function_parsing_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/function_parsing_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\nAgoogle/ads/googleads_v0/proto/errors/function_parsing_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\x82\x03\n\x18\x46unctionParsingErrorEnum\"\xe5\x02\n\x14\x46unctionParsingError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x11\n\rNO_MORE_INPUT\x10\x02\x12\x16\n\x12\x45XPECTED_CHARACTER\x10\x03\x12\x18\n\x14UNEXPECTED_SEPARATOR\x10\x04\x12\x1a\n\x16UNMATCHED_LEFT_BRACKET\x10\x05\x12\x1b\n\x17UNMATCHED_RIGHT_BRACKET\x10\x06\x12\x1d\n\x19TOO_MANY_NESTED_FUNCTIONS\x10\x07\x12\x1e\n\x1aMISSING_RIGHT_HAND_OPERAND\x10\x08\x12\x19\n\x15INVALID_OPERATOR_NAME\x10\t\x12/\n+FEED_ATTRIBUTE_OPERAND_ARGUMENT_NOT_INTEGER\x10\n\x12\x0f\n\x0bNO_OPERANDS\x10\x0b\x12\x15\n\x11TOO_MANY_OPERANDS\x10\x0c\x42\xcf\x01\n\"com.google.ads.googleads.v0.errorsB\x19\x46unctionParsingErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_FUNCTIONPARSINGERRORENUM_FUNCTIONPARSINGERROR = _descriptor.EnumDescriptor(
+ name='FunctionParsingError',
+ full_name='google.ads.googleads.v0.errors.FunctionParsingErrorEnum.FunctionParsingError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='NO_MORE_INPUT', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EXPECTED_CHARACTER', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNEXPECTED_SEPARATOR', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNMATCHED_LEFT_BRACKET', index=5, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNMATCHED_RIGHT_BRACKET', index=6, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_MANY_NESTED_FUNCTIONS', index=7, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_RIGHT_HAND_OPERAND', index=8, number=8,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_OPERATOR_NAME', index=9, number=9,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FEED_ATTRIBUTE_OPERAND_ARGUMENT_NOT_INTEGER', index=10, number=10,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='NO_OPERANDS', index=11, number=11,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_MANY_OPERANDS', index=12, number=12,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=131,
+ serialized_end=488,
+)
+_sym_db.RegisterEnumDescriptor(_FUNCTIONPARSINGERRORENUM_FUNCTIONPARSINGERROR)
+
+
+_FUNCTIONPARSINGERRORENUM = _descriptor.Descriptor(
+ name='FunctionParsingErrorEnum',
+ full_name='google.ads.googleads.v0.errors.FunctionParsingErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _FUNCTIONPARSINGERRORENUM_FUNCTIONPARSINGERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=102,
+ serialized_end=488,
+)
+
+_FUNCTIONPARSINGERRORENUM_FUNCTIONPARSINGERROR.containing_type = _FUNCTIONPARSINGERRORENUM
+DESCRIPTOR.message_types_by_name['FunctionParsingErrorEnum'] = _FUNCTIONPARSINGERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+FunctionParsingErrorEnum = _reflection.GeneratedProtocolMessageType('FunctionParsingErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _FUNCTIONPARSINGERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.function_parsing_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible function parsing errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.FunctionParsingErrorEnum)
+ ))
+_sym_db.RegisterMessage(FunctionParsingErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\031FunctionParsingErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/function_parsing_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/function_parsing_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/function_parsing_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/id_error_pb2.py b/google/ads/google_ads/v0/proto/errors/id_error_pb2.py
new file mode 100644
index 000000000..28dadf3b8
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/id_error_pb2.py
@@ -0,0 +1,95 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/id_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/id_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n3google/ads/googleads_v0/proto/errors/id_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"E\n\x0bIdErrorEnum\"6\n\x07IdError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\r\n\tNOT_FOUND\x10\x02\x42\xc2\x01\n\"com.google.ads.googleads.v0.errorsB\x0cIdErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_IDERRORENUM_IDERROR = _descriptor.EnumDescriptor(
+ name='IdError',
+ full_name='google.ads.googleads.v0.errors.IdErrorEnum.IdError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='NOT_FOUND', index=2, number=2,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=102,
+ serialized_end=156,
+)
+_sym_db.RegisterEnumDescriptor(_IDERRORENUM_IDERROR)
+
+
+_IDERRORENUM = _descriptor.Descriptor(
+ name='IdErrorEnum',
+ full_name='google.ads.googleads.v0.errors.IdErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _IDERRORENUM_IDERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=87,
+ serialized_end=156,
+)
+
+_IDERRORENUM_IDERROR.containing_type = _IDERRORENUM
+DESCRIPTOR.message_types_by_name['IdErrorEnum'] = _IDERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+IdErrorEnum = _reflection.GeneratedProtocolMessageType('IdErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _IDERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.id_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible id errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.IdErrorEnum)
+ ))
+_sym_db.RegisterMessage(IdErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\014IdErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/id_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/id_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/id_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/image_error_pb2.py b/google/ads/google_ads/v0/proto/errors/image_error_pb2.py
new file mode 100644
index 000000000..6eafbf5d8
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/image_error_pb2.py
@@ -0,0 +1,239 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/image_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/image_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n6google/ads/googleads_v0/proto/errors/image_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\x8a\x08\n\x0eImageErrorEnum\"\xf7\x07\n\nImageError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x11\n\rINVALID_IMAGE\x10\x02\x12\x11\n\rSTORAGE_ERROR\x10\x03\x12\x0f\n\x0b\x42\x41\x44_REQUEST\x10\x04\x12\x13\n\x0fUNEXPECTED_SIZE\x10\x05\x12\x18\n\x14\x41NIMATED_NOT_ALLOWED\x10\x06\x12\x16\n\x12\x41NIMATION_TOO_LONG\x10\x07\x12\x10\n\x0cSERVER_ERROR\x10\x08\x12\x19\n\x15\x43MYK_JPEG_NOT_ALLOWED\x10\t\x12\x15\n\x11\x46LASH_NOT_ALLOWED\x10\n\x12\x1a\n\x16\x46LASH_WITHOUT_CLICKTAG\x10\x0b\x12&\n\"FLASH_ERROR_AFTER_FIXING_CLICK_TAG\x10\x0c\x12\x1a\n\x16\x41NIMATED_VISUAL_EFFECT\x10\r\x12\x0f\n\x0b\x46LASH_ERROR\x10\x0e\x12\x12\n\x0eLAYOUT_PROBLEM\x10\x0f\x12\x1e\n\x1aPROBLEM_READING_IMAGE_FILE\x10\x10\x12\x17\n\x13\x45RROR_STORING_IMAGE\x10\x11\x12\x1c\n\x18\x41SPECT_RATIO_NOT_ALLOWED\x10\x12\x12\x1d\n\x19\x46LASH_HAS_NETWORK_OBJECTS\x10\x13\x12\x1d\n\x19\x46LASH_HAS_NETWORK_METHODS\x10\x14\x12\x11\n\rFLASH_HAS_URL\x10\x15\x12\x1c\n\x18\x46LASH_HAS_MOUSE_TRACKING\x10\x16\x12\x18\n\x14\x46LASH_HAS_RANDOM_NUM\x10\x17\x12\x16\n\x12\x46LASH_SELF_TARGETS\x10\x18\x12\x1b\n\x17\x46LASH_BAD_GETURL_TARGET\x10\x19\x12\x1f\n\x1b\x46LASH_VERSION_NOT_SUPPORTED\x10\x1a\x12&\n\"FLASH_WITHOUT_HARD_CODED_CLICK_URL\x10\x1b\x12\x16\n\x12INVALID_FLASH_FILE\x10\x1c\x12$\n FAILED_TO_FIX_CLICK_TAG_IN_FLASH\x10\x1d\x12$\n FLASH_ACCESSES_NETWORK_RESOURCES\x10\x1e\x12\x1a\n\x16\x46LASH_EXTERNAL_JS_CALL\x10\x1f\x12\x1a\n\x16\x46LASH_EXTERNAL_FS_CALL\x10 \x12\x12\n\x0e\x46ILE_TOO_LARGE\x10!\x12\x18\n\x14IMAGE_DATA_TOO_LARGE\x10\"\x12\x1a\n\x16IMAGE_PROCESSING_ERROR\x10#\x12\x13\n\x0fIMAGE_TOO_SMALL\x10$\x12\x11\n\rINVALID_INPUT\x10%\x12\x18\n\x14PROBLEM_READING_FILE\x10&B\xc5\x01\n\"com.google.ads.googleads.v0.errorsB\x0fImageErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_IMAGEERRORENUM_IMAGEERROR = _descriptor.EnumDescriptor(
+ name='ImageError',
+ full_name='google.ads.googleads.v0.errors.ImageErrorEnum.ImageError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_IMAGE', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='STORAGE_ERROR', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BAD_REQUEST', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNEXPECTED_SIZE', index=5, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ANIMATED_NOT_ALLOWED', index=6, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ANIMATION_TOO_LONG', index=7, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVER_ERROR', index=8, number=8,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CMYK_JPEG_NOT_ALLOWED', index=9, number=9,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FLASH_NOT_ALLOWED', index=10, number=10,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FLASH_WITHOUT_CLICKTAG', index=11, number=11,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FLASH_ERROR_AFTER_FIXING_CLICK_TAG', index=12, number=12,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ANIMATED_VISUAL_EFFECT', index=13, number=13,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FLASH_ERROR', index=14, number=14,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LAYOUT_PROBLEM', index=15, number=15,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROBLEM_READING_IMAGE_FILE', index=16, number=16,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ERROR_STORING_IMAGE', index=17, number=17,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ASPECT_RATIO_NOT_ALLOWED', index=18, number=18,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FLASH_HAS_NETWORK_OBJECTS', index=19, number=19,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FLASH_HAS_NETWORK_METHODS', index=20, number=20,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FLASH_HAS_URL', index=21, number=21,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FLASH_HAS_MOUSE_TRACKING', index=22, number=22,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FLASH_HAS_RANDOM_NUM', index=23, number=23,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FLASH_SELF_TARGETS', index=24, number=24,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FLASH_BAD_GETURL_TARGET', index=25, number=25,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FLASH_VERSION_NOT_SUPPORTED', index=26, number=26,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FLASH_WITHOUT_HARD_CODED_CLICK_URL', index=27, number=27,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_FLASH_FILE', index=28, number=28,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FAILED_TO_FIX_CLICK_TAG_IN_FLASH', index=29, number=29,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FLASH_ACCESSES_NETWORK_RESOURCES', index=30, number=30,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FLASH_EXTERNAL_JS_CALL', index=31, number=31,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FLASH_EXTERNAL_FS_CALL', index=32, number=32,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FILE_TOO_LARGE', index=33, number=33,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='IMAGE_DATA_TOO_LARGE', index=34, number=34,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='IMAGE_PROCESSING_ERROR', index=35, number=35,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='IMAGE_TOO_SMALL', index=36, number=36,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_INPUT', index=37, number=37,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROBLEM_READING_FILE', index=38, number=38,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=110,
+ serialized_end=1125,
+)
+_sym_db.RegisterEnumDescriptor(_IMAGEERRORENUM_IMAGEERROR)
+
+
+_IMAGEERRORENUM = _descriptor.Descriptor(
+ name='ImageErrorEnum',
+ full_name='google.ads.googleads.v0.errors.ImageErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _IMAGEERRORENUM_IMAGEERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=91,
+ serialized_end=1125,
+)
+
+_IMAGEERRORENUM_IMAGEERROR.containing_type = _IMAGEERRORENUM
+DESCRIPTOR.message_types_by_name['ImageErrorEnum'] = _IMAGEERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+ImageErrorEnum = _reflection.GeneratedProtocolMessageType('ImageErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _IMAGEERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.image_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible image errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.ImageErrorEnum)
+ ))
+_sym_db.RegisterMessage(ImageErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\017ImageErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/image_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/image_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/image_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/internal_error_pb2.py b/google/ads/google_ads/v0/proto/errors/internal_error_pb2.py
new file mode 100644
index 000000000..d6e647251
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/internal_error_pb2.py
@@ -0,0 +1,103 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/internal_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/internal_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n9google/ads/googleads_v0/proto/errors/internal_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\x89\x01\n\x11InternalErrorEnum\"t\n\rInternalError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x12\n\x0eINTERNAL_ERROR\x10\x02\x12\x1c\n\x18\x45RROR_CODE_NOT_PUBLISHED\x10\x03\x12\x13\n\x0fTRANSIENT_ERROR\x10\x04\x42\xc8\x01\n\"com.google.ads.googleads.v0.errorsB\x12InternalErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_INTERNALERRORENUM_INTERNALERROR = _descriptor.EnumDescriptor(
+ name='InternalError',
+ full_name='google.ads.googleads.v0.errors.InternalErrorEnum.InternalError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INTERNAL_ERROR', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ERROR_CODE_NOT_PUBLISHED', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TRANSIENT_ERROR', index=4, number=4,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=115,
+ serialized_end=231,
+)
+_sym_db.RegisterEnumDescriptor(_INTERNALERRORENUM_INTERNALERROR)
+
+
+_INTERNALERRORENUM = _descriptor.Descriptor(
+ name='InternalErrorEnum',
+ full_name='google.ads.googleads.v0.errors.InternalErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _INTERNALERRORENUM_INTERNALERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=94,
+ serialized_end=231,
+)
+
+_INTERNALERRORENUM_INTERNALERROR.containing_type = _INTERNALERRORENUM
+DESCRIPTOR.message_types_by_name['InternalErrorEnum'] = _INTERNALERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+InternalErrorEnum = _reflection.GeneratedProtocolMessageType('InternalErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _INTERNALERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.internal_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible internal errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.InternalErrorEnum)
+ ))
+_sym_db.RegisterMessage(InternalErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\022InternalErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/internal_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/internal_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/internal_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/list_operation_error_pb2.py b/google/ads/google_ads/v0/proto/errors/list_operation_error_pb2.py
new file mode 100644
index 000000000..fda007e39
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/list_operation_error_pb2.py
@@ -0,0 +1,99 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/list_operation_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/list_operation_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n?google/ads/googleads_v0/proto/errors/list_operation_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"~\n\x16ListOperationErrorEnum\"d\n\x12ListOperationError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x1a\n\x16REQUIRED_FIELD_MISSING\x10\x07\x12\x14\n\x10\x44UPLICATE_VALUES\x10\x08\x42\xcd\x01\n\"com.google.ads.googleads.v0.errorsB\x17ListOperationErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_LISTOPERATIONERRORENUM_LISTOPERATIONERROR = _descriptor.EnumDescriptor(
+ name='ListOperationError',
+ full_name='google.ads.googleads.v0.errors.ListOperationErrorEnum.ListOperationError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REQUIRED_FIELD_MISSING', index=2, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DUPLICATE_VALUES', index=3, number=8,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=125,
+ serialized_end=225,
+)
+_sym_db.RegisterEnumDescriptor(_LISTOPERATIONERRORENUM_LISTOPERATIONERROR)
+
+
+_LISTOPERATIONERRORENUM = _descriptor.Descriptor(
+ name='ListOperationErrorEnum',
+ full_name='google.ads.googleads.v0.errors.ListOperationErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _LISTOPERATIONERRORENUM_LISTOPERATIONERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=99,
+ serialized_end=225,
+)
+
+_LISTOPERATIONERRORENUM_LISTOPERATIONERROR.containing_type = _LISTOPERATIONERRORENUM
+DESCRIPTOR.message_types_by_name['ListOperationErrorEnum'] = _LISTOPERATIONERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+ListOperationErrorEnum = _reflection.GeneratedProtocolMessageType('ListOperationErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _LISTOPERATIONERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.list_operation_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible list operation errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.ListOperationErrorEnum)
+ ))
+_sym_db.RegisterMessage(ListOperationErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\027ListOperationErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/list_operation_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/list_operation_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/list_operation_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/media_bundle_error_pb2.py b/google/ads/google_ads/v0/proto/errors/media_bundle_error_pb2.py
new file mode 100644
index 000000000..c86b447c0
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/media_bundle_error_pb2.py
@@ -0,0 +1,179 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/media_bundle_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/media_bundle_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n=google/ads/googleads_v0/proto/errors/media_bundle_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xb8\x05\n\x14MediaBundleErrorEnum\"\x9f\x05\n\x10MediaBundleError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x0f\n\x0b\x42\x41\x44_REQUEST\x10\x03\x12\"\n\x1e\x44OUBLECLICK_BUNDLE_NOT_ALLOWED\x10\x04\x12\x1c\n\x18\x45XTERNAL_URL_NOT_ALLOWED\x10\x05\x12\x12\n\x0e\x46ILE_TOO_LARGE\x10\x06\x12.\n*GOOGLE_WEB_DESIGNER_ZIP_FILE_NOT_PUBLISHED\x10\x07\x12\x11\n\rINVALID_INPUT\x10\x08\x12\x18\n\x14INVALID_MEDIA_BUNDLE\x10\t\x12\x1e\n\x1aINVALID_MEDIA_BUNDLE_ENTRY\x10\n\x12\x15\n\x11INVALID_MIME_TYPE\x10\x0b\x12\x10\n\x0cINVALID_PATH\x10\x0c\x12\x19\n\x15INVALID_URL_REFERENCE\x10\r\x12\x18\n\x14MEDIA_DATA_TOO_LARGE\x10\x0e\x12&\n\"MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY\x10\x0f\x12\x10\n\x0cSERVER_ERROR\x10\x10\x12\x11\n\rSTORAGE_ERROR\x10\x11\x12\x1d\n\x19SWIFFY_BUNDLE_NOT_ALLOWED\x10\x12\x12\x12\n\x0eTOO_MANY_FILES\x10\x13\x12\x13\n\x0fUNEXPECTED_SIZE\x10\x14\x12/\n+UNSUPPORTED_GOOGLE_WEB_DESIGNER_ENVIRONMENT\x10\x15\x12\x1d\n\x19UNSUPPORTED_HTML5_FEATURE\x10\x16\x12)\n%URL_IN_MEDIA_BUNDLE_NOT_SSL_COMPLIANT\x10\x17\x12\x1b\n\x17\x43USTOM_EXIT_NOT_ALLOWED\x10\x18\x42\xcb\x01\n\"com.google.ads.googleads.v0.errorsB\x15MediaBundleErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_MEDIABUNDLEERRORENUM_MEDIABUNDLEERROR = _descriptor.EnumDescriptor(
+ name='MediaBundleError',
+ full_name='google.ads.googleads.v0.errors.MediaBundleErrorEnum.MediaBundleError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BAD_REQUEST', index=2, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DOUBLECLICK_BUNDLE_NOT_ALLOWED', index=3, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EXTERNAL_URL_NOT_ALLOWED', index=4, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FILE_TOO_LARGE', index=5, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='GOOGLE_WEB_DESIGNER_ZIP_FILE_NOT_PUBLISHED', index=6, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_INPUT', index=7, number=8,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_MEDIA_BUNDLE', index=8, number=9,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_MEDIA_BUNDLE_ENTRY', index=9, number=10,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_MIME_TYPE', index=10, number=11,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_PATH', index=11, number=12,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_URL_REFERENCE', index=12, number=13,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MEDIA_DATA_TOO_LARGE', index=13, number=14,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY', index=14, number=15,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVER_ERROR', index=15, number=16,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='STORAGE_ERROR', index=16, number=17,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SWIFFY_BUNDLE_NOT_ALLOWED', index=17, number=18,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_MANY_FILES', index=18, number=19,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNEXPECTED_SIZE', index=19, number=20,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNSUPPORTED_GOOGLE_WEB_DESIGNER_ENVIRONMENT', index=20, number=21,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNSUPPORTED_HTML5_FEATURE', index=21, number=22,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='URL_IN_MEDIA_BUNDLE_NOT_SSL_COMPLIANT', index=22, number=23,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CUSTOM_EXIT_NOT_ALLOWED', index=23, number=24,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=123,
+ serialized_end=794,
+)
+_sym_db.RegisterEnumDescriptor(_MEDIABUNDLEERRORENUM_MEDIABUNDLEERROR)
+
+
+_MEDIABUNDLEERRORENUM = _descriptor.Descriptor(
+ name='MediaBundleErrorEnum',
+ full_name='google.ads.googleads.v0.errors.MediaBundleErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _MEDIABUNDLEERRORENUM_MEDIABUNDLEERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=98,
+ serialized_end=794,
+)
+
+_MEDIABUNDLEERRORENUM_MEDIABUNDLEERROR.containing_type = _MEDIABUNDLEERRORENUM
+DESCRIPTOR.message_types_by_name['MediaBundleErrorEnum'] = _MEDIABUNDLEERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+MediaBundleErrorEnum = _reflection.GeneratedProtocolMessageType('MediaBundleErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _MEDIABUNDLEERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.media_bundle_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible media bundle errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.MediaBundleErrorEnum)
+ ))
+_sym_db.RegisterMessage(MediaBundleErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\025MediaBundleErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/media_bundle_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/media_bundle_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/media_bundle_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/media_error_pb2.py b/google/ads/google_ads/v0/proto/errors/media_error_pb2.py
new file mode 100644
index 000000000..ed7ce0237
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/media_error_pb2.py
@@ -0,0 +1,187 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/media_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/media_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n6google/ads/googleads_v0/proto/errors/media_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\x8f\x06\n\x0eMediaErrorEnum\"\xfc\x05\n\nMediaError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x1c\n\x18\x43\x41NNOT_ADD_STANDARD_ICON\x10\x02\x12\x30\n,CANNOT_SELECT_STANDARD_ICON_WITH_OTHER_TYPES\x10\x03\x12$\n CANNOT_SPECIFY_MEDIA_ID_AND_DATA\x10\x04\x12\x13\n\x0f\x44UPLICATE_MEDIA\x10\x05\x12\x0f\n\x0b\x45MPTY_FIELD\x10\x06\x12\'\n#RESOURCE_REFERENCED_IN_MULTIPLE_OPS\x10\x07\x12*\n&FIELD_NOT_SUPPORTED_FOR_MEDIA_SUB_TYPE\x10\x08\x12\x14\n\x10INVALID_MEDIA_ID\x10\t\x12\x1a\n\x16INVALID_MEDIA_SUB_TYPE\x10\n\x12\x16\n\x12INVALID_MEDIA_TYPE\x10\x0b\x12\x15\n\x11INVALID_MIME_TYPE\x10\x0c\x12\x18\n\x14INVALID_REFERENCE_ID\x10\r\x12\x17\n\x13INVALID_YOU_TUBE_ID\x10\x0e\x12\x1c\n\x18MEDIA_FAILED_TRANSCODING\x10\x0f\x12\x18\n\x14MEDIA_NOT_TRANSCODED\x10\x10\x12)\n%MEDIA_TYPE_DOES_NOT_MATCH_OBJECT_TYPE\x10\x11\x12\x17\n\x13NO_FIELDS_SPECIFIED\x10\x12\x12\"\n\x1eNULL_REFERENCE_ID_AND_MEDIA_ID\x10\x13\x12\x0c\n\x08TOO_LONG\x10\x14\x12\x19\n\x15UNSUPPORTED_OPERATION\x10\x15\x12\x14\n\x10UNSUPPORTED_TYPE\x10\x16\x12 \n\x1cYOU_TUBE_SERVICE_UNAVAILABLE\x10\x17\x12,\n(YOU_TUBE_VIDEO_HAS_NON_POSITIVE_DURATION\x10\x18\x12\x1c\n\x18YOU_TUBE_VIDEO_NOT_FOUND\x10\x19\x42\xc5\x01\n\"com.google.ads.googleads.v0.errorsB\x0fMediaErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_MEDIAERRORENUM_MEDIAERROR = _descriptor.EnumDescriptor(
+ name='MediaError',
+ full_name='google.ads.googleads.v0.errors.MediaErrorEnum.MediaError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_ADD_STANDARD_ICON', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SELECT_STANDARD_ICON_WITH_OTHER_TYPES', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SPECIFY_MEDIA_ID_AND_DATA', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DUPLICATE_MEDIA', index=5, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EMPTY_FIELD', index=6, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='RESOURCE_REFERENCED_IN_MULTIPLE_OPS', index=7, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='FIELD_NOT_SUPPORTED_FOR_MEDIA_SUB_TYPE', index=8, number=8,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_MEDIA_ID', index=9, number=9,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_MEDIA_SUB_TYPE', index=10, number=10,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_MEDIA_TYPE', index=11, number=11,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_MIME_TYPE', index=12, number=12,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_REFERENCE_ID', index=13, number=13,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_YOU_TUBE_ID', index=14, number=14,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MEDIA_FAILED_TRANSCODING', index=15, number=15,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MEDIA_NOT_TRANSCODED', index=16, number=16,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MEDIA_TYPE_DOES_NOT_MATCH_OBJECT_TYPE', index=17, number=17,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='NO_FIELDS_SPECIFIED', index=18, number=18,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='NULL_REFERENCE_ID_AND_MEDIA_ID', index=19, number=19,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_LONG', index=20, number=20,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNSUPPORTED_OPERATION', index=21, number=21,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNSUPPORTED_TYPE', index=22, number=22,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='YOU_TUBE_SERVICE_UNAVAILABLE', index=23, number=23,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='YOU_TUBE_VIDEO_HAS_NON_POSITIVE_DURATION', index=24, number=24,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='YOU_TUBE_VIDEO_NOT_FOUND', index=25, number=25,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=110,
+ serialized_end=874,
+)
+_sym_db.RegisterEnumDescriptor(_MEDIAERRORENUM_MEDIAERROR)
+
+
+_MEDIAERRORENUM = _descriptor.Descriptor(
+ name='MediaErrorEnum',
+ full_name='google.ads.googleads.v0.errors.MediaErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _MEDIAERRORENUM_MEDIAERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=91,
+ serialized_end=874,
+)
+
+_MEDIAERRORENUM_MEDIAERROR.containing_type = _MEDIAERRORENUM
+DESCRIPTOR.message_types_by_name['MediaErrorEnum'] = _MEDIAERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+MediaErrorEnum = _reflection.GeneratedProtocolMessageType('MediaErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _MEDIAERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.media_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible media errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.MediaErrorEnum)
+ ))
+_sym_db.RegisterMessage(MediaErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\017MediaErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/media_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/media_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/media_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/multiplier_error_pb2.py b/google/ads/google_ads/v0/proto/errors/multiplier_error_pb2.py
new file mode 100644
index 000000000..a9a68cd60
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/multiplier_error_pb2.py
@@ -0,0 +1,139 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/multiplier_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/multiplier_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n;google/ads/googleads_v0/proto/errors/multiplier_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xcf\x04\n\x13MultiplierErrorEnum\"\xb7\x04\n\x0fMultiplierError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x17\n\x13MULTIPLIER_TOO_HIGH\x10\x02\x12\x16\n\x12MULTIPLIER_TOO_LOW\x10\x03\x12\x1e\n\x1aTOO_MANY_FRACTIONAL_DIGITS\x10\x04\x12/\n+MULTIPLIER_NOT_ALLOWED_FOR_BIDDING_STRATEGY\x10\x05\x12\x33\n/MULTIPLIER_NOT_ALLOWED_WHEN_BASE_BID_IS_MISSING\x10\x06\x12\x1b\n\x17NO_MULTIPLIER_SPECIFIED\x10\x07\x12\x30\n,MULTIPLIER_CAUSES_BID_TO_EXCEED_DAILY_BUDGET\x10\x08\x12\x32\n.MULTIPLIER_CAUSES_BID_TO_EXCEED_MONTHLY_BUDGET\x10\t\x12\x31\n-MULTIPLIER_CAUSES_BID_TO_EXCEED_CUSTOM_BUDGET\x10\n\x12\x33\n/MULTIPLIER_CAUSES_BID_TO_EXCEED_MAX_ALLOWED_BID\x10\x0b\x12\x31\n-BID_LESS_THAN_MIN_ALLOWED_BID_WITH_MULTIPLIER\x10\x0c\x12\x31\n-MULTIPLIER_AND_BIDDING_STRATEGY_TYPE_MISMATCH\x10\rB\xca\x01\n\"com.google.ads.googleads.v0.errorsB\x14MultiplierErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_MULTIPLIERERRORENUM_MULTIPLIERERROR = _descriptor.EnumDescriptor(
+ name='MultiplierError',
+ full_name='google.ads.googleads.v0.errors.MultiplierErrorEnum.MultiplierError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MULTIPLIER_TOO_HIGH', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MULTIPLIER_TOO_LOW', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_MANY_FRACTIONAL_DIGITS', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MULTIPLIER_NOT_ALLOWED_FOR_BIDDING_STRATEGY', index=5, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MULTIPLIER_NOT_ALLOWED_WHEN_BASE_BID_IS_MISSING', index=6, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='NO_MULTIPLIER_SPECIFIED', index=7, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MULTIPLIER_CAUSES_BID_TO_EXCEED_DAILY_BUDGET', index=8, number=8,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MULTIPLIER_CAUSES_BID_TO_EXCEED_MONTHLY_BUDGET', index=9, number=9,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MULTIPLIER_CAUSES_BID_TO_EXCEED_CUSTOM_BUDGET', index=10, number=10,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MULTIPLIER_CAUSES_BID_TO_EXCEED_MAX_ALLOWED_BID', index=11, number=11,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BID_LESS_THAN_MIN_ALLOWED_BID_WITH_MULTIPLIER', index=12, number=12,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MULTIPLIER_AND_BIDDING_STRATEGY_TYPE_MISMATCH', index=13, number=13,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=120,
+ serialized_end=687,
+)
+_sym_db.RegisterEnumDescriptor(_MULTIPLIERERRORENUM_MULTIPLIERERROR)
+
+
+_MULTIPLIERERRORENUM = _descriptor.Descriptor(
+ name='MultiplierErrorEnum',
+ full_name='google.ads.googleads.v0.errors.MultiplierErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _MULTIPLIERERRORENUM_MULTIPLIERERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=96,
+ serialized_end=687,
+)
+
+_MULTIPLIERERRORENUM_MULTIPLIERERROR.containing_type = _MULTIPLIERERRORENUM
+DESCRIPTOR.message_types_by_name['MultiplierErrorEnum'] = _MULTIPLIERERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+MultiplierErrorEnum = _reflection.GeneratedProtocolMessageType('MultiplierErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _MULTIPLIERERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.multiplier_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible multiplier errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.MultiplierErrorEnum)
+ ))
+_sym_db.RegisterMessage(MultiplierErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\024MultiplierErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/multiplier_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/multiplier_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/multiplier_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/mutate_error_pb2.py b/google/ads/google_ads/v0/proto/errors/mutate_error_pb2.py
new file mode 100644
index 000000000..1b970f725
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/mutate_error_pb2.py
@@ -0,0 +1,99 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/mutate_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/mutate_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n7google/ads/googleads_v0/proto/errors/mutate_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"y\n\x0fMutateErrorEnum\"f\n\x0bMutateError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x16\n\x12RESOURCE_NOT_FOUND\x10\x03\x12!\n\x1dID_EXISTS_IN_MULTIPLE_MUTATES\x10\x07\x42\xc6\x01\n\"com.google.ads.googleads.v0.errorsB\x10MutateErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_MUTATEERRORENUM_MUTATEERROR = _descriptor.EnumDescriptor(
+ name='MutateError',
+ full_name='google.ads.googleads.v0.errors.MutateErrorEnum.MutateError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='RESOURCE_NOT_FOUND', index=2, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ID_EXISTS_IN_MULTIPLE_MUTATES', index=3, number=7,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=110,
+ serialized_end=212,
+)
+_sym_db.RegisterEnumDescriptor(_MUTATEERRORENUM_MUTATEERROR)
+
+
+_MUTATEERRORENUM = _descriptor.Descriptor(
+ name='MutateErrorEnum',
+ full_name='google.ads.googleads.v0.errors.MutateErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _MUTATEERRORENUM_MUTATEERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=91,
+ serialized_end=212,
+)
+
+_MUTATEERRORENUM_MUTATEERROR.containing_type = _MUTATEERRORENUM
+DESCRIPTOR.message_types_by_name['MutateErrorEnum'] = _MUTATEERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+MutateErrorEnum = _reflection.GeneratedProtocolMessageType('MutateErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATEERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.mutate_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible mutate errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.MutateErrorEnum)
+ ))
+_sym_db.RegisterMessage(MutateErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\020MutateErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/mutate_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/mutate_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/mutate_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/new_resource_creation_error_pb2.py b/google/ads/google_ads/v0/proto/errors/new_resource_creation_error_pb2.py
new file mode 100644
index 000000000..cb0751ab9
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/new_resource_creation_error_pb2.py
@@ -0,0 +1,103 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/new_resource_creation_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/new_resource_creation_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\nFgoogle/ads/googleads_v0/proto/errors/new_resource_creation_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xad\x01\n\x1cNewResourceCreationErrorEnum\"\x8c\x01\n\x18NewResourceCreationError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x19\n\x15\x43\x41NNOT_SET_ID_FOR_ADD\x10\x02\x12\x16\n\x12\x44UPLICATE_TEMP_IDS\x10\x03\x12\x1f\n\x1bTEMP_ID_RESOURCE_HAD_ERRORS\x10\x04\x42\xd3\x01\n\"com.google.ads.googleads.v0.errorsB\x1dNewResourceCreationErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_NEWRESOURCECREATIONERRORENUM_NEWRESOURCECREATIONERROR = _descriptor.EnumDescriptor(
+ name='NewResourceCreationError',
+ full_name='google.ads.googleads.v0.errors.NewResourceCreationErrorEnum.NewResourceCreationError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CANNOT_SET_ID_FOR_ADD', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DUPLICATE_TEMP_IDS', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TEMP_ID_RESOURCE_HAD_ERRORS', index=4, number=4,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=140,
+ serialized_end=280,
+)
+_sym_db.RegisterEnumDescriptor(_NEWRESOURCECREATIONERRORENUM_NEWRESOURCECREATIONERROR)
+
+
+_NEWRESOURCECREATIONERRORENUM = _descriptor.Descriptor(
+ name='NewResourceCreationErrorEnum',
+ full_name='google.ads.googleads.v0.errors.NewResourceCreationErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _NEWRESOURCECREATIONERRORENUM_NEWRESOURCECREATIONERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=107,
+ serialized_end=280,
+)
+
+_NEWRESOURCECREATIONERRORENUM_NEWRESOURCECREATIONERROR.containing_type = _NEWRESOURCECREATIONERRORENUM
+DESCRIPTOR.message_types_by_name['NewResourceCreationErrorEnum'] = _NEWRESOURCECREATIONERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+NewResourceCreationErrorEnum = _reflection.GeneratedProtocolMessageType('NewResourceCreationErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _NEWRESOURCECREATIONERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.new_resource_creation_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible new resource creation errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.NewResourceCreationErrorEnum)
+ ))
+_sym_db.RegisterMessage(NewResourceCreationErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\035NewResourceCreationErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/new_resource_creation_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/new_resource_creation_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/new_resource_creation_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/not_empty_error_pb2.py b/google/ads/google_ads/v0/proto/errors/not_empty_error_pb2.py
new file mode 100644
index 000000000..0a68c0826
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/not_empty_error_pb2.py
@@ -0,0 +1,95 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/not_empty_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/not_empty_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n:google/ads/googleads_v0/proto/errors/not_empty_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"R\n\x11NotEmptyErrorEnum\"=\n\rNotEmptyError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x0e\n\nEMPTY_LIST\x10\x02\x42\xc8\x01\n\"com.google.ads.googleads.v0.errorsB\x12NotEmptyErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_NOTEMPTYERRORENUM_NOTEMPTYERROR = _descriptor.EnumDescriptor(
+ name='NotEmptyError',
+ full_name='google.ads.googleads.v0.errors.NotEmptyErrorEnum.NotEmptyError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EMPTY_LIST', index=2, number=2,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=115,
+ serialized_end=176,
+)
+_sym_db.RegisterEnumDescriptor(_NOTEMPTYERRORENUM_NOTEMPTYERROR)
+
+
+_NOTEMPTYERRORENUM = _descriptor.Descriptor(
+ name='NotEmptyErrorEnum',
+ full_name='google.ads.googleads.v0.errors.NotEmptyErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _NOTEMPTYERRORENUM_NOTEMPTYERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=94,
+ serialized_end=176,
+)
+
+_NOTEMPTYERRORENUM_NOTEMPTYERROR.containing_type = _NOTEMPTYERRORENUM
+DESCRIPTOR.message_types_by_name['NotEmptyErrorEnum'] = _NOTEMPTYERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+NotEmptyErrorEnum = _reflection.GeneratedProtocolMessageType('NotEmptyErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _NOTEMPTYERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.not_empty_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible not empty errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.NotEmptyErrorEnum)
+ ))
+_sym_db.RegisterMessage(NotEmptyErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\022NotEmptyErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/not_empty_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/not_empty_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/not_empty_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/null_error_pb2.py b/google/ads/google_ads/v0/proto/errors/null_error_pb2.py
new file mode 100644
index 000000000..ebfddf76d
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/null_error_pb2.py
@@ -0,0 +1,95 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/null_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/null_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n5google/ads/googleads_v0/proto/errors/null_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"L\n\rNullErrorEnum\";\n\tNullError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x10\n\x0cNULL_CONTENT\x10\x02\x42\xc4\x01\n\"com.google.ads.googleads.v0.errorsB\x0eNullErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_NULLERRORENUM_NULLERROR = _descriptor.EnumDescriptor(
+ name='NullError',
+ full_name='google.ads.googleads.v0.errors.NullErrorEnum.NullError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='NULL_CONTENT', index=2, number=2,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=106,
+ serialized_end=165,
+)
+_sym_db.RegisterEnumDescriptor(_NULLERRORENUM_NULLERROR)
+
+
+_NULLERRORENUM = _descriptor.Descriptor(
+ name='NullErrorEnum',
+ full_name='google.ads.googleads.v0.errors.NullErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _NULLERRORENUM_NULLERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=89,
+ serialized_end=165,
+)
+
+_NULLERRORENUM_NULLERROR.containing_type = _NULLERRORENUM
+DESCRIPTOR.message_types_by_name['NullErrorEnum'] = _NULLERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+NullErrorEnum = _reflection.GeneratedProtocolMessageType('NullErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _NULLERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.null_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible null errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.NullErrorEnum)
+ ))
+_sym_db.RegisterMessage(NullErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\016NullErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/null_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/null_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/null_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/operation_access_denied_error_pb2.py b/google/ads/google_ads/v0/proto/errors/operation_access_denied_error_pb2.py
new file mode 100644
index 000000000..0e31d0d9d
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/operation_access_denied_error_pb2.py
@@ -0,0 +1,127 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/operation_access_denied_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/operation_access_denied_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\nHgoogle/ads/googleads_v0/proto/errors/operation_access_denied_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xc4\x03\n\x1eOperationAccessDeniedErrorEnum\"\xa1\x03\n\x1aOperationAccessDeniedError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x18\n\x14\x41\x43TION_NOT_PERMITTED\x10\x02\x12\"\n\x1e\x43REATE_OPERATION_NOT_PERMITTED\x10\x03\x12\"\n\x1eREMOVE_OPERATION_NOT_PERMITTED\x10\x04\x12\"\n\x1eUPDATE_OPERATION_NOT_PERMITTED\x10\x05\x12*\n&MUTATE_ACTION_NOT_PERMITTED_FOR_CLIENT\x10\x06\x12-\n)OPERATION_NOT_PERMITTED_FOR_CAMPAIGN_TYPE\x10\x07\x12#\n\x1f\x43REATE_AS_REMOVED_NOT_PERMITTED\x10\x08\x12\x30\n,OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE\x10\t\x12-\n)OPERATION_NOT_PERMITTED_FOR_AD_GROUP_TYPE\x10\nB\xd5\x01\n\"com.google.ads.googleads.v0.errorsB\x1fOperationAccessDeniedErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_OPERATIONACCESSDENIEDERRORENUM_OPERATIONACCESSDENIEDERROR = _descriptor.EnumDescriptor(
+ name='OperationAccessDeniedError',
+ full_name='google.ads.googleads.v0.errors.OperationAccessDeniedErrorEnum.OperationAccessDeniedError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ACTION_NOT_PERMITTED', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CREATE_OPERATION_NOT_PERMITTED', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REMOVE_OPERATION_NOT_PERMITTED', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UPDATE_OPERATION_NOT_PERMITTED', index=5, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MUTATE_ACTION_NOT_PERMITTED_FOR_CLIENT', index=6, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='OPERATION_NOT_PERMITTED_FOR_CAMPAIGN_TYPE', index=7, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CREATE_AS_REMOVED_NOT_PERMITTED', index=8, number=8,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE', index=9, number=9,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='OPERATION_NOT_PERMITTED_FOR_AD_GROUP_TYPE', index=10, number=10,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=144,
+ serialized_end=561,
+)
+_sym_db.RegisterEnumDescriptor(_OPERATIONACCESSDENIEDERRORENUM_OPERATIONACCESSDENIEDERROR)
+
+
+_OPERATIONACCESSDENIEDERRORENUM = _descriptor.Descriptor(
+ name='OperationAccessDeniedErrorEnum',
+ full_name='google.ads.googleads.v0.errors.OperationAccessDeniedErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _OPERATIONACCESSDENIEDERRORENUM_OPERATIONACCESSDENIEDERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=109,
+ serialized_end=561,
+)
+
+_OPERATIONACCESSDENIEDERRORENUM_OPERATIONACCESSDENIEDERROR.containing_type = _OPERATIONACCESSDENIEDERRORENUM
+DESCRIPTOR.message_types_by_name['OperationAccessDeniedErrorEnum'] = _OPERATIONACCESSDENIEDERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+OperationAccessDeniedErrorEnum = _reflection.GeneratedProtocolMessageType('OperationAccessDeniedErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _OPERATIONACCESSDENIEDERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.operation_access_denied_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible operation access denied errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.OperationAccessDeniedErrorEnum)
+ ))
+_sym_db.RegisterMessage(OperationAccessDeniedErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\037OperationAccessDeniedErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/operation_access_denied_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/operation_access_denied_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/operation_access_denied_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/operator_error_pb2.py b/google/ads/google_ads/v0/proto/errors/operator_error_pb2.py
new file mode 100644
index 000000000..d7ed6b850
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/operator_error_pb2.py
@@ -0,0 +1,95 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/operator_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/operator_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n9google/ads/googleads_v0/proto/errors/operator_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"^\n\x11OperatorErrorEnum\"I\n\rOperatorError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x1a\n\x16OPERATOR_NOT_SUPPORTED\x10\x02\x42\xc8\x01\n\"com.google.ads.googleads.v0.errorsB\x12OperatorErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_OPERATORERRORENUM_OPERATORERROR = _descriptor.EnumDescriptor(
+ name='OperatorError',
+ full_name='google.ads.googleads.v0.errors.OperatorErrorEnum.OperatorError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='OPERATOR_NOT_SUPPORTED', index=2, number=2,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=114,
+ serialized_end=187,
+)
+_sym_db.RegisterEnumDescriptor(_OPERATORERRORENUM_OPERATORERROR)
+
+
+_OPERATORERRORENUM = _descriptor.Descriptor(
+ name='OperatorErrorEnum',
+ full_name='google.ads.googleads.v0.errors.OperatorErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _OPERATORERRORENUM_OPERATORERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=93,
+ serialized_end=187,
+)
+
+_OPERATORERRORENUM_OPERATORERROR.containing_type = _OPERATORERRORENUM
+DESCRIPTOR.message_types_by_name['OperatorErrorEnum'] = _OPERATORERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+OperatorErrorEnum = _reflection.GeneratedProtocolMessageType('OperatorErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _OPERATORERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.operator_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible operator errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.OperatorErrorEnum)
+ ))
+_sym_db.RegisterMessage(OperatorErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\022OperatorErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/operator_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/operator_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/operator_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/query_error_pb2.py b/google/ads/google_ads/v0/proto/errors/query_error_pb2.py
new file mode 100644
index 000000000..42d1d6eb0
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/query_error_pb2.py
@@ -0,0 +1,287 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/query_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/query_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n6google/ads/googleads_v0/proto/errors/query_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xe4\x0c\n\x0eQueryErrorEnum\"\xd1\x0c\n\nQueryError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x0f\n\x0bQUERY_ERROR\x10\x32\x12\x15\n\x11\x42\x41\x44_ENUM_CONSTANT\x10\x12\x12\x17\n\x13\x42\x41\x44_ESCAPE_SEQUENCE\x10\x07\x12\x12\n\x0e\x42\x41\x44_FIELD_NAME\x10\x0c\x12\x13\n\x0f\x42\x41\x44_LIMIT_VALUE\x10\x0f\x12\x0e\n\nBAD_NUMBER\x10\x05\x12\x10\n\x0c\x42\x41\x44_OPERATOR\x10\x03\x12$\n BAD_RESOURCE_TYPE_IN_FROM_CLAUSE\x10-\x12\x0e\n\nBAD_SYMBOL\x10\x02\x12\r\n\tBAD_VALUE\x10\x04\x12\x17\n\x13\x44\x41TE_RANGE_TOO_WIDE\x10$\x12\x10\n\x0c\x45XPECTED_AND\x10\x1e\x12\x0f\n\x0b\x45XPECTED_BY\x10\x0e\x12-\n)EXPECTED_DIMENSION_FIELD_IN_SELECT_CLAUSE\x10%\x12\"\n\x1e\x45XPECTED_FILTERS_ON_DATE_RANGE\x10\x37\x12\x11\n\rEXPECTED_FROM\x10,\x12\x11\n\rEXPECTED_LIST\x10)\x12.\n*EXPECTED_REFERENCED_FIELD_IN_SELECT_CLAUSE\x10\x10\x12\x13\n\x0f\x45XPECTED_SELECT\x10\r\x12\x19\n\x15\x45XPECTED_SINGLE_VALUE\x10*\x12(\n$EXPECTED_VALUE_WITH_BETWEEN_OPERATOR\x10\x1d\x12\x17\n\x13INVALID_DATE_FORMAT\x10&\x12\x18\n\x14INVALID_STRING_VALUE\x10\x39\x12\'\n#INVALID_VALUE_WITH_BETWEEN_OPERATOR\x10\x1a\x12&\n\"INVALID_VALUE_WITH_DURING_OPERATOR\x10\x16\x12$\n INVALID_VALUE_WITH_LIKE_OPERATOR\x10\x38\x12\x1b\n\x17OPERATOR_FIELD_MISMATCH\x10#\x12&\n\"PROHIBITED_EMPTY_LIST_IN_CONDITION\x10\x1c\x12\x1c\n\x18PROHIBITED_ENUM_CONSTANT\x10\x36\x12\x31\n-PROHIBITED_FIELD_COMBINATION_IN_SELECT_CLAUSE\x10\x1f\x12\'\n#PROHIBITED_FIELD_IN_ORDER_BY_CLAUSE\x10(\x12%\n!PROHIBITED_FIELD_IN_SELECT_CLAUSE\x10\x17\x12$\n PROHIBITED_FIELD_IN_WHERE_CLAUSE\x10\x18\x12+\n\'PROHIBITED_RESOURCE_TYPE_IN_FROM_CLAUSE\x10+\x12-\n)PROHIBITED_RESOURCE_TYPE_IN_SELECT_CLAUSE\x10\x30\x12,\n(PROHIBITED_RESOURCE_TYPE_IN_WHERE_CLAUSE\x10:\x12/\n+PROHIBITED_METRIC_IN_SELECT_OR_WHERE_CLAUSE\x10\x31\x12\x30\n,PROHIBITED_SEGMENT_IN_SELECT_OR_WHERE_CLAUSE\x10\x33\x12<\n8PROHIBITED_SEGMENT_WITH_METRIC_IN_SELECT_OR_WHERE_CLAUSE\x10\x35\x12\x17\n\x13LIMIT_VALUE_TOO_LOW\x10\x19\x12 \n\x1cPROHIBITED_NEWLINE_IN_STRING\x10\x08\x12(\n$PROHIBITED_VALUE_COMBINATION_IN_LIST\x10\n\x12\x36\n2PROHIBITED_VALUE_COMBINATION_WITH_BETWEEN_OPERATOR\x10\x15\x12\x19\n\x15STRING_NOT_TERMINATED\x10\x06\x12\x15\n\x11TOO_MANY_SEGMENTS\x10\"\x12\x1b\n\x17UNEXPECTED_END_OF_QUERY\x10\t\x12\x1a\n\x16UNEXPECTED_FROM_CLAUSE\x10/\x12\x16\n\x12UNRECOGNIZED_FIELD\x10 \x12\x14\n\x10UNEXPECTED_INPUT\x10\x0b\x42\xc5\x01\n\"com.google.ads.googleads.v0.errorsB\x0fQueryErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_QUERYERRORENUM_QUERYERROR = _descriptor.EnumDescriptor(
+ name='QueryError',
+ full_name='google.ads.googleads.v0.errors.QueryErrorEnum.QueryError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='QUERY_ERROR', index=2, number=50,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BAD_ENUM_CONSTANT', index=3, number=18,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BAD_ESCAPE_SEQUENCE', index=4, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BAD_FIELD_NAME', index=5, number=12,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BAD_LIMIT_VALUE', index=6, number=15,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BAD_NUMBER', index=7, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BAD_OPERATOR', index=8, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BAD_RESOURCE_TYPE_IN_FROM_CLAUSE', index=9, number=45,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BAD_SYMBOL', index=10, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BAD_VALUE', index=11, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DATE_RANGE_TOO_WIDE', index=12, number=36,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EXPECTED_AND', index=13, number=30,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EXPECTED_BY', index=14, number=14,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EXPECTED_DIMENSION_FIELD_IN_SELECT_CLAUSE', index=15, number=37,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EXPECTED_FILTERS_ON_DATE_RANGE', index=16, number=55,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EXPECTED_FROM', index=17, number=44,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EXPECTED_LIST', index=18, number=41,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EXPECTED_REFERENCED_FIELD_IN_SELECT_CLAUSE', index=19, number=16,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EXPECTED_SELECT', index=20, number=13,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EXPECTED_SINGLE_VALUE', index=21, number=42,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EXPECTED_VALUE_WITH_BETWEEN_OPERATOR', index=22, number=29,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_DATE_FORMAT', index=23, number=38,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_STRING_VALUE', index=24, number=57,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_VALUE_WITH_BETWEEN_OPERATOR', index=25, number=26,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_VALUE_WITH_DURING_OPERATOR', index=26, number=22,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_VALUE_WITH_LIKE_OPERATOR', index=27, number=56,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='OPERATOR_FIELD_MISMATCH', index=28, number=35,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROHIBITED_EMPTY_LIST_IN_CONDITION', index=29, number=28,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROHIBITED_ENUM_CONSTANT', index=30, number=54,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROHIBITED_FIELD_COMBINATION_IN_SELECT_CLAUSE', index=31, number=31,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROHIBITED_FIELD_IN_ORDER_BY_CLAUSE', index=32, number=40,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROHIBITED_FIELD_IN_SELECT_CLAUSE', index=33, number=23,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROHIBITED_FIELD_IN_WHERE_CLAUSE', index=34, number=24,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROHIBITED_RESOURCE_TYPE_IN_FROM_CLAUSE', index=35, number=43,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROHIBITED_RESOURCE_TYPE_IN_SELECT_CLAUSE', index=36, number=48,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROHIBITED_RESOURCE_TYPE_IN_WHERE_CLAUSE', index=37, number=58,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROHIBITED_METRIC_IN_SELECT_OR_WHERE_CLAUSE', index=38, number=49,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROHIBITED_SEGMENT_IN_SELECT_OR_WHERE_CLAUSE', index=39, number=51,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROHIBITED_SEGMENT_WITH_METRIC_IN_SELECT_OR_WHERE_CLAUSE', index=40, number=53,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LIMIT_VALUE_TOO_LOW', index=41, number=25,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROHIBITED_NEWLINE_IN_STRING', index=42, number=8,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROHIBITED_VALUE_COMBINATION_IN_LIST', index=43, number=10,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='PROHIBITED_VALUE_COMBINATION_WITH_BETWEEN_OPERATOR', index=44, number=21,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='STRING_NOT_TERMINATED', index=45, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_MANY_SEGMENTS', index=46, number=34,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNEXPECTED_END_OF_QUERY', index=47, number=9,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNEXPECTED_FROM_CLAUSE', index=48, number=47,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNRECOGNIZED_FIELD', index=49, number=32,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNEXPECTED_INPUT', index=50, number=11,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=110,
+ serialized_end=1727,
+)
+_sym_db.RegisterEnumDescriptor(_QUERYERRORENUM_QUERYERROR)
+
+
+_QUERYERRORENUM = _descriptor.Descriptor(
+ name='QueryErrorEnum',
+ full_name='google.ads.googleads.v0.errors.QueryErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _QUERYERRORENUM_QUERYERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=91,
+ serialized_end=1727,
+)
+
+_QUERYERRORENUM_QUERYERROR.containing_type = _QUERYERRORENUM
+DESCRIPTOR.message_types_by_name['QueryErrorEnum'] = _QUERYERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+QueryErrorEnum = _reflection.GeneratedProtocolMessageType('QueryErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _QUERYERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.query_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible query errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.QueryErrorEnum)
+ ))
+_sym_db.RegisterMessage(QueryErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\017QueryErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/query_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/query_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/query_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/quota_error_pb2.py b/google/ads/google_ads/v0/proto/errors/quota_error_pb2.py
new file mode 100644
index 000000000..f80412694
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/quota_error_pb2.py
@@ -0,0 +1,99 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/quota_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/quota_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n6google/ads/googleads_v0/proto/errors/quota_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"k\n\x0eQuotaErrorEnum\"Y\n\nQuotaError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x16\n\x12RESOURCE_EXHAUSTED\x10\x02\x12\x15\n\x11\x41\x43\x43\x45SS_PROHIBITED\x10\x03\x42\xc5\x01\n\"com.google.ads.googleads.v0.errorsB\x0fQuotaErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_QUOTAERRORENUM_QUOTAERROR = _descriptor.EnumDescriptor(
+ name='QuotaError',
+ full_name='google.ads.googleads.v0.errors.QuotaErrorEnum.QuotaError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='RESOURCE_EXHAUSTED', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ACCESS_PROHIBITED', index=3, number=3,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=108,
+ serialized_end=197,
+)
+_sym_db.RegisterEnumDescriptor(_QUOTAERRORENUM_QUOTAERROR)
+
+
+_QUOTAERRORENUM = _descriptor.Descriptor(
+ name='QuotaErrorEnum',
+ full_name='google.ads.googleads.v0.errors.QuotaErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _QUOTAERRORENUM_QUOTAERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=90,
+ serialized_end=197,
+)
+
+_QUOTAERRORENUM_QUOTAERROR.containing_type = _QUOTAERRORENUM
+DESCRIPTOR.message_types_by_name['QuotaErrorEnum'] = _QUOTAERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+QuotaErrorEnum = _reflection.GeneratedProtocolMessageType('QuotaErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _QUOTAERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.quota_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible quota errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.QuotaErrorEnum)
+ ))
+_sym_db.RegisterMessage(QuotaErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\017QuotaErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/quota_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/quota_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/quota_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/range_error_pb2.py b/google/ads/google_ads/v0/proto/errors/range_error_pb2.py
new file mode 100644
index 000000000..21d3ed61d
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/range_error_pb2.py
@@ -0,0 +1,99 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/range_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/range_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n6google/ads/googleads_v0/proto/errors/range_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"W\n\x0eRangeErrorEnum\"E\n\nRangeError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x0b\n\x07TOO_LOW\x10\x02\x12\x0c\n\x08TOO_HIGH\x10\x03\x42\xc5\x01\n\"com.google.ads.googleads.v0.errorsB\x0fRangeErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_RANGEERRORENUM_RANGEERROR = _descriptor.EnumDescriptor(
+ name='RangeError',
+ full_name='google.ads.googleads.v0.errors.RangeErrorEnum.RangeError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_LOW', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_HIGH', index=3, number=3,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=108,
+ serialized_end=177,
+)
+_sym_db.RegisterEnumDescriptor(_RANGEERRORENUM_RANGEERROR)
+
+
+_RANGEERRORENUM = _descriptor.Descriptor(
+ name='RangeErrorEnum',
+ full_name='google.ads.googleads.v0.errors.RangeErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _RANGEERRORENUM_RANGEERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=90,
+ serialized_end=177,
+)
+
+_RANGEERRORENUM_RANGEERROR.containing_type = _RANGEERRORENUM
+DESCRIPTOR.message_types_by_name['RangeErrorEnum'] = _RANGEERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+RangeErrorEnum = _reflection.GeneratedProtocolMessageType('RangeErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _RANGEERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.range_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible range errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.RangeErrorEnum)
+ ))
+_sym_db.RegisterMessage(RangeErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\017RangeErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/range_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/range_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/range_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/recommendation_error_pb2.py b/google/ads/google_ads/v0/proto/errors/recommendation_error_pb2.py
new file mode 100644
index 000000000..3b99127e9
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/recommendation_error_pb2.py
@@ -0,0 +1,116 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/recommendation_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/recommendation_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n?google/ads/googleads_v0/proto/errors/recommendation_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xe9\x01\n\x17RecommendationErrorEnum\"\xcd\x01\n\x13RecommendationError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x1b\n\x17\x42UDGET_AMOUNT_TOO_SMALL\x10\x02\x12\x1b\n\x17\x42UDGET_AMOUNT_TOO_LARGE\x10\x03\x12\x19\n\x15INVALID_BUDGET_AMOUNT\x10\x04\x12\x10\n\x0cPOLICY_ERROR\x10\x05\x12\x16\n\x12INVALID_BID_AMOUNT\x10\x06\x12\x19\n\x15\x41\x44GROUP_KEYWORD_LIMIT\x10\x07\x42\xce\x01\n\"com.google.ads.googleads.v0.errorsB\x18RecommendationErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_RECOMMENDATIONERRORENUM_RECOMMENDATIONERROR = _descriptor.EnumDescriptor(
+ name='RecommendationError',
+ full_name='google.ads.googleads.v0.errors.RecommendationErrorEnum.RecommendationError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BUDGET_AMOUNT_TOO_SMALL', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BUDGET_AMOUNT_TOO_LARGE', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_BUDGET_AMOUNT', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='POLICY_ERROR', index=5, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_BID_AMOUNT', index=6, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ADGROUP_KEYWORD_LIMIT', index=7, number=7,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=128,
+ serialized_end=333,
+)
+_sym_db.RegisterEnumDescriptor(_RECOMMENDATIONERRORENUM_RECOMMENDATIONERROR)
+
+
+_RECOMMENDATIONERRORENUM = _descriptor.Descriptor(
+ name='RecommendationErrorEnum',
+ full_name='google.ads.googleads.v0.errors.RecommendationErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _RECOMMENDATIONERRORENUM_RECOMMENDATIONERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=100,
+ serialized_end=333,
+)
+
+_RECOMMENDATIONERRORENUM_RECOMMENDATIONERROR.containing_type = _RECOMMENDATIONERRORENUM
+DESCRIPTOR.message_types_by_name['RecommendationErrorEnum'] = _RECOMMENDATIONERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+RecommendationErrorEnum = _reflection.GeneratedProtocolMessageType('RecommendationErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _RECOMMENDATIONERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.recommendation_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible errors from applying a
+ recommendation.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.RecommendationErrorEnum)
+ ))
+_sym_db.RegisterMessage(RecommendationErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\030RecommendationErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/recommendation_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/recommendation_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/recommendation_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/region_code_error_pb2.py b/google/ads/google_ads/v0/proto/errors/region_code_error_pb2.py
new file mode 100644
index 000000000..c5e75438b
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/region_code_error_pb2.py
@@ -0,0 +1,95 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/region_code_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/region_code_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n\n:TARGET_ALL_IS_NOT_ALLOWED_FOR_PLACEMENT_IN_SEARCH_CAMPAIGN\x10\x0c\x12\x38\n4UNIVERSAL_APP_CAMPAIGN_SETTING_DUPLICATE_DESCRIPTION\x10\r\x12\x42\n>UNIVERSAL_APP_CAMPAIGN_SETTING_DESCRIPTION_LINE_WIDTH_TOO_LONG\x10\x0e\x12<\n8UNIVERSAL_APP_CAMPAIGN_SETTING_APP_ID_CANNOT_BE_MODIFIED\x10\x0f\x12\x38\n4TOO_MANY_YOUTUBE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN\x10\x10\x12\x36\n2TOO_MANY_IMAGE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN\x10\x11\x12\x31\n-MEDIA_INCOMPATIBLE_FOR_UNIVERSAL_APP_CAMPAIGN\x10\x12\x12\x1e\n\x1aTOO_MANY_EXCLAMATION_MARKS\x10\x13\x42\xc7\x01\n\"com.google.ads.googleads.v0.errorsB\x11SettingErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_SETTINGERRORENUM_SETTINGERROR = _descriptor.EnumDescriptor(
+ name='SettingError',
+ full_name='google.ads.googleads.v0.errors.SettingErrorEnum.SettingError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SETTING_TYPE_IS_NOT_AVAILABLE', index=2, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SETTING_TYPE_IS_NOT_COMPATIBLE_WITH_CAMPAIGN', index=3, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TARGETING_SETTING_CONTAINS_INVALID_CRITERION_TYPE_GROUP', index=4, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TARGETING_SETTING_DEMOGRAPHIC_CRITERION_TYPE_GROUPS_MUST_BE_SET_TO_TARGET_ALL', index=5, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TARGETING_SETTING_CANNOT_CHANGE_TARGET_ALL_TO_FALSE_FOR_DEMOGRAPHIC_CRITERION_TYPE_GROUP', index=6, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DYNAMIC_SEARCH_ADS_SETTING_AT_LEAST_ONE_FEED_ID_MUST_BE_PRESENT', index=7, number=8,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_DOMAIN_NAME', index=8, number=9,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_SUBDOMAIN_NAME', index=9, number=10,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_LANGUAGE_CODE', index=10, number=11,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TARGET_ALL_IS_NOT_ALLOWED_FOR_PLACEMENT_IN_SEARCH_CAMPAIGN', index=11, number=12,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNIVERSAL_APP_CAMPAIGN_SETTING_DUPLICATE_DESCRIPTION', index=12, number=13,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNIVERSAL_APP_CAMPAIGN_SETTING_DESCRIPTION_LINE_WIDTH_TOO_LONG', index=13, number=14,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNIVERSAL_APP_CAMPAIGN_SETTING_APP_ID_CANNOT_BE_MODIFIED', index=14, number=15,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_MANY_YOUTUBE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN', index=15, number=16,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_MANY_IMAGE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN', index=16, number=17,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MEDIA_INCOMPATIBLE_FOR_UNIVERSAL_APP_CAMPAIGN', index=17, number=18,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_MANY_EXCLAMATION_MARKS', index=18, number=19,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=114,
+ serialized_end=1179,
+)
+_sym_db.RegisterEnumDescriptor(_SETTINGERRORENUM_SETTINGERROR)
+
+
+_SETTINGERRORENUM = _descriptor.Descriptor(
+ name='SettingErrorEnum',
+ full_name='google.ads.googleads.v0.errors.SettingErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _SETTINGERRORENUM_SETTINGERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=93,
+ serialized_end=1179,
+)
+
+_SETTINGERRORENUM_SETTINGERROR.containing_type = _SETTINGERRORENUM
+DESCRIPTOR.message_types_by_name['SettingErrorEnum'] = _SETTINGERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+SettingErrorEnum = _reflection.GeneratedProtocolMessageType('SettingErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _SETTINGERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.setting_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible setting errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.SettingErrorEnum)
+ ))
+_sym_db.RegisterMessage(SettingErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\021SettingErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/setting_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/setting_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/setting_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/string_format_error_pb2.py b/google/ads/google_ads/v0/proto/errors/string_format_error_pb2.py
new file mode 100644
index 000000000..f63f0a9b9
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/string_format_error_pb2.py
@@ -0,0 +1,99 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/string_format_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/string_format_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n>google/ads/googleads_v0/proto/errors/string_format_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"q\n\x15StringFormatErrorEnum\"X\n\x11StringFormatError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x11\n\rILLEGAL_CHARS\x10\x02\x12\x12\n\x0eINVALID_FORMAT\x10\x03\x42\xcc\x01\n\"com.google.ads.googleads.v0.errorsB\x16StringFormatErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_STRINGFORMATERRORENUM_STRINGFORMATERROR = _descriptor.EnumDescriptor(
+ name='StringFormatError',
+ full_name='google.ads.googleads.v0.errors.StringFormatErrorEnum.StringFormatError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ILLEGAL_CHARS', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_FORMAT', index=3, number=3,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=123,
+ serialized_end=211,
+)
+_sym_db.RegisterEnumDescriptor(_STRINGFORMATERRORENUM_STRINGFORMATERROR)
+
+
+_STRINGFORMATERRORENUM = _descriptor.Descriptor(
+ name='StringFormatErrorEnum',
+ full_name='google.ads.googleads.v0.errors.StringFormatErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _STRINGFORMATERRORENUM_STRINGFORMATERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=98,
+ serialized_end=211,
+)
+
+_STRINGFORMATERRORENUM_STRINGFORMATERROR.containing_type = _STRINGFORMATERRORENUM
+DESCRIPTOR.message_types_by_name['StringFormatErrorEnum'] = _STRINGFORMATERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+StringFormatErrorEnum = _reflection.GeneratedProtocolMessageType('StringFormatErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _STRINGFORMATERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.string_format_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible string format errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.StringFormatErrorEnum)
+ ))
+_sym_db.RegisterMessage(StringFormatErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\026StringFormatErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/string_format_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/string_format_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/string_format_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/string_length_error_pb2.py b/google/ads/google_ads/v0/proto/errors/string_length_error_pb2.py
new file mode 100644
index 000000000..c1f47772a
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/string_length_error_pb2.py
@@ -0,0 +1,99 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/string_length_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/string_length_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n>google/ads/googleads_v0/proto/errors/string_length_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"g\n\x15StringLengthErrorEnum\"N\n\x11StringLengthError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\r\n\tTOO_SHORT\x10\x02\x12\x0c\n\x08TOO_LONG\x10\x03\x42\xcc\x01\n\"com.google.ads.googleads.v0.errorsB\x16StringLengthErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_STRINGLENGTHERRORENUM_STRINGLENGTHERROR = _descriptor.EnumDescriptor(
+ name='StringLengthError',
+ full_name='google.ads.googleads.v0.errors.StringLengthErrorEnum.StringLengthError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_SHORT', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TOO_LONG', index=3, number=3,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=123,
+ serialized_end=201,
+)
+_sym_db.RegisterEnumDescriptor(_STRINGLENGTHERRORENUM_STRINGLENGTHERROR)
+
+
+_STRINGLENGTHERRORENUM = _descriptor.Descriptor(
+ name='StringLengthErrorEnum',
+ full_name='google.ads.googleads.v0.errors.StringLengthErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _STRINGLENGTHERRORENUM_STRINGLENGTHERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=98,
+ serialized_end=201,
+)
+
+_STRINGLENGTHERRORENUM_STRINGLENGTHERROR.containing_type = _STRINGLENGTHERRORENUM
+DESCRIPTOR.message_types_by_name['StringLengthErrorEnum'] = _STRINGLENGTHERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+StringLengthErrorEnum = _reflection.GeneratedProtocolMessageType('StringLengthErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _STRINGLENGTHERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.string_length_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible string length errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.StringLengthErrorEnum)
+ ))
+_sym_db.RegisterMessage(StringLengthErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\026StringLengthErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/string_length_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/string_length_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/string_length_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/errors/url_field_error_pb2.py b/google/ads/google_ads/v0/proto/errors/url_field_error_pb2.py
new file mode 100644
index 000000000..10837b138
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/url_field_error_pb2.py
@@ -0,0 +1,267 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/errors/url_field_error.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/errors/url_field_error.proto',
+ package='google.ads.googleads.v0.errors',
+ syntax='proto3',
+ serialized_pb=_b('\n:google/ads/googleads_v0/proto/errors/url_field_error.proto\x12\x1egoogle.ads.googleads.v0.errors\"\xd7\x0c\n\x11UrlFieldErrorEnum\"\xc1\x0c\n\rUrlFieldError\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12!\n\x1dINVALID_TRACKING_URL_TEMPLATE\x10\x02\x12(\n$INVALID_TAG_IN_TRACKING_URL_TEMPLATE\x10\x03\x12%\n!MISSING_TRACKING_URL_TEMPLATE_TAG\x10\x04\x12-\n)MISSING_PROTOCOL_IN_TRACKING_URL_TEMPLATE\x10\x05\x12-\n)INVALID_PROTOCOL_IN_TRACKING_URL_TEMPLATE\x10\x06\x12#\n\x1fMALFORMED_TRACKING_URL_TEMPLATE\x10\x07\x12)\n%MISSING_HOST_IN_TRACKING_URL_TEMPLATE\x10\x08\x12(\n$INVALID_TLD_IN_TRACKING_URL_TEMPLATE\x10\t\x12.\n*REDUNDANT_NESTED_TRACKING_URL_TEMPLATE_TAG\x10\n\x12\x15\n\x11INVALID_FINAL_URL\x10\x0b\x12\x1c\n\x18INVALID_TAG_IN_FINAL_URL\x10\x0c\x12\"\n\x1eREDUNDANT_NESTED_FINAL_URL_TAG\x10\r\x12!\n\x1dMISSING_PROTOCOL_IN_FINAL_URL\x10\x0e\x12!\n\x1dINVALID_PROTOCOL_IN_FINAL_URL\x10\x0f\x12\x17\n\x13MALFORMED_FINAL_URL\x10\x10\x12\x1d\n\x19MISSING_HOST_IN_FINAL_URL\x10\x11\x12\x1c\n\x18INVALID_TLD_IN_FINAL_URL\x10\x12\x12\x1c\n\x18INVALID_FINAL_MOBILE_URL\x10\x13\x12#\n\x1fINVALID_TAG_IN_FINAL_MOBILE_URL\x10\x14\x12)\n%REDUNDANT_NESTED_FINAL_MOBILE_URL_TAG\x10\x15\x12(\n$MISSING_PROTOCOL_IN_FINAL_MOBILE_URL\x10\x16\x12(\n$INVALID_PROTOCOL_IN_FINAL_MOBILE_URL\x10\x17\x12\x1e\n\x1aMALFORMED_FINAL_MOBILE_URL\x10\x18\x12$\n MISSING_HOST_IN_FINAL_MOBILE_URL\x10\x19\x12#\n\x1fINVALID_TLD_IN_FINAL_MOBILE_URL\x10\x1a\x12\x19\n\x15INVALID_FINAL_APP_URL\x10\x1b\x12 \n\x1cINVALID_TAG_IN_FINAL_APP_URL\x10\x1c\x12&\n\"REDUNDANT_NESTED_FINAL_APP_URL_TAG\x10\x1d\x12 \n\x1cMULTIPLE_APP_URLS_FOR_OSTYPE\x10\x1e\x12\x12\n\x0eINVALID_OSTYPE\x10\x1f\x12 \n\x1cINVALID_PROTOCOL_FOR_APP_URL\x10 \x12\"\n\x1eINVALID_PACKAGE_ID_FOR_APP_URL\x10!\x12-\n)URL_CUSTOM_PARAMETERS_COUNT_EXCEEDS_LIMIT\x10\"\x12\x32\n.INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_KEY\x10\'\x12\x34\n0INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_VALUE\x10(\x12-\n)INVALID_TAG_IN_URL_CUSTOM_PARAMETER_VALUE\x10)\x12-\n)REDUNDANT_NESTED_URL_CUSTOM_PARAMETER_TAG\x10*\x12\x14\n\x10MISSING_PROTOCOL\x10+\x12\x0f\n\x0bINVALID_URL\x10,\x12\x1e\n\x1a\x44\x45STINATION_URL_DEPRECATED\x10-\x12\x16\n\x12INVALID_TAG_IN_URL\x10.\x12\x13\n\x0fMISSING_URL_TAG\x10/\x12\x14\n\x10\x44UPLICATE_URL_ID\x10\x30\x12\x12\n\x0eINVALID_URL_ID\x10\x31\x42\xc8\x01\n\"com.google.ads.googleads.v0.errorsB\x12UrlFieldErrorProtoP\x01ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\xa2\x02\x03GAA\xaa\x02\x1eGoogle.Ads.GoogleAds.V0.Errors\xca\x02\x1eGoogle\\Ads\\GoogleAds\\V0\\Errorsb\x06proto3')
+)
+
+
+
+_URLFIELDERRORENUM_URLFIELDERROR = _descriptor.EnumDescriptor(
+ name='UrlFieldError',
+ full_name='google.ads.googleads.v0.errors.UrlFieldErrorEnum.UrlFieldError',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_TRACKING_URL_TEMPLATE', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_TAG_IN_TRACKING_URL_TEMPLATE', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_TRACKING_URL_TEMPLATE_TAG', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_PROTOCOL_IN_TRACKING_URL_TEMPLATE', index=5, number=5,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_PROTOCOL_IN_TRACKING_URL_TEMPLATE', index=6, number=6,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MALFORMED_TRACKING_URL_TEMPLATE', index=7, number=7,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_HOST_IN_TRACKING_URL_TEMPLATE', index=8, number=8,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_TLD_IN_TRACKING_URL_TEMPLATE', index=9, number=9,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REDUNDANT_NESTED_TRACKING_URL_TEMPLATE_TAG', index=10, number=10,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_FINAL_URL', index=11, number=11,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_TAG_IN_FINAL_URL', index=12, number=12,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REDUNDANT_NESTED_FINAL_URL_TAG', index=13, number=13,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_PROTOCOL_IN_FINAL_URL', index=14, number=14,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_PROTOCOL_IN_FINAL_URL', index=15, number=15,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MALFORMED_FINAL_URL', index=16, number=16,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_HOST_IN_FINAL_URL', index=17, number=17,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_TLD_IN_FINAL_URL', index=18, number=18,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_FINAL_MOBILE_URL', index=19, number=19,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_TAG_IN_FINAL_MOBILE_URL', index=20, number=20,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REDUNDANT_NESTED_FINAL_MOBILE_URL_TAG', index=21, number=21,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_PROTOCOL_IN_FINAL_MOBILE_URL', index=22, number=22,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_PROTOCOL_IN_FINAL_MOBILE_URL', index=23, number=23,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MALFORMED_FINAL_MOBILE_URL', index=24, number=24,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_HOST_IN_FINAL_MOBILE_URL', index=25, number=25,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_TLD_IN_FINAL_MOBILE_URL', index=26, number=26,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_FINAL_APP_URL', index=27, number=27,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_TAG_IN_FINAL_APP_URL', index=28, number=28,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REDUNDANT_NESTED_FINAL_APP_URL_TAG', index=29, number=29,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MULTIPLE_APP_URLS_FOR_OSTYPE', index=30, number=30,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_OSTYPE', index=31, number=31,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_PROTOCOL_FOR_APP_URL', index=32, number=32,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_PACKAGE_ID_FOR_APP_URL', index=33, number=33,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='URL_CUSTOM_PARAMETERS_COUNT_EXCEEDS_LIMIT', index=34, number=34,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_KEY', index=35, number=39,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_VALUE', index=36, number=40,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_TAG_IN_URL_CUSTOM_PARAMETER_VALUE', index=37, number=41,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REDUNDANT_NESTED_URL_CUSTOM_PARAMETER_TAG', index=38, number=42,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_PROTOCOL', index=39, number=43,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_URL', index=40, number=44,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DESTINATION_URL_DEPRECATED', index=41, number=45,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_TAG_IN_URL', index=42, number=46,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MISSING_URL_TAG', index=43, number=47,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DUPLICATE_URL_ID', index=44, number=48,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_URL_ID', index=45, number=49,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=117,
+ serialized_end=1718,
+)
+_sym_db.RegisterEnumDescriptor(_URLFIELDERRORENUM_URLFIELDERROR)
+
+
+_URLFIELDERRORENUM = _descriptor.Descriptor(
+ name='UrlFieldErrorEnum',
+ full_name='google.ads.googleads.v0.errors.UrlFieldErrorEnum',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _URLFIELDERRORENUM_URLFIELDERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=95,
+ serialized_end=1718,
+)
+
+_URLFIELDERRORENUM_URLFIELDERROR.containing_type = _URLFIELDERRORENUM
+DESCRIPTOR.message_types_by_name['UrlFieldErrorEnum'] = _URLFIELDERRORENUM
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+UrlFieldErrorEnum = _reflection.GeneratedProtocolMessageType('UrlFieldErrorEnum', (_message.Message,), dict(
+ DESCRIPTOR = _URLFIELDERRORENUM,
+ __module__ = 'google.ads.googleads_v0.proto.errors.url_field_error_pb2'
+ ,
+ __doc__ = """Container for enum describing possible url field errors.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.errors.UrlFieldErrorEnum)
+ ))
+_sym_db.RegisterMessage(UrlFieldErrorEnum)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"com.google.ads.googleads.v0.errorsB\022UrlFieldErrorProtoP\001ZDgoogle.golang.org/genproto/googleapis/ads/googleads/v0/errors;errors\242\002\003GAA\252\002\036Google.Ads.GoogleAds.V0.Errors\312\002\036Google\\Ads\\GoogleAds\\V0\\Errors'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/errors/url_field_error_pb2_grpc.py b/google/ads/google_ads/v0/proto/errors/url_field_error_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/errors/url_field_error_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/resources/__init__.py b/google/ads/google_ads/v0/proto/resources/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/google/ads/google_ads/v0/proto/resources/ad_group_ad_pb2.py b/google/ads/google_ads/v0/proto/resources/ad_group_ad_pb2.py
new file mode 100644
index 000000000..978e5b0dd
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/ad_group_ad_pb2.py
@@ -0,0 +1,116 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/resources/ad_group_ad.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.enums import ad_group_ad_status_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__group__ad__status__pb2
+from google.ads.google_ads.v0.proto.resources import ad_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__pb2
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/resources/ad_group_ad.proto',
+ package='google.ads.googleads.v0.resources',
+ syntax='proto3',
+ serialized_pb=_b('\n9google/ads/googleads_v0/proto/resources/ad_group_ad.proto\x12!google.ads.googleads.v0.resources\x1agoogle/ads/googleads_v0/proto/enums/quality_score_bucket.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\xbc\x12\n\x10\x41\x64GroupCriterion\x12\x15\n\rresource_name\x18\x01 \x01(\t\x12\x31\n\x0c\x63riterion_id\x18\x1a \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12`\n\x06status\x18\x03 \x01(\x0e\x32P.google.ads.googleads.v0.enums.AdGroupCriterionStatusEnum.AdGroupCriterionStatus\x12U\n\x0cquality_info\x18\x04 \x01(\x0b\x32?.google.ads.googleads.v0.resources.AdGroupCriterion.QualityInfo\x12.\n\x08\x61\x64_group\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12L\n\x04type\x18\x19 \x01(\x0e\x32>.google.ads.googleads.v0.enums.CriterionTypeEnum.CriterionType\x12,\n\x08negative\x18\x1f \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x33\n\x0e\x63pc_bid_micros\x18\x10 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x33\n\x0e\x63pm_bid_micros\x18\x11 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x33\n\x0e\x63pv_bid_micros\x18\x18 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12;\n\x16percent_cpc_bid_micros\x18! \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12=\n\x18\x65\x66\x66\x65\x63tive_cpc_bid_micros\x18\x12 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12=\n\x18\x65\x66\x66\x65\x63tive_cpm_bid_micros\x18\x13 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12=\n\x18\x65\x66\x66\x65\x63tive_cpv_bid_micros\x18\x14 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x45\n effective_percent_cpc_bid_micros\x18\" \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12`\n\x18\x65\x66\x66\x65\x63tive_cpc_bid_source\x18\x15 \x01(\x0e\x32>.google.ads.googleads.v0.enums.BiddingSourceEnum.BiddingSource\x12`\n\x18\x65\x66\x66\x65\x63tive_cpm_bid_source\x18\x16 \x01(\x0e\x32>.google.ads.googleads.v0.enums.BiddingSourceEnum.BiddingSource\x12`\n\x18\x65\x66\x66\x65\x63tive_cpv_bid_source\x18\x17 \x01(\x0e\x32>.google.ads.googleads.v0.enums.BiddingSourceEnum.BiddingSource\x12h\n effective_percent_cpc_bid_source\x18# \x01(\x0e\x32>.google.ads.googleads.v0.enums.BiddingSourceEnum.BiddingSource\x12\x61\n\x12position_estimates\x18\n \x01(\x0b\x32\x45.google.ads.googleads.v0.resources.AdGroupCriterion.PositionEstimates\x12\x30\n\nfinal_urls\x18\x0b \x03(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\x15tracking_url_template\x18\r \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12N\n\x15url_custom_parameters\x18\x0e \x03(\x0b\x32/.google.ads.googleads.v0.common.CustomParameter\x12>\n\x07keyword\x18\x1b \x01(\x0b\x32+.google.ads.googleads.v0.common.KeywordInfoH\x00\x12I\n\rlisting_group\x18 \x01(\x0b\x32\x30.google.ads.googleads.v0.common.ListingGroupInfoH\x00\x1a\xff\x02\n\x0bQualityInfo\x12\x32\n\rquality_score\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12h\n\x16\x63reative_quality_score\x18\x02 \x01(\x0e\x32H.google.ads.googleads.v0.enums.QualityScoreBucketEnum.QualityScoreBucket\x12j\n\x18post_click_quality_score\x18\x03 \x01(\x0e\x32H.google.ads.googleads.v0.enums.QualityScoreBucketEnum.QualityScoreBucket\x12\x66\n\x14search_predicted_ctr\x18\x04 \x01(\x0e\x32H.google.ads.googleads.v0.enums.QualityScoreBucketEnum.QualityScoreBucket\x1a\xcc\x01\n\x11PositionEstimates\x12:\n\x15\x66irst_page_cpc_micros\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12>\n\x19\x66irst_position_cpc_micros\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12;\n\x16top_of_page_cpc_micros\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int64ValueB\x0b\n\tcriterionB\xda\x01\n%com.google.ads.googleads.v0.resourcesB\x15\x41\x64GroupCriterionProtoP\x01ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\xa2\x02\x03GAA\xaa\x02!Google.Ads.GoogleAds.V0.Resources\xca\x02!Google\\Ads\\GoogleAds\\V0\\Resourcesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_criteria__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_custom__parameter__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__group__criterion__status__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_bidding__source__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_criterion__type__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_quality__score__bucket__pb2.DESCRIPTOR,google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_ADGROUPCRITERION_QUALITYINFO = _descriptor.Descriptor(
+ name='QualityInfo',
+ full_name='google.ads.googleads.v0.resources.AdGroupCriterion.QualityInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='quality_score', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.QualityInfo.quality_score', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='creative_quality_score', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.QualityInfo.creative_quality_score', index=1,
+ number=2, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='post_click_quality_score', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.QualityInfo.post_click_quality_score', index=2,
+ number=3, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='search_predicted_ctr', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.QualityInfo.search_predicted_ctr', index=3,
+ number=4, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2260,
+ serialized_end=2643,
+)
+
+_ADGROUPCRITERION_POSITIONESTIMATES = _descriptor.Descriptor(
+ name='PositionEstimates',
+ full_name='google.ads.googleads.v0.resources.AdGroupCriterion.PositionEstimates',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='first_page_cpc_micros', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.PositionEstimates.first_page_cpc_micros', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='first_position_cpc_micros', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.PositionEstimates.first_position_cpc_micros', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='top_of_page_cpc_micros', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.PositionEstimates.top_of_page_cpc_micros', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2646,
+ serialized_end=2850,
+)
+
+_ADGROUPCRITERION = _descriptor.Descriptor(
+ name='AdGroupCriterion',
+ full_name='google.ads.googleads.v0.resources.AdGroupCriterion',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='criterion_id', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.criterion_id', index=1,
+ number=26, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='status', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.status', index=2,
+ number=3, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='quality_info', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.quality_info', index=3,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ad_group', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.ad_group', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='type', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.type', index=5,
+ number=25, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='negative', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.negative', index=6,
+ number=31, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cpc_bid_micros', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.cpc_bid_micros', index=7,
+ number=16, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cpm_bid_micros', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.cpm_bid_micros', index=8,
+ number=17, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cpv_bid_micros', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.cpv_bid_micros', index=9,
+ number=24, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='percent_cpc_bid_micros', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.percent_cpc_bid_micros', index=10,
+ number=33, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='effective_cpc_bid_micros', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.effective_cpc_bid_micros', index=11,
+ number=18, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='effective_cpm_bid_micros', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.effective_cpm_bid_micros', index=12,
+ number=19, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='effective_cpv_bid_micros', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.effective_cpv_bid_micros', index=13,
+ number=20, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='effective_percent_cpc_bid_micros', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.effective_percent_cpc_bid_micros', index=14,
+ number=34, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='effective_cpc_bid_source', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.effective_cpc_bid_source', index=15,
+ number=21, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='effective_cpm_bid_source', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.effective_cpm_bid_source', index=16,
+ number=22, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='effective_cpv_bid_source', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.effective_cpv_bid_source', index=17,
+ number=23, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='effective_percent_cpc_bid_source', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.effective_percent_cpc_bid_source', index=18,
+ number=35, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='position_estimates', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.position_estimates', index=19,
+ number=10, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='final_urls', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.final_urls', index=20,
+ number=11, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='tracking_url_template', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.tracking_url_template', index=21,
+ number=13, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='url_custom_parameters', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.url_custom_parameters', index=22,
+ number=14, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='keyword', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.keyword', index=23,
+ number=27, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='listing_group', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.listing_group', index=24,
+ number=32, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[_ADGROUPCRITERION_QUALITYINFO, _ADGROUPCRITERION_POSITIONESTIMATES, ],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='criterion', full_name='google.ads.googleads.v0.resources.AdGroupCriterion.criterion',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=499,
+ serialized_end=2863,
+)
+
+_ADGROUPCRITERION_QUALITYINFO.fields_by_name['quality_score'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT32VALUE
+_ADGROUPCRITERION_QUALITYINFO.fields_by_name['creative_quality_score'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_quality__score__bucket__pb2._QUALITYSCOREBUCKETENUM_QUALITYSCOREBUCKET
+_ADGROUPCRITERION_QUALITYINFO.fields_by_name['post_click_quality_score'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_quality__score__bucket__pb2._QUALITYSCOREBUCKETENUM_QUALITYSCOREBUCKET
+_ADGROUPCRITERION_QUALITYINFO.fields_by_name['search_predicted_ctr'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_quality__score__bucket__pb2._QUALITYSCOREBUCKETENUM_QUALITYSCOREBUCKET
+_ADGROUPCRITERION_QUALITYINFO.containing_type = _ADGROUPCRITERION
+_ADGROUPCRITERION_POSITIONESTIMATES.fields_by_name['first_page_cpc_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ADGROUPCRITERION_POSITIONESTIMATES.fields_by_name['first_position_cpc_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ADGROUPCRITERION_POSITIONESTIMATES.fields_by_name['top_of_page_cpc_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ADGROUPCRITERION_POSITIONESTIMATES.containing_type = _ADGROUPCRITERION
+_ADGROUPCRITERION.fields_by_name['criterion_id'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ADGROUPCRITERION.fields_by_name['status'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__group__criterion__status__pb2._ADGROUPCRITERIONSTATUSENUM_ADGROUPCRITERIONSTATUS
+_ADGROUPCRITERION.fields_by_name['quality_info'].message_type = _ADGROUPCRITERION_QUALITYINFO
+_ADGROUPCRITERION.fields_by_name['ad_group'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_ADGROUPCRITERION.fields_by_name['type'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_criterion__type__pb2._CRITERIONTYPEENUM_CRITERIONTYPE
+_ADGROUPCRITERION.fields_by_name['negative'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_ADGROUPCRITERION.fields_by_name['cpc_bid_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ADGROUPCRITERION.fields_by_name['cpm_bid_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ADGROUPCRITERION.fields_by_name['cpv_bid_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ADGROUPCRITERION.fields_by_name['percent_cpc_bid_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ADGROUPCRITERION.fields_by_name['effective_cpc_bid_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ADGROUPCRITERION.fields_by_name['effective_cpm_bid_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ADGROUPCRITERION.fields_by_name['effective_cpv_bid_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ADGROUPCRITERION.fields_by_name['effective_percent_cpc_bid_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ADGROUPCRITERION.fields_by_name['effective_cpc_bid_source'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_bidding__source__pb2._BIDDINGSOURCEENUM_BIDDINGSOURCE
+_ADGROUPCRITERION.fields_by_name['effective_cpm_bid_source'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_bidding__source__pb2._BIDDINGSOURCEENUM_BIDDINGSOURCE
+_ADGROUPCRITERION.fields_by_name['effective_cpv_bid_source'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_bidding__source__pb2._BIDDINGSOURCEENUM_BIDDINGSOURCE
+_ADGROUPCRITERION.fields_by_name['effective_percent_cpc_bid_source'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_bidding__source__pb2._BIDDINGSOURCEENUM_BIDDINGSOURCE
+_ADGROUPCRITERION.fields_by_name['position_estimates'].message_type = _ADGROUPCRITERION_POSITIONESTIMATES
+_ADGROUPCRITERION.fields_by_name['final_urls'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_ADGROUPCRITERION.fields_by_name['tracking_url_template'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_ADGROUPCRITERION.fields_by_name['url_custom_parameters'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_custom__parameter__pb2._CUSTOMPARAMETER
+_ADGROUPCRITERION.fields_by_name['keyword'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_criteria__pb2._KEYWORDINFO
+_ADGROUPCRITERION.fields_by_name['listing_group'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_criteria__pb2._LISTINGGROUPINFO
+_ADGROUPCRITERION.oneofs_by_name['criterion'].fields.append(
+ _ADGROUPCRITERION.fields_by_name['keyword'])
+_ADGROUPCRITERION.fields_by_name['keyword'].containing_oneof = _ADGROUPCRITERION.oneofs_by_name['criterion']
+_ADGROUPCRITERION.oneofs_by_name['criterion'].fields.append(
+ _ADGROUPCRITERION.fields_by_name['listing_group'])
+_ADGROUPCRITERION.fields_by_name['listing_group'].containing_oneof = _ADGROUPCRITERION.oneofs_by_name['criterion']
+DESCRIPTOR.message_types_by_name['AdGroupCriterion'] = _ADGROUPCRITERION
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+AdGroupCriterion = _reflection.GeneratedProtocolMessageType('AdGroupCriterion', (_message.Message,), dict(
+
+ QualityInfo = _reflection.GeneratedProtocolMessageType('QualityInfo', (_message.Message,), dict(
+ DESCRIPTOR = _ADGROUPCRITERION_QUALITYINFO,
+ __module__ = 'google.ads.googleads_v0.proto.resources.ad_group_criterion_pb2'
+ ,
+ __doc__ = """A container for ad group criterion quality information.
+
+
+ Attributes:
+ quality_score:
+ The quality score. This field may not be populated if Google
+ does not have enough information to determine a value.
+ creative_quality_score:
+ The performance of the ad compared to other advertisers.
+ post_click_quality_score:
+ The quality score of the landing page.
+ search_predicted_ctr:
+ The click-through rate compared to that of other advertisers.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.resources.AdGroupCriterion.QualityInfo)
+ ))
+ ,
+
+ PositionEstimates = _reflection.GeneratedProtocolMessageType('PositionEstimates', (_message.Message,), dict(
+ DESCRIPTOR = _ADGROUPCRITERION_POSITIONESTIMATES,
+ __module__ = 'google.ads.googleads_v0.proto.resources.ad_group_criterion_pb2'
+ ,
+ __doc__ = """Estimates for criterion bids at various positions.
+
+
+ Attributes:
+ first_page_cpc_micros:
+ The estimate of the CPC bid required for ad to be shown on
+ first page of search results.
+ first_position_cpc_micros:
+ The estimate of the CPC bid required for ad to be displayed in
+ first position, at the top of the first page of search
+ results.
+ top_of_page_cpc_micros:
+ The estimate of the CPC bid required for ad to be displayed at
+ the top of the first page of search results.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.resources.AdGroupCriterion.PositionEstimates)
+ ))
+ ,
+ DESCRIPTOR = _ADGROUPCRITERION,
+ __module__ = 'google.ads.googleads_v0.proto.resources.ad_group_criterion_pb2'
+ ,
+ __doc__ = """An ad group criterion.
+
+
+ Attributes:
+ resource_name:
+ The resource name of the ad group criterion. Ad group
+ criterion resource names have the form: ``customers/{customer
+ _id}/adGroupCriteria/{ad_group_id}_{criterion_id}``
+ criterion_id:
+ The ID of the criterion. This field is ignored for mutates.
+ status:
+ The status of the criterion.
+ quality_info:
+ Information regarding the quality of the criterion.
+ ad_group:
+ The ad group to which the criterion belongs. This field must
+ not be used in WHERE clauses.
+ type:
+ The type of the criterion.
+ negative:
+ Whether to target (``false``) or exclude (``true``) the
+ criterion. This field is immutable. To switch a criterion
+ from positive to negative, remove then re-add it.
+ cpc_bid_micros:
+ The CPC (cost-per-click) bid.
+ cpm_bid_micros:
+ The CPM (cost-per-thousand viewable impressions) bid.
+ cpv_bid_micros:
+ The CPV (cost-per-view) bid.
+ percent_cpc_bid_micros:
+ The CPC bid amount, expressed as a fraction of the advertised
+ price for some good or service. The valid range for the
+ fraction is [0,1) and the value stored here is 1,000,000 \*
+ [fraction].
+ effective_cpc_bid_micros:
+ The effective CPC (cost-per-click) bid.
+ effective_cpm_bid_micros:
+ The effective CPM (cost-per-thousand viewable impressions)
+ bid.
+ effective_cpv_bid_micros:
+ The effective CPV (cost-per-view) bid.
+ effective_percent_cpc_bid_micros:
+ The effective Percent CPC bid amount.
+ effective_cpc_bid_source:
+ Source of the effective CPC bid.
+ effective_cpm_bid_source:
+ Source of the effective CPM bid.
+ effective_cpv_bid_source:
+ Source of the effective CPV bid.
+ effective_percent_cpc_bid_source:
+ Source of the effective Percent CPC bid.
+ position_estimates:
+ Estimates for criterion bids at various positions.
+ final_urls:
+ The list of possible final URLs after all cross-domain
+ redirects for the ad.
+ tracking_url_template:
+ The URL template for constructing a tracking URL.
+ url_custom_parameters:
+ The list of mappings used to substitute custom parameter tags
+ in a ``tracking_url_template``, ``final_urls``, or
+ ``mobile_final_urls``.
+ criterion:
+ The ad group criterion. Exactly one must be set.
+ keyword:
+ Keyword.
+ listing_group:
+ Listing group.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.resources.AdGroupCriterion)
+ ))
+_sym_db.RegisterMessage(AdGroupCriterion)
+_sym_db.RegisterMessage(AdGroupCriterion.QualityInfo)
+_sym_db.RegisterMessage(AdGroupCriterion.PositionEstimates)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n%com.google.ads.googleads.v0.resourcesB\025AdGroupCriterionProtoP\001ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\242\002\003GAA\252\002!Google.Ads.GoogleAds.V0.Resources\312\002!Google\\Ads\\GoogleAds\\V0\\Resources'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/resources/ad_group_criterion_pb2_grpc.py b/google/ads/google_ads/v0/proto/resources/ad_group_criterion_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/ad_group_criterion_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/resources/ad_group_pb2.py b/google/ads/google_ads/v0/proto/resources/ad_group_pb2.py
new file mode 100644
index 000000000..755d2b104
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/ad_group_pb2.py
@@ -0,0 +1,230 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/resources/ad_group.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.common import custom_parameter_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_custom__parameter__pb2
+from google.ads.google_ads.v0.proto.enums import ad_group_status_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__group__status__pb2
+from google.ads.google_ads.v0.proto.enums import ad_group_type_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__group__type__pb2
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/resources/ad_group.proto',
+ package='google.ads.googleads.v0.resources',
+ syntax='proto3',
+ serialized_pb=_b('\n6google/ads/googleads_v0/proto/resources/ad_group.proto\x12!google.ads.googleads.v0.resources\x1a;google/ads/googleads_v0/proto/common/custom_parameter.proto\x1a\x39google/ads/googleads_v0/proto/enums/ad_group_status.proto\x1a\x37google/ads/googleads_v0/proto/enums/ad_group_type.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\x99\x06\n\x07\x41\x64Group\x12\x15\n\rresource_name\x18\x01 \x01(\t\x12\'\n\x02id\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12*\n\x04name\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12N\n\x06status\x18\x05 \x01(\x0e\x32>.google.ads.googleads.v0.enums.AdGroupStatusEnum.AdGroupStatus\x12H\n\x04type\x18\x0c \x01(\x0e\x32:.google.ads.googleads.v0.enums.AdGroupTypeEnum.AdGroupType\x12;\n\x15tracking_url_template\x18\r \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12N\n\x15url_custom_parameters\x18\x06 \x03(\x0b\x32/.google.ads.googleads.v0.common.CustomParameter\x12.\n\x08\x63\x61mpaign\x18\n \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\x0e\x63pc_bid_micros\x18\x0e \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x33\n\x0e\x63pm_bid_micros\x18\x0f \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x33\n\x0e\x63pa_bid_micros\x18\x10 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x33\n\x0e\x63pv_bid_micros\x18\x11 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12:\n\x14target_roas_override\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.DoubleValue\x12;\n\x16percent_cpc_bid_micros\x18\x14 \x01(\x0b\x32\x1b.google.protobuf.Int64ValueB\xd1\x01\n%com.google.ads.googleads.v0.resourcesB\x0c\x41\x64GroupProtoP\x01ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\xa2\x02\x03GAA\xaa\x02!Google.Ads.GoogleAds.V0.Resources\xca\x02!Google\\Ads\\GoogleAds\\V0\\Resourcesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_custom__parameter__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__group__status__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__group__type__pb2.DESCRIPTOR,google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_ADGROUP = _descriptor.Descriptor(
+ name='AdGroup',
+ full_name='google.ads.googleads.v0.resources.AdGroup',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.resources.AdGroup.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='id', full_name='google.ads.googleads.v0.resources.AdGroup.id', index=1,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='name', full_name='google.ads.googleads.v0.resources.AdGroup.name', index=2,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='status', full_name='google.ads.googleads.v0.resources.AdGroup.status', index=3,
+ number=5, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='type', full_name='google.ads.googleads.v0.resources.AdGroup.type', index=4,
+ number=12, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='tracking_url_template', full_name='google.ads.googleads.v0.resources.AdGroup.tracking_url_template', index=5,
+ number=13, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='url_custom_parameters', full_name='google.ads.googleads.v0.resources.AdGroup.url_custom_parameters', index=6,
+ number=6, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='campaign', full_name='google.ads.googleads.v0.resources.AdGroup.campaign', index=7,
+ number=10, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cpc_bid_micros', full_name='google.ads.googleads.v0.resources.AdGroup.cpc_bid_micros', index=8,
+ number=14, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cpm_bid_micros', full_name='google.ads.googleads.v0.resources.AdGroup.cpm_bid_micros', index=9,
+ number=15, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cpa_bid_micros', full_name='google.ads.googleads.v0.resources.AdGroup.cpa_bid_micros', index=10,
+ number=16, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cpv_bid_micros', full_name='google.ads.googleads.v0.resources.AdGroup.cpv_bid_micros', index=11,
+ number=17, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='target_roas_override', full_name='google.ads.googleads.v0.resources.AdGroup.target_roas_override', index=12,
+ number=19, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='percent_cpc_bid_micros', full_name='google.ads.googleads.v0.resources.AdGroup.percent_cpc_bid_micros', index=13,
+ number=20, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=303,
+ serialized_end=1096,
+)
+
+_ADGROUP.fields_by_name['id'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ADGROUP.fields_by_name['name'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_ADGROUP.fields_by_name['status'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__group__status__pb2._ADGROUPSTATUSENUM_ADGROUPSTATUS
+_ADGROUP.fields_by_name['type'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__group__type__pb2._ADGROUPTYPEENUM_ADGROUPTYPE
+_ADGROUP.fields_by_name['tracking_url_template'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_ADGROUP.fields_by_name['url_custom_parameters'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_custom__parameter__pb2._CUSTOMPARAMETER
+_ADGROUP.fields_by_name['campaign'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_ADGROUP.fields_by_name['cpc_bid_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ADGROUP.fields_by_name['cpm_bid_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ADGROUP.fields_by_name['cpa_bid_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ADGROUP.fields_by_name['cpv_bid_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_ADGROUP.fields_by_name['target_roas_override'].message_type = google_dot_protobuf_dot_wrappers__pb2._DOUBLEVALUE
+_ADGROUP.fields_by_name['percent_cpc_bid_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+DESCRIPTOR.message_types_by_name['AdGroup'] = _ADGROUP
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+AdGroup = _reflection.GeneratedProtocolMessageType('AdGroup', (_message.Message,), dict(
+ DESCRIPTOR = _ADGROUP,
+ __module__ = 'google.ads.googleads_v0.proto.resources.ad_group_pb2'
+ ,
+ __doc__ = """An ad group.
+
+
+ Attributes:
+ resource_name:
+ The resource name of the ad group. Ad group resource names
+ have the form:
+ ``customers/{customer_id}/adGroups/{ad_group_id}``
+ id:
+ The ID of the ad group.
+ name:
+ The name of the ad group. This field is required and should
+ not be empty when creating new ad groups. It must contain
+ fewer than 255 UTF-8 full-width characters. It must not
+ contain any null (code point 0x0), NL line feed (code point
+ 0xA) or carriage return (code point 0xD) characters.
+ status:
+ The status of the ad group.
+ type:
+ The type of the ad group.
+ tracking_url_template:
+ The URL template for constructing a tracking URL.
+ url_custom_parameters:
+ The list of mappings used to substitute custom parameter tags
+ in a ``tracking_url_template``, ``final_urls``, or
+ ``mobile_final_urls``.
+ campaign:
+ The campaign to which the ad group belongs. This field must
+ not be used in WHERE clauses.
+ cpc_bid_micros:
+ The maximum CPC (cost-per-click) bid.
+ cpm_bid_micros:
+ The maximum CPM (cost-per-thousand viewable impressions) bid.
+ cpa_bid_micros:
+ The target cost-per-acquisition (conversion) bid.
+ cpv_bid_micros:
+ The CPV (cost-per-view) bid.
+ target_roas_override:
+ The target return on ad spend (ROAS) override. If the ad
+ group's campaign bidding strategy is a standard Target ROAS
+ strategy, then this field overrides the target ROAS specified
+ in the campaign's bidding strategy. Otherwise, this value is
+ ignored.
+ percent_cpc_bid_micros:
+ The percent cpc bid amount, expressed as a fraction of the
+ advertised price for some good or service. The valid range for
+ the fraction is [0,1) and the value stored here is 1,000,000
+ \* [fraction].
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.resources.AdGroup)
+ ))
+_sym_db.RegisterMessage(AdGroup)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n%com.google.ads.googleads.v0.resourcesB\014AdGroupProtoP\001ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\242\002\003GAA\252\002!Google.Ads.GoogleAds.V0.Resources\312\002!Google\\Ads\\GoogleAds\\V0\\Resources'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/resources/ad_group_pb2_grpc.py b/google/ads/google_ads/v0/proto/resources/ad_group_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/ad_group_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/resources/ad_pb2.py b/google/ads/google_ads/v0/proto/resources/ad_pb2.py
new file mode 100644
index 000000000..518084479
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/ad_pb2.py
@@ -0,0 +1,251 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/resources/ad.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.common import ad_type_infos_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_ad__type__infos__pb2
+from google.ads.google_ads.v0.proto.common import custom_parameter_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_custom__parameter__pb2
+from google.ads.google_ads.v0.proto.enums import ad_type_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__type__pb2
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/resources/ad.proto',
+ package='google.ads.googleads.v0.resources',
+ syntax='proto3',
+ serialized_pb=_b('\n0google/ads/googleads_v0/proto/resources/ad.proto\x12!google.ads.googleads.v0.resources\x1a\x38google/ads/googleads_v0/proto/common/ad_type_infos.proto\x1a;google/ads/googleads_v0/proto/common/custom_parameter.proto\x1a\x31google/ads/googleads_v0/proto/enums/ad_type.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\xca\x07\n\x02\x41\x64\x12\'\n\x02id\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x30\n\nfinal_urls\x18\x02 \x03(\x0b\x32\x1c.google.protobuf.StringValue\x12\x37\n\x11\x66inal_mobile_urls\x18\x10 \x03(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\x15tracking_url_template\x18\x0c \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12N\n\x15url_custom_parameters\x18\n \x03(\x0b\x32/.google.ads.googleads.v0.common.CustomParameter\x12\x31\n\x0b\x64isplay_url\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12>\n\x04type\x18\x05 \x01(\x0e\x32\x30.google.ads.googleads.v0.enums.AdTypeEnum.AdType\x12=\n\x07text_ad\x18\x06 \x01(\x0b\x32*.google.ads.googleads.v0.common.TextAdInfoH\x00\x12N\n\x10\x65xpanded_text_ad\x18\x07 \x01(\x0b\x32\x32.google.ads.googleads.v0.common.ExpandedTextAdInfoH\x00\x12P\n\x11\x64ynamic_search_ad\x18\x08 \x01(\x0b\x32\x33.google.ads.googleads.v0.common.DynamicSearchAdInfoH\x00\x12X\n\x15responsive_display_ad\x18\t \x01(\x0b\x32\x37.google.ads.googleads.v0.common.ResponsiveDisplayAdInfoH\x00\x12\x46\n\x0c\x63\x61ll_only_ad\x18\r \x01(\x0b\x32..google.ads.googleads.v0.common.CallOnlyAdInfoH\x00\x12\x61\n\x1a\x65xpanded_dynamic_search_ad\x18\x0e \x01(\x0b\x32;.google.ads.googleads.v0.common.ExpandedDynamicSearchAdInfoH\x00\x12?\n\x08hotel_ad\x18\x0f \x01(\x0b\x32+.google.ads.googleads.v0.common.HotelAdInfoH\x00\x42\t\n\x07\x61\x64_dataB\xcc\x01\n%com.google.ads.googleads.v0.resourcesB\x07\x41\x64ProtoP\x01ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\xa2\x02\x03GAA\xaa\x02!Google.Ads.GoogleAds.V0.Resources\xca\x02!Google\\Ads\\GoogleAds\\V0\\Resourcesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_ad__type__infos__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_custom__parameter__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__type__pb2.DESCRIPTOR,google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_AD = _descriptor.Descriptor(
+ name='Ad',
+ full_name='google.ads.googleads.v0.resources.Ad',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='id', full_name='google.ads.googleads.v0.resources.Ad.id', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='final_urls', full_name='google.ads.googleads.v0.resources.Ad.final_urls', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='final_mobile_urls', full_name='google.ads.googleads.v0.resources.Ad.final_mobile_urls', index=2,
+ number=16, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='tracking_url_template', full_name='google.ads.googleads.v0.resources.Ad.tracking_url_template', index=3,
+ number=12, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='url_custom_parameters', full_name='google.ads.googleads.v0.resources.Ad.url_custom_parameters', index=4,
+ number=10, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='display_url', full_name='google.ads.googleads.v0.resources.Ad.display_url', index=5,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='type', full_name='google.ads.googleads.v0.resources.Ad.type', index=6,
+ number=5, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='text_ad', full_name='google.ads.googleads.v0.resources.Ad.text_ad', index=7,
+ number=6, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='expanded_text_ad', full_name='google.ads.googleads.v0.resources.Ad.expanded_text_ad', index=8,
+ number=7, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='dynamic_search_ad', full_name='google.ads.googleads.v0.resources.Ad.dynamic_search_ad', index=9,
+ number=8, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='responsive_display_ad', full_name='google.ads.googleads.v0.resources.Ad.responsive_display_ad', index=10,
+ number=9, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='call_only_ad', full_name='google.ads.googleads.v0.resources.Ad.call_only_ad', index=11,
+ number=13, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='expanded_dynamic_search_ad', full_name='google.ads.googleads.v0.resources.Ad.expanded_dynamic_search_ad', index=12,
+ number=14, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='hotel_ad', full_name='google.ads.googleads.v0.resources.Ad.hotel_ad', index=13,
+ number=15, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='ad_data', full_name='google.ads.googleads.v0.resources.Ad.ad_data',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=290,
+ serialized_end=1260,
+)
+
+_AD.fields_by_name['id'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_AD.fields_by_name['final_urls'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_AD.fields_by_name['final_mobile_urls'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_AD.fields_by_name['tracking_url_template'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_AD.fields_by_name['url_custom_parameters'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_custom__parameter__pb2._CUSTOMPARAMETER
+_AD.fields_by_name['display_url'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_AD.fields_by_name['type'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__type__pb2._ADTYPEENUM_ADTYPE
+_AD.fields_by_name['text_ad'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_ad__type__infos__pb2._TEXTADINFO
+_AD.fields_by_name['expanded_text_ad'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_ad__type__infos__pb2._EXPANDEDTEXTADINFO
+_AD.fields_by_name['dynamic_search_ad'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_ad__type__infos__pb2._DYNAMICSEARCHADINFO
+_AD.fields_by_name['responsive_display_ad'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_ad__type__infos__pb2._RESPONSIVEDISPLAYADINFO
+_AD.fields_by_name['call_only_ad'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_ad__type__infos__pb2._CALLONLYADINFO
+_AD.fields_by_name['expanded_dynamic_search_ad'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_ad__type__infos__pb2._EXPANDEDDYNAMICSEARCHADINFO
+_AD.fields_by_name['hotel_ad'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_ad__type__infos__pb2._HOTELADINFO
+_AD.oneofs_by_name['ad_data'].fields.append(
+ _AD.fields_by_name['text_ad'])
+_AD.fields_by_name['text_ad'].containing_oneof = _AD.oneofs_by_name['ad_data']
+_AD.oneofs_by_name['ad_data'].fields.append(
+ _AD.fields_by_name['expanded_text_ad'])
+_AD.fields_by_name['expanded_text_ad'].containing_oneof = _AD.oneofs_by_name['ad_data']
+_AD.oneofs_by_name['ad_data'].fields.append(
+ _AD.fields_by_name['dynamic_search_ad'])
+_AD.fields_by_name['dynamic_search_ad'].containing_oneof = _AD.oneofs_by_name['ad_data']
+_AD.oneofs_by_name['ad_data'].fields.append(
+ _AD.fields_by_name['responsive_display_ad'])
+_AD.fields_by_name['responsive_display_ad'].containing_oneof = _AD.oneofs_by_name['ad_data']
+_AD.oneofs_by_name['ad_data'].fields.append(
+ _AD.fields_by_name['call_only_ad'])
+_AD.fields_by_name['call_only_ad'].containing_oneof = _AD.oneofs_by_name['ad_data']
+_AD.oneofs_by_name['ad_data'].fields.append(
+ _AD.fields_by_name['expanded_dynamic_search_ad'])
+_AD.fields_by_name['expanded_dynamic_search_ad'].containing_oneof = _AD.oneofs_by_name['ad_data']
+_AD.oneofs_by_name['ad_data'].fields.append(
+ _AD.fields_by_name['hotel_ad'])
+_AD.fields_by_name['hotel_ad'].containing_oneof = _AD.oneofs_by_name['ad_data']
+DESCRIPTOR.message_types_by_name['Ad'] = _AD
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+Ad = _reflection.GeneratedProtocolMessageType('Ad', (_message.Message,), dict(
+ DESCRIPTOR = _AD,
+ __module__ = 'google.ads.googleads_v0.proto.resources.ad_pb2'
+ ,
+ __doc__ = """An ad.
+
+
+ Attributes:
+ id:
+ The ID of the ad.
+ final_urls:
+ The list of possible final URLs after all cross-domain
+ redirects for the ad.
+ final_mobile_urls:
+ The list of possible final mobile URLs after all cross-domain
+ redirects for the ad.
+ tracking_url_template:
+ The URL template for constructing a tracking URL.
+ url_custom_parameters:
+ The list of mappings that can be used to substitute custom
+ parameter tags in a ``tracking_url_template``, ``final_urls``,
+ or ``mobile_final_urls``.
+ display_url:
+ The URL that appears in the ad description for some ad
+ formats.
+ type:
+ The type of ad.
+ ad_data:
+ Details pertinent to the ad type. Exactly one value must be
+ set.
+ text_ad:
+ Details pertaining to a text ad.
+ expanded_text_ad:
+ Details pertaining to an expanded text ad.
+ dynamic_search_ad:
+ Details pertaining to a Dynamic Search Ad.
+ responsive_display_ad:
+ Details pertaining to a responsive display ad.
+ call_only_ad:
+ Details pertaining to a call-only ad.
+ expanded_dynamic_search_ad:
+ Details pertaining to an Expanded Dynamic Search Ad. This type
+ of ad has its headline, final URLs, and display URL auto-
+ generated at serving time according to domain name specific
+ information provided by ``dynamic_search_ads_setting`` linked
+ at the campaign level.
+ hotel_ad:
+ Details pertaining to a hotel ad.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.resources.Ad)
+ ))
+_sym_db.RegisterMessage(Ad)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n%com.google.ads.googleads.v0.resourcesB\007AdProtoP\001ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\242\002\003GAA\252\002!Google.Ads.GoogleAds.V0.Resources\312\002!Google\\Ads\\GoogleAds\\V0\\Resources'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/resources/ad_pb2_grpc.py b/google/ads/google_ads/v0/proto/resources/ad_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/ad_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/resources/bidding_strategy_pb2.py b/google/ads/google_ads/v0/proto/resources/bidding_strategy_pb2.py
new file mode 100644
index 000000000..61cc5c1c1
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/bidding_strategy_pb2.py
@@ -0,0 +1,212 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/resources/bidding_strategy.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.common import bidding_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2
+from google.ads.google_ads.v0.proto.enums import bidding_strategy_type_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_bidding__strategy__type__pb2
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/resources/bidding_strategy.proto',
+ package='google.ads.googleads.v0.resources',
+ syntax='proto3',
+ serialized_pb=_b('\n>google/ads/googleads_v0/proto/resources/bidding_strategy.proto\x12!google.ads.googleads.v0.resources\x1a\x32google/ads/googleads_v0/proto/common/bidding.proto\x1a?google/ads/googleads_v0/proto/enums/bidding_strategy_type.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\x91\x05\n\x0f\x42iddingStrategy\x12\x15\n\rresource_name\x18\x01 \x01(\t\x12\'\n\x02id\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12*\n\x04name\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12X\n\x04type\x18\x05 \x01(\x0e\x32J.google.ads.googleads.v0.enums.BiddingStrategyTypeEnum.BiddingStrategyType\x12\x43\n\x0c\x65nhanced_cpc\x18\x07 \x01(\x0b\x32+.google.ads.googleads.v0.common.EnhancedCpcH\x00\x12L\n\x11page_one_promoted\x18\x08 \x01(\x0b\x32/.google.ads.googleads.v0.common.PageOnePromotedH\x00\x12?\n\ntarget_cpa\x18\t \x01(\x0b\x32).google.ads.googleads.v0.common.TargetCpaH\x00\x12R\n\x14target_outrank_share\x18\n \x01(\x0b\x32\x32.google.ads.googleads.v0.common.TargetOutrankShareH\x00\x12\x41\n\x0btarget_roas\x18\x0b \x01(\x0b\x32*.google.ads.googleads.v0.common.TargetRoasH\x00\x12\x43\n\x0ctarget_spend\x18\x0c \x01(\x0b\x32+.google.ads.googleads.v0.common.TargetSpendH\x00\x42\x08\n\x06schemeB\xd9\x01\n%com.google.ads.googleads.v0.resourcesB\x14\x42iddingStrategyProtoP\x01ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\xa2\x02\x03GAA\xaa\x02!Google.Ads.GoogleAds.V0.Resources\xca\x02!Google\\Ads\\GoogleAds\\V0\\Resourcesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_bidding__strategy__type__pb2.DESCRIPTOR,google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_BIDDINGSTRATEGY = _descriptor.Descriptor(
+ name='BiddingStrategy',
+ full_name='google.ads.googleads.v0.resources.BiddingStrategy',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.resources.BiddingStrategy.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='id', full_name='google.ads.googleads.v0.resources.BiddingStrategy.id', index=1,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='name', full_name='google.ads.googleads.v0.resources.BiddingStrategy.name', index=2,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='type', full_name='google.ads.googleads.v0.resources.BiddingStrategy.type', index=3,
+ number=5, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='enhanced_cpc', full_name='google.ads.googleads.v0.resources.BiddingStrategy.enhanced_cpc', index=4,
+ number=7, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='page_one_promoted', full_name='google.ads.googleads.v0.resources.BiddingStrategy.page_one_promoted', index=5,
+ number=8, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='target_cpa', full_name='google.ads.googleads.v0.resources.BiddingStrategy.target_cpa', index=6,
+ number=9, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='target_outrank_share', full_name='google.ads.googleads.v0.resources.BiddingStrategy.target_outrank_share', index=7,
+ number=10, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='target_roas', full_name='google.ads.googleads.v0.resources.BiddingStrategy.target_roas', index=8,
+ number=11, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='target_spend', full_name='google.ads.googleads.v0.resources.BiddingStrategy.target_spend', index=9,
+ number=12, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='scheme', full_name='google.ads.googleads.v0.resources.BiddingStrategy.scheme',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=251,
+ serialized_end=908,
+)
+
+_BIDDINGSTRATEGY.fields_by_name['id'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_BIDDINGSTRATEGY.fields_by_name['name'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_BIDDINGSTRATEGY.fields_by_name['type'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_bidding__strategy__type__pb2._BIDDINGSTRATEGYTYPEENUM_BIDDINGSTRATEGYTYPE
+_BIDDINGSTRATEGY.fields_by_name['enhanced_cpc'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2._ENHANCEDCPC
+_BIDDINGSTRATEGY.fields_by_name['page_one_promoted'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2._PAGEONEPROMOTED
+_BIDDINGSTRATEGY.fields_by_name['target_cpa'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2._TARGETCPA
+_BIDDINGSTRATEGY.fields_by_name['target_outrank_share'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2._TARGETOUTRANKSHARE
+_BIDDINGSTRATEGY.fields_by_name['target_roas'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2._TARGETROAS
+_BIDDINGSTRATEGY.fields_by_name['target_spend'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2._TARGETSPEND
+_BIDDINGSTRATEGY.oneofs_by_name['scheme'].fields.append(
+ _BIDDINGSTRATEGY.fields_by_name['enhanced_cpc'])
+_BIDDINGSTRATEGY.fields_by_name['enhanced_cpc'].containing_oneof = _BIDDINGSTRATEGY.oneofs_by_name['scheme']
+_BIDDINGSTRATEGY.oneofs_by_name['scheme'].fields.append(
+ _BIDDINGSTRATEGY.fields_by_name['page_one_promoted'])
+_BIDDINGSTRATEGY.fields_by_name['page_one_promoted'].containing_oneof = _BIDDINGSTRATEGY.oneofs_by_name['scheme']
+_BIDDINGSTRATEGY.oneofs_by_name['scheme'].fields.append(
+ _BIDDINGSTRATEGY.fields_by_name['target_cpa'])
+_BIDDINGSTRATEGY.fields_by_name['target_cpa'].containing_oneof = _BIDDINGSTRATEGY.oneofs_by_name['scheme']
+_BIDDINGSTRATEGY.oneofs_by_name['scheme'].fields.append(
+ _BIDDINGSTRATEGY.fields_by_name['target_outrank_share'])
+_BIDDINGSTRATEGY.fields_by_name['target_outrank_share'].containing_oneof = _BIDDINGSTRATEGY.oneofs_by_name['scheme']
+_BIDDINGSTRATEGY.oneofs_by_name['scheme'].fields.append(
+ _BIDDINGSTRATEGY.fields_by_name['target_roas'])
+_BIDDINGSTRATEGY.fields_by_name['target_roas'].containing_oneof = _BIDDINGSTRATEGY.oneofs_by_name['scheme']
+_BIDDINGSTRATEGY.oneofs_by_name['scheme'].fields.append(
+ _BIDDINGSTRATEGY.fields_by_name['target_spend'])
+_BIDDINGSTRATEGY.fields_by_name['target_spend'].containing_oneof = _BIDDINGSTRATEGY.oneofs_by_name['scheme']
+DESCRIPTOR.message_types_by_name['BiddingStrategy'] = _BIDDINGSTRATEGY
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+BiddingStrategy = _reflection.GeneratedProtocolMessageType('BiddingStrategy', (_message.Message,), dict(
+ DESCRIPTOR = _BIDDINGSTRATEGY,
+ __module__ = 'google.ads.googleads_v0.proto.resources.bidding_strategy_pb2'
+ ,
+ __doc__ = """A bidding strategy.
+
+
+ Attributes:
+ resource_name:
+ The resource name of the bidding strategy. Bidding strategy
+ resource names have the form: ``customers/{customer_id}/biddi
+ ngStrategies/{bidding_strategy_id}``
+ id:
+ The ID of the bidding strategy.
+ name:
+ The name of the bidding strategy. All bidding strategies
+ within an account must be named distinctly. The length of
+ this string should be between 1 and 255, inclusive, in UTF-8
+ bytes, (trimmed).
+ type:
+ The type of the bidding strategy. Create a bidding strategy by
+ setting the bidding scheme. This field is read-only.
+ scheme:
+ The bidding scheme. Only one can be set.
+ enhanced_cpc:
+ A bidding strategy that raises bids for clicks that seem more
+ likely to lead to a conversion and lowers them for clicks
+ where they seem less likely.
+ page_one_promoted:
+ A bidding strategy that sets max CPC bids to target
+ impressions on page one or page one promoted slots on
+ google.com.
+ target_cpa:
+ A bidding strategy that sets bids to help get as many
+ conversions as possible at the target cost-per-acquisition
+ (CPA) you set.
+ target_outrank_share:
+ A bidding strategy that sets bids based on the target fraction
+ of auctions where the advertiser should outrank a specific
+ competitor.
+ target_roas:
+ A bidding strategy that helps you maximize revenue while
+ averaging a specific target Return On Ad Spend (ROAS).
+ target_spend:
+ A bid strategy that sets your bids to help get as many clicks
+ as possible within your budget.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.resources.BiddingStrategy)
+ ))
+_sym_db.RegisterMessage(BiddingStrategy)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n%com.google.ads.googleads.v0.resourcesB\024BiddingStrategyProtoP\001ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\242\002\003GAA\252\002!Google.Ads.GoogleAds.V0.Resources\312\002!Google\\Ads\\GoogleAds\\V0\\Resources'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/resources/bidding_strategy_pb2_grpc.py b/google/ads/google_ads/v0/proto/resources/bidding_strategy_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/bidding_strategy_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/resources/campaign_budget_pb2.py b/google/ads/google_ads/v0/proto/resources/campaign_budget_pb2.py
new file mode 100644
index 000000000..e828ac1cd
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/campaign_budget_pb2.py
@@ -0,0 +1,179 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/resources/campaign_budget.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.enums import budget_delivery_method_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_budget__delivery__method__pb2
+from google.ads.google_ads.v0.proto.enums import budget_status_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_budget__status__pb2
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/resources/campaign_budget.proto',
+ package='google.ads.googleads.v0.resources',
+ syntax='proto3',
+ serialized_pb=_b('\n=google/ads/googleads_v0/proto/resources/campaign_budget.proto\x12!google.ads.googleads.v0.resources\x1a@google/ads/googleads_v0/proto/enums/budget_delivery_method.proto\x1a\x37google/ads/googleads_v0/proto/enums/budget_status.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\xd2\x03\n\x0e\x43\x61mpaignBudget\x12\x15\n\rresource_name\x18\x01 \x01(\t\x12\'\n\x02id\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12*\n\x04name\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\ramount_micros\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12L\n\x06status\x18\x06 \x01(\x0e\x32<.google.ads.googleads.v0.enums.BudgetStatusEnum.BudgetStatus\x12\x65\n\x0f\x64\x65livery_method\x18\x07 \x01(\x0e\x32L.google.ads.googleads.v0.enums.BudgetDeliveryMethodEnum.BudgetDeliveryMethod\x12\x35\n\x11\x65xplicitly_shared\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x34\n\x0freference_count\x18\t \x01(\x0b\x32\x1b.google.protobuf.Int64ValueB\xd8\x01\n%com.google.ads.googleads.v0.resourcesB\x13\x43\x61mpaignBudgetProtoP\x01ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\xa2\x02\x03GAA\xaa\x02!Google.Ads.GoogleAds.V0.Resources\xca\x02!Google\\Ads\\GoogleAds\\V0\\Resourcesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_budget__delivery__method__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_budget__status__pb2.DESCRIPTOR,google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_CAMPAIGNBUDGET = _descriptor.Descriptor(
+ name='CampaignBudget',
+ full_name='google.ads.googleads.v0.resources.CampaignBudget',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.resources.CampaignBudget.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='id', full_name='google.ads.googleads.v0.resources.CampaignBudget.id', index=1,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='name', full_name='google.ads.googleads.v0.resources.CampaignBudget.name', index=2,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='amount_micros', full_name='google.ads.googleads.v0.resources.CampaignBudget.amount_micros', index=3,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='status', full_name='google.ads.googleads.v0.resources.CampaignBudget.status', index=4,
+ number=6, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='delivery_method', full_name='google.ads.googleads.v0.resources.CampaignBudget.delivery_method', index=5,
+ number=7, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='explicitly_shared', full_name='google.ads.googleads.v0.resources.CampaignBudget.explicitly_shared', index=6,
+ number=8, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='reference_count', full_name='google.ads.googleads.v0.resources.CampaignBudget.reference_count', index=7,
+ number=9, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=256,
+ serialized_end=722,
+)
+
+_CAMPAIGNBUDGET.fields_by_name['id'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_CAMPAIGNBUDGET.fields_by_name['name'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CAMPAIGNBUDGET.fields_by_name['amount_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_CAMPAIGNBUDGET.fields_by_name['status'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_budget__status__pb2._BUDGETSTATUSENUM_BUDGETSTATUS
+_CAMPAIGNBUDGET.fields_by_name['delivery_method'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_budget__delivery__method__pb2._BUDGETDELIVERYMETHODENUM_BUDGETDELIVERYMETHOD
+_CAMPAIGNBUDGET.fields_by_name['explicitly_shared'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_CAMPAIGNBUDGET.fields_by_name['reference_count'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+DESCRIPTOR.message_types_by_name['CampaignBudget'] = _CAMPAIGNBUDGET
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+CampaignBudget = _reflection.GeneratedProtocolMessageType('CampaignBudget', (_message.Message,), dict(
+ DESCRIPTOR = _CAMPAIGNBUDGET,
+ __module__ = 'google.ads.googleads_v0.proto.resources.campaign_budget_pb2'
+ ,
+ __doc__ = """A campaign budget.
+
+
+ Attributes:
+ resource_name:
+ The resource name of the campaign budget. Campaign budget
+ resource names have the form:
+ ``customers/{customer_id}/campaignBudgets/{budget_id}``
+ id:
+ The ID of the campaign budget. A campaign budget is created
+ using the CampaignBudgetService create operation and is
+ assigned a budget ID. A budget ID can be shared across
+ different campaigns; the system will then allocate the
+ campaign budget among different campaigns to get optimum
+ results.
+ name:
+ The name of the campaign budget. When creating a campaign
+ budget through CampaignBudgetService, every explicitly shared
+ campaign budget must have a non-null, non-empty name. Campaign
+ budgets that are not explicitly shared derive their name from
+ the attached campaign's name. The length of this string must
+ be between 1 and 255, inclusive, in UTF-8 bytes, (trimmed).
+ amount_micros:
+ The amount of the budget, in the local currency for the
+ account. Amount is specified in micros, where one million is
+ equivalent to one currency unit.
+ status:
+ The status of this campaign budget. This field is read-only.
+ delivery_method:
+ The delivery method that determines the rate at which the
+ campaign budget is spent. Defaults to STANDARD if unspecified
+ in a create operation.
+ explicitly_shared:
+ Whether the budget is explicitly shared. This field is set to
+ false by default. If true, the budget was created with the
+ purpose of sharing across one or more campaigns. If false,
+ the budget was created with the intention of only being used
+ with a single campaign. The budget's name and status will stay
+ in sync with the campaign's name and status. Attempting to
+ share the budget with a second campaign will result in an
+ error. A non-shared budget can become an explicitly shared.
+ The same operation must also assign the budget a name. A
+ shared campaign budget can never become non-shared.
+ reference_count:
+ The number of campaigns actively using the budget. This field
+ is read-only.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.resources.CampaignBudget)
+ ))
+_sym_db.RegisterMessage(CampaignBudget)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n%com.google.ads.googleads.v0.resourcesB\023CampaignBudgetProtoP\001ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\242\002\003GAA\252\002!Google.Ads.GoogleAds.V0.Resources\312\002!Google\\Ads\\GoogleAds\\V0\\Resources'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/resources/campaign_budget_pb2_grpc.py b/google/ads/google_ads/v0/proto/resources/campaign_budget_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/campaign_budget_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/resources/campaign_criterion_pb2.py b/google/ads/google_ads/v0/proto/resources/campaign_criterion_pb2.py
new file mode 100644
index 000000000..abf2b9df0
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/campaign_criterion_pb2.py
@@ -0,0 +1,184 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/resources/campaign_criterion.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.common import criteria_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_criteria__pb2
+from google.ads.google_ads.v0.proto.enums import criterion_type_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_criterion__type__pb2
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/resources/campaign_criterion.proto',
+ package='google.ads.googleads.v0.resources',
+ syntax='proto3',
+ serialized_pb=_b('\n@google/ads/googleads_v0/proto/resources/campaign_criterion.proto\x12!google.ads.googleads.v0.resources\x1a\x33google/ads/googleads_v0/proto/common/criteria.proto\x1a\x38google/ads/googleads_v0/proto/enums/criterion_type.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\x8d\x04\n\x11\x43\x61mpaignCriterion\x12\x15\n\rresource_name\x18\x01 \x01(\t\x12.\n\x08\x63\x61mpaign\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0c\x63riterion_id\x18\x05 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x31\n\x0c\x62id_modifier\x18\x0e \x01(\x0b\x32\x1b.google.protobuf.FloatValue\x12,\n\x08negative\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12L\n\x04type\x18\x06 \x01(\x0e\x32>.google.ads.googleads.v0.enums.CriterionTypeEnum.CriterionType\x12>\n\x07keyword\x18\x08 \x01(\x0b\x32+.google.ads.googleads.v0.common.KeywordInfoH\x00\x12@\n\x08location\x18\x0c \x01(\x0b\x32,.google.ads.googleads.v0.common.LocationInfoH\x00\x12@\n\x08platform\x18\r \x01(\x0b\x32,.google.ads.googleads.v0.common.PlatformInfoH\x00\x42\x0b\n\tcriterionB\xdb\x01\n%com.google.ads.googleads.v0.resourcesB\x16\x43\x61mpaignCriterionProtoP\x01ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\xa2\x02\x03GAA\xaa\x02!Google.Ads.GoogleAds.V0.Resources\xca\x02!Google\\Ads\\GoogleAds\\V0\\Resourcesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_criteria__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_criterion__type__pb2.DESCRIPTOR,google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_CAMPAIGNCRITERION = _descriptor.Descriptor(
+ name='CampaignCriterion',
+ full_name='google.ads.googleads.v0.resources.CampaignCriterion',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.resources.CampaignCriterion.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='campaign', full_name='google.ads.googleads.v0.resources.CampaignCriterion.campaign', index=1,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='criterion_id', full_name='google.ads.googleads.v0.resources.CampaignCriterion.criterion_id', index=2,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='bid_modifier', full_name='google.ads.googleads.v0.resources.CampaignCriterion.bid_modifier', index=3,
+ number=14, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='negative', full_name='google.ads.googleads.v0.resources.CampaignCriterion.negative', index=4,
+ number=7, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='type', full_name='google.ads.googleads.v0.resources.CampaignCriterion.type', index=5,
+ number=6, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='keyword', full_name='google.ads.googleads.v0.resources.CampaignCriterion.keyword', index=6,
+ number=8, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='location', full_name='google.ads.googleads.v0.resources.CampaignCriterion.location', index=7,
+ number=12, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='platform', full_name='google.ads.googleads.v0.resources.CampaignCriterion.platform', index=8,
+ number=13, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='criterion', full_name='google.ads.googleads.v0.resources.CampaignCriterion.criterion',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=247,
+ serialized_end=772,
+)
+
+_CAMPAIGNCRITERION.fields_by_name['campaign'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CAMPAIGNCRITERION.fields_by_name['criterion_id'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_CAMPAIGNCRITERION.fields_by_name['bid_modifier'].message_type = google_dot_protobuf_dot_wrappers__pb2._FLOATVALUE
+_CAMPAIGNCRITERION.fields_by_name['negative'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_CAMPAIGNCRITERION.fields_by_name['type'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_criterion__type__pb2._CRITERIONTYPEENUM_CRITERIONTYPE
+_CAMPAIGNCRITERION.fields_by_name['keyword'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_criteria__pb2._KEYWORDINFO
+_CAMPAIGNCRITERION.fields_by_name['location'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_criteria__pb2._LOCATIONINFO
+_CAMPAIGNCRITERION.fields_by_name['platform'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_criteria__pb2._PLATFORMINFO
+_CAMPAIGNCRITERION.oneofs_by_name['criterion'].fields.append(
+ _CAMPAIGNCRITERION.fields_by_name['keyword'])
+_CAMPAIGNCRITERION.fields_by_name['keyword'].containing_oneof = _CAMPAIGNCRITERION.oneofs_by_name['criterion']
+_CAMPAIGNCRITERION.oneofs_by_name['criterion'].fields.append(
+ _CAMPAIGNCRITERION.fields_by_name['location'])
+_CAMPAIGNCRITERION.fields_by_name['location'].containing_oneof = _CAMPAIGNCRITERION.oneofs_by_name['criterion']
+_CAMPAIGNCRITERION.oneofs_by_name['criterion'].fields.append(
+ _CAMPAIGNCRITERION.fields_by_name['platform'])
+_CAMPAIGNCRITERION.fields_by_name['platform'].containing_oneof = _CAMPAIGNCRITERION.oneofs_by_name['criterion']
+DESCRIPTOR.message_types_by_name['CampaignCriterion'] = _CAMPAIGNCRITERION
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+CampaignCriterion = _reflection.GeneratedProtocolMessageType('CampaignCriterion', (_message.Message,), dict(
+ DESCRIPTOR = _CAMPAIGNCRITERION,
+ __module__ = 'google.ads.googleads_v0.proto.resources.campaign_criterion_pb2'
+ ,
+ __doc__ = """A campaign criterion.
+
+
+ Attributes:
+ resource_name:
+ The resource name of the campaign criterion. Campaign
+ criterion resource names have the form: ``customers/{customer
+ _id}/campaignCriteria/{campaign_id}_{criterion_id}``
+ campaign:
+ The campaign to which the criterion belongs. This field must
+ not be used in WHERE clauses.
+ criterion_id:
+ The ID of the criterion. This field is ignored during mutate.
+ bid_modifier:
+ The modifier for the bids when the criterion matches.
+ Allowable modifier values depend on the criterion: - 0.1 -
+ 10.0: Location - 0.1 - 4.0: Platform (mobile). Use 0 to opt
+ out of mobile.
+ negative:
+ Whether to target (``false``) or exclude (``true``) the
+ criterion.
+ type:
+ The type of the criterion.
+ criterion:
+ The campaign criterion. Exactly one must be set.
+ keyword:
+ Keyword.
+ location:
+ Location.
+ platform:
+ Platform.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.resources.CampaignCriterion)
+ ))
+_sym_db.RegisterMessage(CampaignCriterion)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n%com.google.ads.googleads.v0.resourcesB\026CampaignCriterionProtoP\001ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\242\002\003GAA\252\002!Google.Ads.GoogleAds.V0.Resources\312\002!Google\\Ads\\GoogleAds\\V0\\Resources'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/resources/campaign_criterion_pb2_grpc.py b/google/ads/google_ads/v0/proto/resources/campaign_criterion_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/campaign_criterion_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/resources/campaign_pb2.py b/google/ads/google_ads/v0/proto/resources/campaign_pb2.py
new file mode 100644
index 000000000..a23874925
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/campaign_pb2.py
@@ -0,0 +1,619 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/resources/campaign.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.common import bidding_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2
+from google.ads.google_ads.v0.proto.common import custom_parameter_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_custom__parameter__pb2
+from google.ads.google_ads.v0.proto.enums import ad_serving_optimization_status_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__serving__optimization__status__pb2
+from google.ads.google_ads.v0.proto.enums import advertising_channel_sub_type_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_advertising__channel__sub__type__pb2
+from google.ads.google_ads.v0.proto.enums import advertising_channel_type_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_advertising__channel__type__pb2
+from google.ads.google_ads.v0.proto.enums import bidding_strategy_type_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_bidding__strategy__type__pb2
+from google.ads.google_ads.v0.proto.enums import campaign_serving_status_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_campaign__serving__status__pb2
+from google.ads.google_ads.v0.proto.enums import campaign_status_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_campaign__status__pb2
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/resources/campaign.proto',
+ package='google.ads.googleads.v0.resources',
+ syntax='proto3',
+ serialized_pb=_b('\n6google/ads/googleads_v0/proto/resources/campaign.proto\x12!google.ads.googleads.v0.resources\x1a\x32google/ads/googleads_v0/proto/common/bidding.proto\x1a;google/ads/googleads_v0/proto/common/custom_parameter.proto\x1aHgoogle/ads/googleads_v0/proto/enums/ad_serving_optimization_status.proto\x1a\x46google/ads/googleads_v0/proto/enums/advertising_channel_sub_type.proto\x1a\x42google/ads/googleads_v0/proto/enums/advertising_channel_type.proto\x1a?google/ads/googleads_v0/proto/enums/bidding_strategy_type.proto\x1a\x41google/ads/googleads_v0/proto/enums/campaign_serving_status.proto\x1a\x39google/ads/googleads_v0/proto/enums/campaign_status.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\xa6\x14\n\x08\x43\x61mpaign\x12\x15\n\rresource_name\x18\x01 \x01(\t\x12\'\n\x02id\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12*\n\x04name\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12P\n\x06status\x18\x05 \x01(\x0e\x32@.google.ads.googleads.v0.enums.CampaignStatusEnum.CampaignStatus\x12\x66\n\x0eserving_status\x18\x15 \x01(\x0e\x32N.google.ads.googleads.v0.enums.CampaignServingStatusEnum.CampaignServingStatus\x12\x82\x01\n\x1e\x61\x64_serving_optimization_status\x18\x08 \x01(\x0e\x32Z.google.ads.googleads.v0.enums.AdServingOptimizationStatusEnum.AdServingOptimizationStatus\x12r\n\x18\x61\x64vertising_channel_type\x18\t \x01(\x0e\x32P.google.ads.googleads.v0.enums.AdvertisingChannelTypeEnum.AdvertisingChannelType\x12|\n\x1c\x61\x64vertising_channel_sub_type\x18\n \x01(\x0e\x32V.google.ads.googleads.v0.enums.AdvertisingChannelSubTypeEnum.AdvertisingChannelSubType\x12;\n\x15tracking_url_template\x18\x0b \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12N\n\x15url_custom_parameters\x18\x0c \x03(\x0b\x32/.google.ads.googleads.v0.common.CustomParameter\x12U\n\x10network_settings\x18\x0e \x01(\x0b\x32;.google.ads.googleads.v0.resources.Campaign.NetworkSettings\x12S\n\rhotel_setting\x18 \x01(\x0b\x32<.google.ads.googleads.v0.resources.Campaign.HotelSettingInfo\x12g\n\x1a\x64ynamic_search_ads_setting\x18! \x01(\x0b\x32\x43.google.ads.googleads.v0.resources.Campaign.DynamicSearchAdsSetting\x12\x35\n\x0f\x63\x61mpaign_budget\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12i\n\x15\x62idding_strategy_type\x18\x16 \x01(\x0e\x32J.google.ads.googleads.v0.enums.BiddingStrategyTypeEnum.BiddingStrategyType\x12\x30\n\nstart_date\x18\x13 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08\x65nd_date\x18\x14 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x10\x62idding_strategy\x18\x17 \x01(\x0b\x32\x1c.google.protobuf.StringValueH\x00\x12?\n\nmanual_cpc\x18\x18 \x01(\x0b\x32).google.ads.googleads.v0.common.ManualCpcH\x00\x12?\n\nmanual_cpm\x18\x19 \x01(\x0b\x32).google.ads.googleads.v0.common.ManualCpmH\x00\x12S\n\x14maximize_conversions\x18\x1e \x01(\x0b\x32\x33.google.ads.googleads.v0.common.MaximizeConversionsH\x00\x12\\\n\x19maximize_conversion_value\x18\x1f \x01(\x0b\x32\x37.google.ads.googleads.v0.common.MaximizeConversionValueH\x00\x12?\n\ntarget_cpa\x18\x1a \x01(\x0b\x32).google.ads.googleads.v0.common.TargetCpaH\x00\x12\x41\n\x0btarget_roas\x18\x1d \x01(\x0b\x32*.google.ads.googleads.v0.common.TargetRoasH\x00\x12\x43\n\x0ctarget_spend\x18\x1b \x01(\x0b\x32+.google.ads.googleads.v0.common.TargetSpendH\x00\x12\x41\n\x0bpercent_cpc\x18\" \x01(\x0b\x32*.google.ads.googleads.v0.common.PercentCpcH\x00\x1a\x85\x02\n\x0fNetworkSettings\x12\x38\n\x14target_google_search\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x39\n\x15target_search_network\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12:\n\x16target_content_network\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x41\n\x1dtarget_partner_search_network\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x1aH\n\x10HotelSettingInfo\x12\x34\n\x0fhotel_center_id\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x1a\xec\x01\n\x17\x44ynamicSearchAdsSetting\x12\x31\n\x0b\x64omain_name\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rlanguage_code\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x16use_supplied_urls_only\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12-\n\x08\x66\x65\x65\x64_ids\x18\x04 \x03(\x0b\x32\x1b.google.protobuf.Int64ValueB\x1b\n\x19\x63\x61mpaign_bidding_strategyB\xd2\x01\n%com.google.ads.googleads.v0.resourcesB\rCampaignProtoP\x01ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\xa2\x02\x03GAA\xaa\x02!Google.Ads.GoogleAds.V0.Resources\xca\x02!Google\\Ads\\GoogleAds\\V0\\Resourcesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_custom__parameter__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__serving__optimization__status__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_advertising__channel__sub__type__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_advertising__channel__type__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_bidding__strategy__type__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_campaign__serving__status__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_campaign__status__pb2.DESCRIPTOR,google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_CAMPAIGN_NETWORKSETTINGS = _descriptor.Descriptor(
+ name='NetworkSettings',
+ full_name='google.ads.googleads.v0.resources.Campaign.NetworkSettings',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='target_google_search', full_name='google.ads.googleads.v0.resources.Campaign.NetworkSettings.target_google_search', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='target_search_network', full_name='google.ads.googleads.v0.resources.Campaign.NetworkSettings.target_search_network', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='target_content_network', full_name='google.ads.googleads.v0.resources.Campaign.NetworkSettings.target_content_network', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='target_partner_search_network', full_name='google.ads.googleads.v0.resources.Campaign.NetworkSettings.target_partner_search_network', index=3,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2639,
+ serialized_end=2900,
+)
+
+_CAMPAIGN_HOTELSETTINGINFO = _descriptor.Descriptor(
+ name='HotelSettingInfo',
+ full_name='google.ads.googleads.v0.resources.Campaign.HotelSettingInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='hotel_center_id', full_name='google.ads.googleads.v0.resources.Campaign.HotelSettingInfo.hotel_center_id', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2902,
+ serialized_end=2974,
+)
+
+_CAMPAIGN_DYNAMICSEARCHADSSETTING = _descriptor.Descriptor(
+ name='DynamicSearchAdsSetting',
+ full_name='google.ads.googleads.v0.resources.Campaign.DynamicSearchAdsSetting',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='domain_name', full_name='google.ads.googleads.v0.resources.Campaign.DynamicSearchAdsSetting.domain_name', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='language_code', full_name='google.ads.googleads.v0.resources.Campaign.DynamicSearchAdsSetting.language_code', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='use_supplied_urls_only', full_name='google.ads.googleads.v0.resources.Campaign.DynamicSearchAdsSetting.use_supplied_urls_only', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='feed_ids', full_name='google.ads.googleads.v0.resources.Campaign.DynamicSearchAdsSetting.feed_ids', index=3,
+ number=4, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2977,
+ serialized_end=3213,
+)
+
+_CAMPAIGN = _descriptor.Descriptor(
+ name='Campaign',
+ full_name='google.ads.googleads.v0.resources.Campaign',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.resources.Campaign.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='id', full_name='google.ads.googleads.v0.resources.Campaign.id', index=1,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='name', full_name='google.ads.googleads.v0.resources.Campaign.name', index=2,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='status', full_name='google.ads.googleads.v0.resources.Campaign.status', index=3,
+ number=5, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='serving_status', full_name='google.ads.googleads.v0.resources.Campaign.serving_status', index=4,
+ number=21, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ad_serving_optimization_status', full_name='google.ads.googleads.v0.resources.Campaign.ad_serving_optimization_status', index=5,
+ number=8, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='advertising_channel_type', full_name='google.ads.googleads.v0.resources.Campaign.advertising_channel_type', index=6,
+ number=9, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='advertising_channel_sub_type', full_name='google.ads.googleads.v0.resources.Campaign.advertising_channel_sub_type', index=7,
+ number=10, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='tracking_url_template', full_name='google.ads.googleads.v0.resources.Campaign.tracking_url_template', index=8,
+ number=11, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='url_custom_parameters', full_name='google.ads.googleads.v0.resources.Campaign.url_custom_parameters', index=9,
+ number=12, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='network_settings', full_name='google.ads.googleads.v0.resources.Campaign.network_settings', index=10,
+ number=14, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='hotel_setting', full_name='google.ads.googleads.v0.resources.Campaign.hotel_setting', index=11,
+ number=32, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='dynamic_search_ads_setting', full_name='google.ads.googleads.v0.resources.Campaign.dynamic_search_ads_setting', index=12,
+ number=33, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='campaign_budget', full_name='google.ads.googleads.v0.resources.Campaign.campaign_budget', index=13,
+ number=6, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='bidding_strategy_type', full_name='google.ads.googleads.v0.resources.Campaign.bidding_strategy_type', index=14,
+ number=22, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='start_date', full_name='google.ads.googleads.v0.resources.Campaign.start_date', index=15,
+ number=19, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='end_date', full_name='google.ads.googleads.v0.resources.Campaign.end_date', index=16,
+ number=20, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='bidding_strategy', full_name='google.ads.googleads.v0.resources.Campaign.bidding_strategy', index=17,
+ number=23, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='manual_cpc', full_name='google.ads.googleads.v0.resources.Campaign.manual_cpc', index=18,
+ number=24, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='manual_cpm', full_name='google.ads.googleads.v0.resources.Campaign.manual_cpm', index=19,
+ number=25, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='maximize_conversions', full_name='google.ads.googleads.v0.resources.Campaign.maximize_conversions', index=20,
+ number=30, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='maximize_conversion_value', full_name='google.ads.googleads.v0.resources.Campaign.maximize_conversion_value', index=21,
+ number=31, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='target_cpa', full_name='google.ads.googleads.v0.resources.Campaign.target_cpa', index=22,
+ number=26, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='target_roas', full_name='google.ads.googleads.v0.resources.Campaign.target_roas', index=23,
+ number=29, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='target_spend', full_name='google.ads.googleads.v0.resources.Campaign.target_spend', index=24,
+ number=27, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='percent_cpc', full_name='google.ads.googleads.v0.resources.Campaign.percent_cpc', index=25,
+ number=34, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[_CAMPAIGN_NETWORKSETTINGS, _CAMPAIGN_HOTELSETTINGINFO, _CAMPAIGN_DYNAMICSEARCHADSSETTING, ],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='campaign_bidding_strategy', full_name='google.ads.googleads.v0.resources.Campaign.campaign_bidding_strategy',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=644,
+ serialized_end=3242,
+)
+
+_CAMPAIGN_NETWORKSETTINGS.fields_by_name['target_google_search'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_CAMPAIGN_NETWORKSETTINGS.fields_by_name['target_search_network'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_CAMPAIGN_NETWORKSETTINGS.fields_by_name['target_content_network'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_CAMPAIGN_NETWORKSETTINGS.fields_by_name['target_partner_search_network'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_CAMPAIGN_NETWORKSETTINGS.containing_type = _CAMPAIGN
+_CAMPAIGN_HOTELSETTINGINFO.fields_by_name['hotel_center_id'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_CAMPAIGN_HOTELSETTINGINFO.containing_type = _CAMPAIGN
+_CAMPAIGN_DYNAMICSEARCHADSSETTING.fields_by_name['domain_name'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CAMPAIGN_DYNAMICSEARCHADSSETTING.fields_by_name['language_code'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CAMPAIGN_DYNAMICSEARCHADSSETTING.fields_by_name['use_supplied_urls_only'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_CAMPAIGN_DYNAMICSEARCHADSSETTING.fields_by_name['feed_ids'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_CAMPAIGN_DYNAMICSEARCHADSSETTING.containing_type = _CAMPAIGN
+_CAMPAIGN.fields_by_name['id'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_CAMPAIGN.fields_by_name['name'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CAMPAIGN.fields_by_name['status'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_campaign__status__pb2._CAMPAIGNSTATUSENUM_CAMPAIGNSTATUS
+_CAMPAIGN.fields_by_name['serving_status'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_campaign__serving__status__pb2._CAMPAIGNSERVINGSTATUSENUM_CAMPAIGNSERVINGSTATUS
+_CAMPAIGN.fields_by_name['ad_serving_optimization_status'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__serving__optimization__status__pb2._ADSERVINGOPTIMIZATIONSTATUSENUM_ADSERVINGOPTIMIZATIONSTATUS
+_CAMPAIGN.fields_by_name['advertising_channel_type'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_advertising__channel__type__pb2._ADVERTISINGCHANNELTYPEENUM_ADVERTISINGCHANNELTYPE
+_CAMPAIGN.fields_by_name['advertising_channel_sub_type'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_advertising__channel__sub__type__pb2._ADVERTISINGCHANNELSUBTYPEENUM_ADVERTISINGCHANNELSUBTYPE
+_CAMPAIGN.fields_by_name['tracking_url_template'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CAMPAIGN.fields_by_name['url_custom_parameters'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_custom__parameter__pb2._CUSTOMPARAMETER
+_CAMPAIGN.fields_by_name['network_settings'].message_type = _CAMPAIGN_NETWORKSETTINGS
+_CAMPAIGN.fields_by_name['hotel_setting'].message_type = _CAMPAIGN_HOTELSETTINGINFO
+_CAMPAIGN.fields_by_name['dynamic_search_ads_setting'].message_type = _CAMPAIGN_DYNAMICSEARCHADSSETTING
+_CAMPAIGN.fields_by_name['campaign_budget'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CAMPAIGN.fields_by_name['bidding_strategy_type'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_bidding__strategy__type__pb2._BIDDINGSTRATEGYTYPEENUM_BIDDINGSTRATEGYTYPE
+_CAMPAIGN.fields_by_name['start_date'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CAMPAIGN.fields_by_name['end_date'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CAMPAIGN.fields_by_name['bidding_strategy'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CAMPAIGN.fields_by_name['manual_cpc'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2._MANUALCPC
+_CAMPAIGN.fields_by_name['manual_cpm'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2._MANUALCPM
+_CAMPAIGN.fields_by_name['maximize_conversions'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2._MAXIMIZECONVERSIONS
+_CAMPAIGN.fields_by_name['maximize_conversion_value'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2._MAXIMIZECONVERSIONVALUE
+_CAMPAIGN.fields_by_name['target_cpa'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2._TARGETCPA
+_CAMPAIGN.fields_by_name['target_roas'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2._TARGETROAS
+_CAMPAIGN.fields_by_name['target_spend'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2._TARGETSPEND
+_CAMPAIGN.fields_by_name['percent_cpc'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_bidding__pb2._PERCENTCPC
+_CAMPAIGN.oneofs_by_name['campaign_bidding_strategy'].fields.append(
+ _CAMPAIGN.fields_by_name['bidding_strategy'])
+_CAMPAIGN.fields_by_name['bidding_strategy'].containing_oneof = _CAMPAIGN.oneofs_by_name['campaign_bidding_strategy']
+_CAMPAIGN.oneofs_by_name['campaign_bidding_strategy'].fields.append(
+ _CAMPAIGN.fields_by_name['manual_cpc'])
+_CAMPAIGN.fields_by_name['manual_cpc'].containing_oneof = _CAMPAIGN.oneofs_by_name['campaign_bidding_strategy']
+_CAMPAIGN.oneofs_by_name['campaign_bidding_strategy'].fields.append(
+ _CAMPAIGN.fields_by_name['manual_cpm'])
+_CAMPAIGN.fields_by_name['manual_cpm'].containing_oneof = _CAMPAIGN.oneofs_by_name['campaign_bidding_strategy']
+_CAMPAIGN.oneofs_by_name['campaign_bidding_strategy'].fields.append(
+ _CAMPAIGN.fields_by_name['maximize_conversions'])
+_CAMPAIGN.fields_by_name['maximize_conversions'].containing_oneof = _CAMPAIGN.oneofs_by_name['campaign_bidding_strategy']
+_CAMPAIGN.oneofs_by_name['campaign_bidding_strategy'].fields.append(
+ _CAMPAIGN.fields_by_name['maximize_conversion_value'])
+_CAMPAIGN.fields_by_name['maximize_conversion_value'].containing_oneof = _CAMPAIGN.oneofs_by_name['campaign_bidding_strategy']
+_CAMPAIGN.oneofs_by_name['campaign_bidding_strategy'].fields.append(
+ _CAMPAIGN.fields_by_name['target_cpa'])
+_CAMPAIGN.fields_by_name['target_cpa'].containing_oneof = _CAMPAIGN.oneofs_by_name['campaign_bidding_strategy']
+_CAMPAIGN.oneofs_by_name['campaign_bidding_strategy'].fields.append(
+ _CAMPAIGN.fields_by_name['target_roas'])
+_CAMPAIGN.fields_by_name['target_roas'].containing_oneof = _CAMPAIGN.oneofs_by_name['campaign_bidding_strategy']
+_CAMPAIGN.oneofs_by_name['campaign_bidding_strategy'].fields.append(
+ _CAMPAIGN.fields_by_name['target_spend'])
+_CAMPAIGN.fields_by_name['target_spend'].containing_oneof = _CAMPAIGN.oneofs_by_name['campaign_bidding_strategy']
+_CAMPAIGN.oneofs_by_name['campaign_bidding_strategy'].fields.append(
+ _CAMPAIGN.fields_by_name['percent_cpc'])
+_CAMPAIGN.fields_by_name['percent_cpc'].containing_oneof = _CAMPAIGN.oneofs_by_name['campaign_bidding_strategy']
+DESCRIPTOR.message_types_by_name['Campaign'] = _CAMPAIGN
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+Campaign = _reflection.GeneratedProtocolMessageType('Campaign', (_message.Message,), dict(
+
+ NetworkSettings = _reflection.GeneratedProtocolMessageType('NetworkSettings', (_message.Message,), dict(
+ DESCRIPTOR = _CAMPAIGN_NETWORKSETTINGS,
+ __module__ = 'google.ads.googleads_v0.proto.resources.campaign_pb2'
+ ,
+ __doc__ = """The network settings for the campaign.
+
+
+ Attributes:
+ target_google_search:
+ Whether ads will be served with google.com search results.
+ target_search_network:
+ Whether ads will be served on partner sites in the Google
+ Search Network (requires ``target_google_search`` to also be
+ ``true``).
+ target_content_network:
+ Whether ads will be served on specified placements in the
+ Google Display Network. Placements are specified using the
+ Placement criterion.
+ target_partner_search_network:
+ Whether ads will be served on the Google Partner Network. This
+ is available only to some select Google partner accounts.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.resources.Campaign.NetworkSettings)
+ ))
+ ,
+
+ HotelSettingInfo = _reflection.GeneratedProtocolMessageType('HotelSettingInfo', (_message.Message,), dict(
+ DESCRIPTOR = _CAMPAIGN_HOTELSETTINGINFO,
+ __module__ = 'google.ads.googleads_v0.proto.resources.campaign_pb2'
+ ,
+ __doc__ = """Campaign-level settings for hotel ads.
+
+
+ Attributes:
+ hotel_center_id:
+ The linked Hotel Center account.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.resources.Campaign.HotelSettingInfo)
+ ))
+ ,
+
+ DynamicSearchAdsSetting = _reflection.GeneratedProtocolMessageType('DynamicSearchAdsSetting', (_message.Message,), dict(
+ DESCRIPTOR = _CAMPAIGN_DYNAMICSEARCHADSSETTING,
+ __module__ = 'google.ads.googleads_v0.proto.resources.campaign_pb2'
+ ,
+ __doc__ = """The setting for controlling Dynamic Search Ads (DSA).
+
+
+ Attributes:
+ domain_name:
+ The Internet domain name that this setting represents, e.g.,
+ "google.com" or "www.google.com".
+ language_code:
+ The language code specifying the language of the domain, e.g.,
+ "en".
+ use_supplied_urls_only:
+ Whether the campaign uses advertiser supplied URLs
+ exclusively.
+ feed_ids:
+ The list of page feeds associated with the campaign.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.resources.Campaign.DynamicSearchAdsSetting)
+ ))
+ ,
+ DESCRIPTOR = _CAMPAIGN,
+ __module__ = 'google.ads.googleads_v0.proto.resources.campaign_pb2'
+ ,
+ __doc__ = """A campaign.
+
+
+ Attributes:
+ resource_name:
+ The resource name of the campaign. Campaign resource names
+ have the form:
+ ``customers/{customer_id}/campaigns/{campaign_id}``
+ id:
+ The ID of the campaign.
+ name:
+ The name of the campaign. This field is required and should
+ not be empty when creating new campaigns. It must not contain
+ any null (code point 0x0), NL line feed (code point 0xA) or
+ carriage return (code point 0xD) characters.
+ status:
+ The status of the campaign. When a new campaign is added, the
+ status defaults to ENABLED.
+ serving_status:
+ The ad serving status of the campaign.
+ ad_serving_optimization_status:
+ The ad serving optimization status of the campaign.
+ advertising_channel_type:
+ The primary serving target for ads within the campaign. The
+ targeting options can be refined in ``network_settings``. Can
+ be set only when creating campaigns. After the campaign is
+ created, the field can not be changed.
+ advertising_channel_sub_type:
+ Optional refinement to ``advertising_channel_type``. Must be a
+ valid sub-type of the parent channel type. Can be set only
+ when creating campaigns. After campaign is created, the field
+ can not be changed.
+ tracking_url_template:
+ The URL template for constructing a tracking URL.
+ url_custom_parameters:
+ The list of mappings used to substitute custom parameter tags
+ in a ``tracking_url_template``, ``final_urls``, or
+ ``mobile_final_urls``.
+ network_settings:
+ The network settings for the campaign.
+ hotel_setting:
+ The hotel setting for the campaign.
+ dynamic_search_ads_setting:
+ The setting for controlling Dynamic Search Ads (DSA).
+ campaign_budget:
+ The budget of the campaign. This field must not be used in
+ WHERE clauses.
+ bidding_strategy_type:
+ The type of bidding strategy. A bidding strategy can be
+ created by setting either the bidding scheme to create a
+ standard bidding strategy or the ``bidding_strategy`` field to
+ create a portfolio bidding strategy. This field is read-only.
+ start_date:
+ The date when campaign started. This field must not be used
+ in WHERE clauses.
+ end_date:
+ The date when campaign ended. This field must not be used in
+ WHERE clauses.
+ campaign_bidding_strategy:
+ The bidding strategy for the campaign. Must be either
+ portfolio (created via BiddingStrategy service) or standard,
+ that is embedded into the campaign.
+ bidding_strategy:
+ Portfolio bidding strategy used by campaign. This field must
+ not be used in WHERE clauses.
+ manual_cpc:
+ Standard Manual CPC bidding strategy. Manual click-based
+ bidding where user pays per click.
+ manual_cpm:
+ Standard Manual CPM bidding strategy. Manual impression-based
+ bidding where user pays per thousand impressions.
+ maximize_conversions:
+ Standard Maximize Conversions bidding strategy that
+ automatically maximizes number of conversions given a daily
+ budget.
+ maximize_conversion_value:
+ Standard Maximize Conversion Value bidding strategy that
+ automatically sets bids to maximize revenue while spending
+ your budget.
+ target_cpa:
+ Standard Target CPA bidding strategy that automatically sets
+ bids to help get as many conversions as possible at the target
+ cost-per-acquisition (CPA) you set.
+ target_roas:
+ Standard Target ROAS bidding strategy that automatically
+ maximizes revenue while averaging a specific target return on
+ ad spend (ROAS).
+ target_spend:
+ Standard Target Spend bidding strategy that automatically sets
+ your bids to help get as many clicks as possible within your
+ budget.
+ percent_cpc:
+ Standard Percent Cpc bidding strategy where bids are a
+ fraction of the advertised price for some good or service.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.resources.Campaign)
+ ))
+_sym_db.RegisterMessage(Campaign)
+_sym_db.RegisterMessage(Campaign.NetworkSettings)
+_sym_db.RegisterMessage(Campaign.HotelSettingInfo)
+_sym_db.RegisterMessage(Campaign.DynamicSearchAdsSetting)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n%com.google.ads.googleads.v0.resourcesB\rCampaignProtoP\001ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\242\002\003GAA\252\002!Google.Ads.GoogleAds.V0.Resources\312\002!Google\\Ads\\GoogleAds\\V0\\Resources'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/resources/campaign_pb2_grpc.py b/google/ads/google_ads/v0/proto/resources/campaign_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/campaign_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/resources/customer_pb2.py b/google/ads/google_ads/v0/proto/resources/customer_pb2.py
new file mode 100644
index 000000000..c7fbf0bd3
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/customer_pb2.py
@@ -0,0 +1,157 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/resources/customer.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/resources/customer.proto',
+ package='google.ads.googleads.v0.resources',
+ syntax='proto3',
+ serialized_pb=_b('\n6google/ads/googleads_v0/proto/resources/customer.proto\x12!google.ads.googleads.v0.resources\x1a\x1egoogle/protobuf/wrappers.proto\"\x97\x03\n\x08\x43ustomer\x12\x15\n\rresource_name\x18\x01 \x01(\t\x12\'\n\x02id\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x36\n\x10\x64\x65scriptive_name\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x33\n\rcurrency_code\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\ttime_zone\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12;\n\x15tracking_url_template\x18\x07 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x38\n\x14\x61uto_tagging_enabled\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x36\n\x12has_partners_badge\x18\t \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xd2\x01\n%com.google.ads.googleads.v0.resourcesB\rCustomerProtoP\x01ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\xa2\x02\x03GAA\xaa\x02!Google.Ads.GoogleAds.V0.Resources\xca\x02!Google\\Ads\\GoogleAds\\V0\\Resourcesb\x06proto3')
+ ,
+ dependencies=[google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_CUSTOMER = _descriptor.Descriptor(
+ name='Customer',
+ full_name='google.ads.googleads.v0.resources.Customer',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.resources.Customer.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='id', full_name='google.ads.googleads.v0.resources.Customer.id', index=1,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='descriptive_name', full_name='google.ads.googleads.v0.resources.Customer.descriptive_name', index=2,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='currency_code', full_name='google.ads.googleads.v0.resources.Customer.currency_code', index=3,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='time_zone', full_name='google.ads.googleads.v0.resources.Customer.time_zone', index=4,
+ number=6, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='tracking_url_template', full_name='google.ads.googleads.v0.resources.Customer.tracking_url_template', index=5,
+ number=7, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='auto_tagging_enabled', full_name='google.ads.googleads.v0.resources.Customer.auto_tagging_enabled', index=6,
+ number=8, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='has_partners_badge', full_name='google.ads.googleads.v0.resources.Customer.has_partners_badge', index=7,
+ number=9, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=126,
+ serialized_end=533,
+)
+
+_CUSTOMER.fields_by_name['id'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_CUSTOMER.fields_by_name['descriptive_name'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CUSTOMER.fields_by_name['currency_code'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CUSTOMER.fields_by_name['time_zone'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CUSTOMER.fields_by_name['tracking_url_template'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_CUSTOMER.fields_by_name['auto_tagging_enabled'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_CUSTOMER.fields_by_name['has_partners_badge'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+DESCRIPTOR.message_types_by_name['Customer'] = _CUSTOMER
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+Customer = _reflection.GeneratedProtocolMessageType('Customer', (_message.Message,), dict(
+ DESCRIPTOR = _CUSTOMER,
+ __module__ = 'google.ads.googleads_v0.proto.resources.customer_pb2'
+ ,
+ __doc__ = """A customer.
+
+
+ Attributes:
+ resource_name:
+ The resource name of the customer. Customer resource names
+ have the form: ``customers/{customer_id}``
+ id:
+ The ID of the customer.
+ descriptive_name:
+ Optional, non-unique descriptive name of the customer.
+ currency_code:
+ The currency in which the account operates. A subset of the
+ currency codes from the ISO 4217 standard is supported.
+ time_zone:
+ The local timezone ID of the customer.
+ tracking_url_template:
+ The URL template for constructing a tracking URL out of
+ parameters.
+ auto_tagging_enabled:
+ Whether auto-tagging is enabled for the customer.
+ has_partners_badge:
+ Whether the Customer has a Partners program badge. If the
+ Customer is not associated with the Partners program, this
+ will be false. For more information, see
+ https://support.google.com/partners/answer/3125774
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.resources.Customer)
+ ))
+_sym_db.RegisterMessage(Customer)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n%com.google.ads.googleads.v0.resourcesB\rCustomerProtoP\001ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\242\002\003GAA\252\002!Google.Ads.GoogleAds.V0.Resources\312\002!Google\\Ads\\GoogleAds\\V0\\Resources'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/resources/customer_pb2_grpc.py b/google/ads/google_ads/v0/proto/resources/customer_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/customer_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/resources/geo_target_constant_pb2.py b/google/ads/google_ads/v0/proto/resources/geo_target_constant_pb2.py
new file mode 100644
index 000000000..2b5c6f9f6
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/geo_target_constant_pb2.py
@@ -0,0 +1,124 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/resources/geo_target_constant.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/resources/geo_target_constant.proto',
+ package='google.ads.googleads.v0.resources',
+ syntax='proto3',
+ serialized_pb=_b('\nAgoogle/ads/googleads_v0/proto/resources/geo_target_constant.proto\x12!google.ads.googleads.v0.resources\x1a\x1egoogle/protobuf/wrappers.proto\"\xe6\x01\n\x11GeoTargetConstant\x12\x15\n\rresource_name\x18\x01 \x01(\t\x12\'\n\x02id\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12*\n\x04name\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x32\n\x0c\x63ountry_code\x18\x05 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0btarget_type\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValueB\xdb\x01\n%com.google.ads.googleads.v0.resourcesB\x16GeoTargetConstantProtoP\x01ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\xa2\x02\x03GAA\xaa\x02!Google.Ads.GoogleAds.V0.Resources\xca\x02!Google\\Ads\\GoogleAds\\V0\\Resourcesb\x06proto3')
+ ,
+ dependencies=[google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_GEOTARGETCONSTANT = _descriptor.Descriptor(
+ name='GeoTargetConstant',
+ full_name='google.ads.googleads.v0.resources.GeoTargetConstant',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.resources.GeoTargetConstant.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='id', full_name='google.ads.googleads.v0.resources.GeoTargetConstant.id', index=1,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='name', full_name='google.ads.googleads.v0.resources.GeoTargetConstant.name', index=2,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='country_code', full_name='google.ads.googleads.v0.resources.GeoTargetConstant.country_code', index=3,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='target_type', full_name='google.ads.googleads.v0.resources.GeoTargetConstant.target_type', index=4,
+ number=6, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=137,
+ serialized_end=367,
+)
+
+_GEOTARGETCONSTANT.fields_by_name['id'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_GEOTARGETCONSTANT.fields_by_name['name'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_GEOTARGETCONSTANT.fields_by_name['country_code'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_GEOTARGETCONSTANT.fields_by_name['target_type'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+DESCRIPTOR.message_types_by_name['GeoTargetConstant'] = _GEOTARGETCONSTANT
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+GeoTargetConstant = _reflection.GeneratedProtocolMessageType('GeoTargetConstant', (_message.Message,), dict(
+ DESCRIPTOR = _GEOTARGETCONSTANT,
+ __module__ = 'google.ads.googleads_v0.proto.resources.geo_target_constant_pb2'
+ ,
+ __doc__ = """A geo target constant.
+
+
+ Attributes:
+ resource_name:
+ The resource name of the geo target constant. Geo target
+ constant resource names have the form:
+ ``geoTargetConstants/{geo_target_constant_id}``
+ id:
+ The ID of the geo target constant.
+ name:
+ Geo target constant English name.
+ country_code:
+ The ISO-3166-1 alpha-2 country code that is associated with
+ the target.
+ target_type:
+ Geo target constant target type.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.resources.GeoTargetConstant)
+ ))
+_sym_db.RegisterMessage(GeoTargetConstant)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n%com.google.ads.googleads.v0.resourcesB\026GeoTargetConstantProtoP\001ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\242\002\003GAA\252\002!Google.Ads.GoogleAds.V0.Resources\312\002!Google\\Ads\\GoogleAds\\V0\\Resources'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/resources/geo_target_constant_pb2_grpc.py b/google/ads/google_ads/v0/proto/resources/geo_target_constant_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/geo_target_constant_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/resources/google_ads_field_pb2.py b/google/ads/google_ads/v0/proto/resources/google_ads_field_pb2.py
new file mode 100644
index 000000000..7318441cc
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/google_ads_field_pb2.py
@@ -0,0 +1,229 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/resources/google_ads_field.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.enums import google_ads_field_category_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_google__ads__field__category__pb2
+from google.ads.google_ads.v0.proto.enums import google_ads_field_data_type_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_google__ads__field__data__type__pb2
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/resources/google_ads_field.proto',
+ package='google.ads.googleads.v0.resources',
+ syntax='proto3',
+ serialized_pb=_b('\n>google/ads/googleads_v0/proto/resources/google_ads_field.proto\x12!google.ads.googleads.v0.resources\x1a\x43google/ads/googleads_v0/proto/enums/google_ads_field_category.proto\x1a\x44google/ads/googleads_v0/proto/enums/google_ads_field_data_type.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\x8f\x06\n\x0eGoogleAdsField\x12\x15\n\rresource_name\x18\x01 \x01(\t\x12*\n\x04name\x18\x02 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12\x62\n\x08\x63\x61tegory\x18\x03 \x01(\x0e\x32P.google.ads.googleads.v0.enums.GoogleAdsFieldCategoryEnum.GoogleAdsFieldCategory\x12.\n\nselectable\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12.\n\nfilterable\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12,\n\x08sortable\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValue\x12\x35\n\x0fselectable_with\x18\x07 \x03(\x0b\x32\x1c.google.protobuf.StringValue\x12\x39\n\x13\x61ttribute_resources\x18\x08 \x03(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07metrics\x18\t \x03(\x0b\x32\x1c.google.protobuf.StringValue\x12.\n\x08segments\x18\n \x03(\x0b\x32\x1c.google.protobuf.StringValue\x12\x31\n\x0b\x65num_values\x18\x0b \x03(\x0b\x32\x1c.google.protobuf.StringValue\x12\x63\n\tdata_type\x18\x0c \x01(\x0e\x32P.google.ads.googleads.v0.enums.GoogleAdsFieldDataTypeEnum.GoogleAdsFieldDataType\x12.\n\x08type_url\x18\r \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12/\n\x0bis_repeated\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.BoolValueB\xd8\x01\n%com.google.ads.googleads.v0.resourcesB\x13GoogleAdsFieldProtoP\x01ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\xa2\x02\x03GAA\xaa\x02!Google.Ads.GoogleAds.V0.Resources\xca\x02!Google\\Ads\\GoogleAds\\V0\\Resourcesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_google__ads__field__category__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_google__ads__field__data__type__pb2.DESCRIPTOR,google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_GOOGLEADSFIELD = _descriptor.Descriptor(
+ name='GoogleAdsField',
+ full_name='google.ads.googleads.v0.resources.GoogleAdsField',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.resources.GoogleAdsField.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='name', full_name='google.ads.googleads.v0.resources.GoogleAdsField.name', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='category', full_name='google.ads.googleads.v0.resources.GoogleAdsField.category', index=2,
+ number=3, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='selectable', full_name='google.ads.googleads.v0.resources.GoogleAdsField.selectable', index=3,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='filterable', full_name='google.ads.googleads.v0.resources.GoogleAdsField.filterable', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='sortable', full_name='google.ads.googleads.v0.resources.GoogleAdsField.sortable', index=5,
+ number=6, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='selectable_with', full_name='google.ads.googleads.v0.resources.GoogleAdsField.selectable_with', index=6,
+ number=7, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='attribute_resources', full_name='google.ads.googleads.v0.resources.GoogleAdsField.attribute_resources', index=7,
+ number=8, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='metrics', full_name='google.ads.googleads.v0.resources.GoogleAdsField.metrics', index=8,
+ number=9, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='segments', full_name='google.ads.googleads.v0.resources.GoogleAdsField.segments', index=9,
+ number=10, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='enum_values', full_name='google.ads.googleads.v0.resources.GoogleAdsField.enum_values', index=10,
+ number=11, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='data_type', full_name='google.ads.googleads.v0.resources.GoogleAdsField.data_type', index=11,
+ number=12, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='type_url', full_name='google.ads.googleads.v0.resources.GoogleAdsField.type_url', index=12,
+ number=13, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_repeated', full_name='google.ads.googleads.v0.resources.GoogleAdsField.is_repeated', index=13,
+ number=14, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=273,
+ serialized_end=1056,
+)
+
+_GOOGLEADSFIELD.fields_by_name['name'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_GOOGLEADSFIELD.fields_by_name['category'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_google__ads__field__category__pb2._GOOGLEADSFIELDCATEGORYENUM_GOOGLEADSFIELDCATEGORY
+_GOOGLEADSFIELD.fields_by_name['selectable'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_GOOGLEADSFIELD.fields_by_name['filterable'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_GOOGLEADSFIELD.fields_by_name['sortable'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+_GOOGLEADSFIELD.fields_by_name['selectable_with'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_GOOGLEADSFIELD.fields_by_name['attribute_resources'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_GOOGLEADSFIELD.fields_by_name['metrics'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_GOOGLEADSFIELD.fields_by_name['segments'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_GOOGLEADSFIELD.fields_by_name['enum_values'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_GOOGLEADSFIELD.fields_by_name['data_type'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_google__ads__field__data__type__pb2._GOOGLEADSFIELDDATATYPEENUM_GOOGLEADSFIELDDATATYPE
+_GOOGLEADSFIELD.fields_by_name['type_url'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_GOOGLEADSFIELD.fields_by_name['is_repeated'].message_type = google_dot_protobuf_dot_wrappers__pb2._BOOLVALUE
+DESCRIPTOR.message_types_by_name['GoogleAdsField'] = _GOOGLEADSFIELD
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+GoogleAdsField = _reflection.GeneratedProtocolMessageType('GoogleAdsField', (_message.Message,), dict(
+ DESCRIPTOR = _GOOGLEADSFIELD,
+ __module__ = 'google.ads.googleads_v0.proto.resources.google_ads_field_pb2'
+ ,
+ __doc__ = """A field or resource (artifact) used by GoogleAdsService.
+
+
+ Attributes:
+ resource_name:
+ The resource name of the artifact. Artifact resource names
+ have the form: ``googleAdsFields/{name}``
+ name:
+ The name of the artifact.
+ category:
+ The category of the artifact.
+ selectable:
+ Whether the artifact can be used in a SELECT clause in search
+ queries.
+ filterable:
+ Whether the artifact can be used in a WHERE clause in search
+ queries.
+ sortable:
+ Whether the artifact can be used in a ORDER BY clause in
+ search queries.
+ selectable_with:
+ The names of all resources, segments, and metrics that are
+ selectable with the described artifact.
+ attribute_resources:
+ The names of all resources that are selectable with the
+ described artifact. Fields from these resources do not segment
+ metrics when included in search queries. This field is only
+ set for artifacts whose category is RESOURCE.
+ metrics:
+ The names of all metrics that are selectable with the
+ described artifact. This field is only set for artifacts
+ whose category is either RESOURCE or SEGMENT.
+ segments:
+ The names of all artifacts, whether a segment or another
+ resource, that segment metrics when included in search
+ queries. This field is only set for artifacts of category
+ RESOURCE, SEGMENT or METRIC.
+ enum_values:
+ Values the artifact can assume if it is a field of type ENUM.
+ This field is only set for artifacts of category SEGMENT or
+ ATTRIBUTE.
+ data_type:
+ This field determines the operators that can be used with the
+ artifact in WHERE clauses.
+ type_url:
+ The URL of proto describing the artifact's data type.
+ is_repeated:
+ Whether the field artifact is repeated.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.resources.GoogleAdsField)
+ ))
+_sym_db.RegisterMessage(GoogleAdsField)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n%com.google.ads.googleads.v0.resourcesB\023GoogleAdsFieldProtoP\001ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\242\002\003GAA\252\002!Google.Ads.GoogleAds.V0.Resources\312\002!Google\\Ads\\GoogleAds\\V0\\Resources'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/resources/google_ads_field_pb2_grpc.py b/google/ads/google_ads/v0/proto/resources/google_ads_field_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/google_ads_field_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/resources/keyword_view_pb2.py b/google/ads/google_ads/v0/proto/resources/keyword_view_pb2.py
new file mode 100644
index 000000000..8b1213523
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/keyword_view_pb2.py
@@ -0,0 +1,81 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/resources/keyword_view.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/resources/keyword_view.proto',
+ package='google.ads.googleads.v0.resources',
+ syntax='proto3',
+ serialized_pb=_b('\n:google/ads/googleads_v0/proto/resources/keyword_view.proto\x12!google.ads.googleads.v0.resources\"$\n\x0bKeywordView\x12\x15\n\rresource_name\x18\x01 \x01(\tB\xd5\x01\n%com.google.ads.googleads.v0.resourcesB\x10KeywordViewProtoP\x01ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\xa2\x02\x03GAA\xaa\x02!Google.Ads.GoogleAds.V0.Resources\xca\x02!Google\\Ads\\GoogleAds\\V0\\Resourcesb\x06proto3')
+)
+
+
+
+
+_KEYWORDVIEW = _descriptor.Descriptor(
+ name='KeywordView',
+ full_name='google.ads.googleads.v0.resources.KeywordView',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.resources.KeywordView.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=97,
+ serialized_end=133,
+)
+
+DESCRIPTOR.message_types_by_name['KeywordView'] = _KEYWORDVIEW
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+KeywordView = _reflection.GeneratedProtocolMessageType('KeywordView', (_message.Message,), dict(
+ DESCRIPTOR = _KEYWORDVIEW,
+ __module__ = 'google.ads.googleads_v0.proto.resources.keyword_view_pb2'
+ ,
+ __doc__ = """A keyword view.
+
+
+ Attributes:
+ resource_name:
+ The resource name of the keyword view. Keyword view resource
+ names have the form: ``customers/{customer_id}/keywordViews/{
+ ad_group_id}_{criterion_id}``
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.resources.KeywordView)
+ ))
+_sym_db.RegisterMessage(KeywordView)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n%com.google.ads.googleads.v0.resourcesB\020KeywordViewProtoP\001ZJgoogle.golang.org/genproto/googleapis/ads/googleads/v0/resources;resources\242\002\003GAA\252\002!Google.Ads.GoogleAds.V0.Resources\312\002!Google\\Ads\\GoogleAds\\V0\\Resources'))
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/resources/keyword_view_pb2_grpc.py b/google/ads/google_ads/v0/proto/resources/keyword_view_pb2_grpc.py
new file mode 100644
index 000000000..a89435267
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/keyword_view_pb2_grpc.py
@@ -0,0 +1,3 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
diff --git a/google/ads/google_ads/v0/proto/resources/recommendation_pb2.py b/google/ads/google_ads/v0/proto/resources/recommendation_pb2.py
new file mode 100644
index 000000000..bb9814b23
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/resources/recommendation_pb2.py
@@ -0,0 +1,751 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/resources/recommendation.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.common import criteria_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_criteria__pb2
+from google.ads.google_ads.v0.proto.enums import recommendation_type_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_recommendation__type__pb2
+from google.ads.google_ads.v0.proto.enums import target_cpa_opt_in_recommendation_goal_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_target__cpa__opt__in__recommendation__goal__pb2
+from google.ads.google_ads.v0.proto.resources import ad_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__pb2
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/resources/recommendation.proto',
+ package='google.ads.googleads.v0.resources',
+ syntax='proto3',
+ serialized_pb=_b('\n\n\x06\x63reate\x18\x01 \x01(\x0b\x32,.google.ads.googleads.v0.resources.AdGroupAdH\x00\x12>\n\x06update\x18\x02 \x01(\x0b\x32,.google.ads.googleads.v0.resources.AdGroupAdH\x00\x12\x10\n\x06remove\x18\x03 \x01(\tH\x00\x42\x0b\n\toperation\"d\n\x18MutateAdGroupAdsResponse\x12H\n\x07results\x18\x02 \x03(\x0b\x32\x37.google.ads.googleads.v0.services.MutateAdGroupAdResult\".\n\x15MutateAdGroupAdResult\x12\x15\n\rresource_name\x18\x01 \x01(\t2\x86\x03\n\x10\x41\x64GroupAdService\x12\xa9\x01\n\x0cGetAdGroupAd\x12\x35.google.ads.googleads.v0.services.GetAdGroupAdRequest\x1a,.google.ads.googleads.v0.resources.AdGroupAd\"4\x82\xd3\xe4\x93\x02.\x12,/v0/{resource_name=customers/*/adGroupAds/*}\x12\xc5\x01\n\x10MutateAdGroupAds\x12\x39.google.ads.googleads.v0.services.MutateAdGroupAdsRequest\x1a:.google.ads.googleads.v0.services.MutateAdGroupAdsResponse\":\x82\xd3\xe4\x93\x02\x34\"//v0/customers/{customer_id=*}/adGroupAds:mutate:\x01*B\xd5\x01\n$com.google.ads.googleads.v0.servicesB\x15\x41\x64GroupAdServiceProtoP\x01ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\xa2\x02\x03GAA\xaa\x02 Google.Ads.GoogleAds.V0.Services\xca\x02 Google\\Ads\\GoogleAds\\V0\\Servicesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__ad__pb2.DESCRIPTOR,google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_protobuf_dot_field__mask__pb2.DESCRIPTOR,])
+
+
+
+
+_GETADGROUPADREQUEST = _descriptor.Descriptor(
+ name='GetAdGroupAdRequest',
+ full_name='google.ads.googleads.v0.services.GetAdGroupAdRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.GetAdGroupAdRequest.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=225,
+ serialized_end=269,
+)
+
+
+_MUTATEADGROUPADSREQUEST = _descriptor.Descriptor(
+ name='MutateAdGroupAdsRequest',
+ full_name='google.ads.googleads.v0.services.MutateAdGroupAdsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='customer_id', full_name='google.ads.googleads.v0.services.MutateAdGroupAdsRequest.customer_id', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='operations', full_name='google.ads.googleads.v0.services.MutateAdGroupAdsRequest.operations', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=271,
+ serialized_end=391,
+)
+
+
+_ADGROUPADOPERATION = _descriptor.Descriptor(
+ name='AdGroupAdOperation',
+ full_name='google.ads.googleads.v0.services.AdGroupAdOperation',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='update_mask', full_name='google.ads.googleads.v0.services.AdGroupAdOperation.update_mask', index=0,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='create', full_name='google.ads.googleads.v0.services.AdGroupAdOperation.create', index=1,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='update', full_name='google.ads.googleads.v0.services.AdGroupAdOperation.update', index=2,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='remove', full_name='google.ads.googleads.v0.services.AdGroupAdOperation.remove', index=3,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='operation', full_name='google.ads.googleads.v0.services.AdGroupAdOperation.operation',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=394,
+ serialized_end=622,
+)
+
+
+_MUTATEADGROUPADSRESPONSE = _descriptor.Descriptor(
+ name='MutateAdGroupAdsResponse',
+ full_name='google.ads.googleads.v0.services.MutateAdGroupAdsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='results', full_name='google.ads.googleads.v0.services.MutateAdGroupAdsResponse.results', index=0,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=624,
+ serialized_end=724,
+)
+
+
+_MUTATEADGROUPADRESULT = _descriptor.Descriptor(
+ name='MutateAdGroupAdResult',
+ full_name='google.ads.googleads.v0.services.MutateAdGroupAdResult',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.MutateAdGroupAdResult.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=726,
+ serialized_end=772,
+)
+
+_MUTATEADGROUPADSREQUEST.fields_by_name['operations'].message_type = _ADGROUPADOPERATION
+_ADGROUPADOPERATION.fields_by_name['update_mask'].message_type = google_dot_protobuf_dot_field__mask__pb2._FIELDMASK
+_ADGROUPADOPERATION.fields_by_name['create'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__ad__pb2._ADGROUPAD
+_ADGROUPADOPERATION.fields_by_name['update'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__ad__pb2._ADGROUPAD
+_ADGROUPADOPERATION.oneofs_by_name['operation'].fields.append(
+ _ADGROUPADOPERATION.fields_by_name['create'])
+_ADGROUPADOPERATION.fields_by_name['create'].containing_oneof = _ADGROUPADOPERATION.oneofs_by_name['operation']
+_ADGROUPADOPERATION.oneofs_by_name['operation'].fields.append(
+ _ADGROUPADOPERATION.fields_by_name['update'])
+_ADGROUPADOPERATION.fields_by_name['update'].containing_oneof = _ADGROUPADOPERATION.oneofs_by_name['operation']
+_ADGROUPADOPERATION.oneofs_by_name['operation'].fields.append(
+ _ADGROUPADOPERATION.fields_by_name['remove'])
+_ADGROUPADOPERATION.fields_by_name['remove'].containing_oneof = _ADGROUPADOPERATION.oneofs_by_name['operation']
+_MUTATEADGROUPADSRESPONSE.fields_by_name['results'].message_type = _MUTATEADGROUPADRESULT
+DESCRIPTOR.message_types_by_name['GetAdGroupAdRequest'] = _GETADGROUPADREQUEST
+DESCRIPTOR.message_types_by_name['MutateAdGroupAdsRequest'] = _MUTATEADGROUPADSREQUEST
+DESCRIPTOR.message_types_by_name['AdGroupAdOperation'] = _ADGROUPADOPERATION
+DESCRIPTOR.message_types_by_name['MutateAdGroupAdsResponse'] = _MUTATEADGROUPADSRESPONSE
+DESCRIPTOR.message_types_by_name['MutateAdGroupAdResult'] = _MUTATEADGROUPADRESULT
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+GetAdGroupAdRequest = _reflection.GeneratedProtocolMessageType('GetAdGroupAdRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETADGROUPADREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_ad_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [AdGroupAdService.GetAdGroupAd][google.ads.googleads.v0.services.AdGroupAdService.GetAdGroupAd].
+
+
+ Attributes:
+ resource_name:
+ The resource name of the ad to fetch.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.GetAdGroupAdRequest)
+ ))
+_sym_db.RegisterMessage(GetAdGroupAdRequest)
+
+MutateAdGroupAdsRequest = _reflection.GeneratedProtocolMessageType('MutateAdGroupAdsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATEADGROUPADSREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_ad_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [AdGroupAdService.MutateAdGroupAds][google.ads.googleads.v0.services.AdGroupAdService.MutateAdGroupAds].
+
+
+ Attributes:
+ customer_id:
+ The ID of the customer whose ads are being modified.
+ operations:
+ The list of operations to perform on individual ads.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateAdGroupAdsRequest)
+ ))
+_sym_db.RegisterMessage(MutateAdGroupAdsRequest)
+
+AdGroupAdOperation = _reflection.GeneratedProtocolMessageType('AdGroupAdOperation', (_message.Message,), dict(
+ DESCRIPTOR = _ADGROUPADOPERATION,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_ad_service_pb2'
+ ,
+ __doc__ = """A single operation (create, update, remove) on an ad group ad.
+
+
+ Attributes:
+ update_mask:
+ FieldMask that determines which resource fields are modified
+ in an update.
+ operation:
+ The mutate operation.
+ create:
+ Create operation: No resource name is expected for the new ad.
+ update:
+ Update operation: The ad is expected to have a valid resource
+ name.
+ remove:
+ Remove operation: A resource name for the removed ad is
+ expected, in this format:
+ ``customers/{customer_id}/adGroupAds/{ad_group_id}_{ad_id}``
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.AdGroupAdOperation)
+ ))
+_sym_db.RegisterMessage(AdGroupAdOperation)
+
+MutateAdGroupAdsResponse = _reflection.GeneratedProtocolMessageType('MutateAdGroupAdsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATEADGROUPADSRESPONSE,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_ad_service_pb2'
+ ,
+ __doc__ = """Response message for an ad group ad mutate.
+
+
+ Attributes:
+ results:
+ All results for the mutate.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateAdGroupAdsResponse)
+ ))
+_sym_db.RegisterMessage(MutateAdGroupAdsResponse)
+
+MutateAdGroupAdResult = _reflection.GeneratedProtocolMessageType('MutateAdGroupAdResult', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATEADGROUPADRESULT,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_ad_service_pb2'
+ ,
+ __doc__ = """The result for the ad mutate.
+
+
+ Attributes:
+ resource_name:
+ The resource name returned for successful operations.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateAdGroupAdResult)
+ ))
+_sym_db.RegisterMessage(MutateAdGroupAdResult)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$com.google.ads.googleads.v0.servicesB\025AdGroupAdServiceProtoP\001ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\242\002\003GAA\252\002 Google.Ads.GoogleAds.V0.Services\312\002 Google\\Ads\\GoogleAds\\V0\\Services'))
+
+_ADGROUPADSERVICE = _descriptor.ServiceDescriptor(
+ name='AdGroupAdService',
+ full_name='google.ads.googleads.v0.services.AdGroupAdService',
+ file=DESCRIPTOR,
+ index=0,
+ options=None,
+ serialized_start=775,
+ serialized_end=1165,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='GetAdGroupAd',
+ full_name='google.ads.googleads.v0.services.AdGroupAdService.GetAdGroupAd',
+ index=0,
+ containing_service=None,
+ input_type=_GETADGROUPADREQUEST,
+ output_type=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__ad__pb2._ADGROUPAD,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002.\022,/v0/{resource_name=customers/*/adGroupAds/*}')),
+ ),
+ _descriptor.MethodDescriptor(
+ name='MutateAdGroupAds',
+ full_name='google.ads.googleads.v0.services.AdGroupAdService.MutateAdGroupAds',
+ index=1,
+ containing_service=None,
+ input_type=_MUTATEADGROUPADSREQUEST,
+ output_type=_MUTATEADGROUPADSRESPONSE,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0024\"//v0/customers/{customer_id=*}/adGroupAds:mutate:\001*')),
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_ADGROUPADSERVICE)
+
+DESCRIPTOR.services_by_name['AdGroupAdService'] = _ADGROUPADSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/services/ad_group_ad_service_pb2_grpc.py b/google/ads/google_ads/v0/proto/services/ad_group_ad_service_pb2_grpc.py
new file mode 100644
index 000000000..0cf78281f
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/ad_group_ad_service_pb2_grpc.py
@@ -0,0 +1,64 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
+from google.ads.google_ads.v0.proto.resources import ad_group_ad_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__ad__pb2
+from google.ads.google_ads.v0.proto.services import ad_group_ad_service_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__ad__service__pb2
+
+
+class AdGroupAdServiceStub(object):
+ """Service to manage ads in an ad group.
+ """
+
+ def __init__(self, channel):
+ """Constructor.
+
+ Args:
+ channel: A grpc.Channel.
+ """
+ self.GetAdGroupAd = channel.unary_unary(
+ '/google.ads.googleads.v0.services.AdGroupAdService/GetAdGroupAd',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__ad__service__pb2.GetAdGroupAdRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__ad__pb2.AdGroupAd.FromString,
+ )
+ self.MutateAdGroupAds = channel.unary_unary(
+ '/google.ads.googleads.v0.services.AdGroupAdService/MutateAdGroupAds',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__ad__service__pb2.MutateAdGroupAdsRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__ad__service__pb2.MutateAdGroupAdsResponse.FromString,
+ )
+
+
+class AdGroupAdServiceServicer(object):
+ """Service to manage ads in an ad group.
+ """
+
+ def GetAdGroupAd(self, request, context):
+ """Returns the requested ad in full detail.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+ def MutateAdGroupAds(self, request, context):
+ """Creates, updates, or removes ads. Operation statuses are returned.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+
+def add_AdGroupAdServiceServicer_to_server(servicer, server):
+ rpc_method_handlers = {
+ 'GetAdGroupAd': grpc.unary_unary_rpc_method_handler(
+ servicer.GetAdGroupAd,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__ad__service__pb2.GetAdGroupAdRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__ad__pb2.AdGroupAd.SerializeToString,
+ ),
+ 'MutateAdGroupAds': grpc.unary_unary_rpc_method_handler(
+ servicer.MutateAdGroupAds,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__ad__service__pb2.MutateAdGroupAdsRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__ad__service__pb2.MutateAdGroupAdsResponse.SerializeToString,
+ ),
+ }
+ generic_handler = grpc.method_handlers_generic_handler(
+ 'google.ads.googleads.v0.services.AdGroupAdService', rpc_method_handlers)
+ server.add_generic_rpc_handlers((generic_handler,))
diff --git a/google/ads/google_ads/v0/proto/services/ad_group_bid_modifier_service_pb2.py b/google/ads/google_ads/v0/proto/services/ad_group_bid_modifier_service_pb2.py
new file mode 100644
index 000000000..418c7ca85
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/ad_group_bid_modifier_service_pb2.py
@@ -0,0 +1,368 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/services/ad_group_bid_modifier_service.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.resources import ad_group_bid_modifier_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__bid__modifier__pb2
+from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
+from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/services/ad_group_bid_modifier_service.proto',
+ package='google.ads.googleads.v0.services',
+ syntax='proto3',
+ serialized_pb=_b('\nJgoogle/ads/googleads_v0/proto/services/ad_group_bid_modifier_service.proto\x12 google.ads.googleads.v0.services\x1a\x43google/ads/googleads_v0/proto/resources/ad_group_bid_modifier.proto\x1a\x1cgoogle/api/annotations.proto\x1a google/protobuf/field_mask.proto\"5\n\x1cGetAdGroupBidModifierRequest\x12\x15\n\rresource_name\x18\x01 \x01(\t\"\x8a\x01\n MutateAdGroupBidModifiersRequest\x12\x13\n\x0b\x63ustomer_id\x18\x01 \x01(\t\x12Q\n\noperations\x18\x02 \x03(\x0b\x32=.google.ads.googleads.v0.services.AdGroupBidModifierOperation\"\xff\x01\n\x1b\x41\x64GroupBidModifierOperation\x12/\n\x0bupdate_mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMask\x12G\n\x06\x63reate\x18\x01 \x01(\x0b\x32\x35.google.ads.googleads.v0.resources.AdGroupBidModifierH\x00\x12G\n\x06update\x18\x02 \x01(\x0b\x32\x35.google.ads.googleads.v0.resources.AdGroupBidModifierH\x00\x12\x10\n\x06remove\x18\x03 \x01(\tH\x00\x42\x0b\n\toperation\"v\n!MutateAdGroupBidModifiersResponse\x12Q\n\x07results\x18\x02 \x03(\x0b\x32@.google.ads.googleads.v0.services.MutateAdGroupBidModifierResult\"7\n\x1eMutateAdGroupBidModifierResult\x12\x15\n\rresource_name\x18\x01 \x01(\t2\xd7\x03\n\x19\x41\x64GroupBidModifierService\x12\xcd\x01\n\x15GetAdGroupBidModifier\x12>.google.ads.googleads.v0.services.GetAdGroupBidModifierRequest\x1a\x35.google.ads.googleads.v0.resources.AdGroupBidModifier\"=\x82\xd3\xe4\x93\x02\x37\x12\x35/v0/{resource_name=customers/*/adGroupBidModifiers/*}\x12\xe9\x01\n\x19MutateAdGroupBidModifiers\x12\x42.google.ads.googleads.v0.services.MutateAdGroupBidModifiersRequest\x1a\x43.google.ads.googleads.v0.services.MutateAdGroupBidModifiersResponse\"C\x82\xd3\xe4\x93\x02=\"8/v0/customers/{customer_id=*}/adGroupBidModifiers:mutate:\x01*B\xde\x01\n$com.google.ads.googleads.v0.servicesB\x1e\x41\x64GroupBidModifierServiceProtoP\x01ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\xa2\x02\x03GAA\xaa\x02 Google.Ads.GoogleAds.V0.Services\xca\x02 Google\\Ads\\GoogleAds\\V0\\Servicesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__bid__modifier__pb2.DESCRIPTOR,google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_protobuf_dot_field__mask__pb2.DESCRIPTOR,])
+
+
+
+
+_GETADGROUPBIDMODIFIERREQUEST = _descriptor.Descriptor(
+ name='GetAdGroupBidModifierRequest',
+ full_name='google.ads.googleads.v0.services.GetAdGroupBidModifierRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.GetAdGroupBidModifierRequest.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=245,
+ serialized_end=298,
+)
+
+
+_MUTATEADGROUPBIDMODIFIERSREQUEST = _descriptor.Descriptor(
+ name='MutateAdGroupBidModifiersRequest',
+ full_name='google.ads.googleads.v0.services.MutateAdGroupBidModifiersRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='customer_id', full_name='google.ads.googleads.v0.services.MutateAdGroupBidModifiersRequest.customer_id', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='operations', full_name='google.ads.googleads.v0.services.MutateAdGroupBidModifiersRequest.operations', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=301,
+ serialized_end=439,
+)
+
+
+_ADGROUPBIDMODIFIEROPERATION = _descriptor.Descriptor(
+ name='AdGroupBidModifierOperation',
+ full_name='google.ads.googleads.v0.services.AdGroupBidModifierOperation',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='update_mask', full_name='google.ads.googleads.v0.services.AdGroupBidModifierOperation.update_mask', index=0,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='create', full_name='google.ads.googleads.v0.services.AdGroupBidModifierOperation.create', index=1,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='update', full_name='google.ads.googleads.v0.services.AdGroupBidModifierOperation.update', index=2,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='remove', full_name='google.ads.googleads.v0.services.AdGroupBidModifierOperation.remove', index=3,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='operation', full_name='google.ads.googleads.v0.services.AdGroupBidModifierOperation.operation',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=442,
+ serialized_end=697,
+)
+
+
+_MUTATEADGROUPBIDMODIFIERSRESPONSE = _descriptor.Descriptor(
+ name='MutateAdGroupBidModifiersResponse',
+ full_name='google.ads.googleads.v0.services.MutateAdGroupBidModifiersResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='results', full_name='google.ads.googleads.v0.services.MutateAdGroupBidModifiersResponse.results', index=0,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=699,
+ serialized_end=817,
+)
+
+
+_MUTATEADGROUPBIDMODIFIERRESULT = _descriptor.Descriptor(
+ name='MutateAdGroupBidModifierResult',
+ full_name='google.ads.googleads.v0.services.MutateAdGroupBidModifierResult',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.MutateAdGroupBidModifierResult.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=819,
+ serialized_end=874,
+)
+
+_MUTATEADGROUPBIDMODIFIERSREQUEST.fields_by_name['operations'].message_type = _ADGROUPBIDMODIFIEROPERATION
+_ADGROUPBIDMODIFIEROPERATION.fields_by_name['update_mask'].message_type = google_dot_protobuf_dot_field__mask__pb2._FIELDMASK
+_ADGROUPBIDMODIFIEROPERATION.fields_by_name['create'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__bid__modifier__pb2._ADGROUPBIDMODIFIER
+_ADGROUPBIDMODIFIEROPERATION.fields_by_name['update'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__bid__modifier__pb2._ADGROUPBIDMODIFIER
+_ADGROUPBIDMODIFIEROPERATION.oneofs_by_name['operation'].fields.append(
+ _ADGROUPBIDMODIFIEROPERATION.fields_by_name['create'])
+_ADGROUPBIDMODIFIEROPERATION.fields_by_name['create'].containing_oneof = _ADGROUPBIDMODIFIEROPERATION.oneofs_by_name['operation']
+_ADGROUPBIDMODIFIEROPERATION.oneofs_by_name['operation'].fields.append(
+ _ADGROUPBIDMODIFIEROPERATION.fields_by_name['update'])
+_ADGROUPBIDMODIFIEROPERATION.fields_by_name['update'].containing_oneof = _ADGROUPBIDMODIFIEROPERATION.oneofs_by_name['operation']
+_ADGROUPBIDMODIFIEROPERATION.oneofs_by_name['operation'].fields.append(
+ _ADGROUPBIDMODIFIEROPERATION.fields_by_name['remove'])
+_ADGROUPBIDMODIFIEROPERATION.fields_by_name['remove'].containing_oneof = _ADGROUPBIDMODIFIEROPERATION.oneofs_by_name['operation']
+_MUTATEADGROUPBIDMODIFIERSRESPONSE.fields_by_name['results'].message_type = _MUTATEADGROUPBIDMODIFIERRESULT
+DESCRIPTOR.message_types_by_name['GetAdGroupBidModifierRequest'] = _GETADGROUPBIDMODIFIERREQUEST
+DESCRIPTOR.message_types_by_name['MutateAdGroupBidModifiersRequest'] = _MUTATEADGROUPBIDMODIFIERSREQUEST
+DESCRIPTOR.message_types_by_name['AdGroupBidModifierOperation'] = _ADGROUPBIDMODIFIEROPERATION
+DESCRIPTOR.message_types_by_name['MutateAdGroupBidModifiersResponse'] = _MUTATEADGROUPBIDMODIFIERSRESPONSE
+DESCRIPTOR.message_types_by_name['MutateAdGroupBidModifierResult'] = _MUTATEADGROUPBIDMODIFIERRESULT
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+GetAdGroupBidModifierRequest = _reflection.GeneratedProtocolMessageType('GetAdGroupBidModifierRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETADGROUPBIDMODIFIERREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_bid_modifier_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [AdGroupBidModifierService.GetAdGroupBidModifier][google.ads.googleads.v0.services.AdGroupBidModifierService.GetAdGroupBidModifier].
+
+
+ Attributes:
+ resource_name:
+ The resource name of the ad group bid modifier to fetch.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.GetAdGroupBidModifierRequest)
+ ))
+_sym_db.RegisterMessage(GetAdGroupBidModifierRequest)
+
+MutateAdGroupBidModifiersRequest = _reflection.GeneratedProtocolMessageType('MutateAdGroupBidModifiersRequest', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATEADGROUPBIDMODIFIERSREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_bid_modifier_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [AdGroupBidModifierService.MutateAdGroupBidModifiers][google.ads.googleads.v0.services.AdGroupBidModifierService.MutateAdGroupBidModifiers].
+
+
+ Attributes:
+ customer_id:
+ ID of the customer whose ad group bid modifiers are being
+ modified.
+ operations:
+ The list of operations to perform on individual ad group bid
+ modifiers.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateAdGroupBidModifiersRequest)
+ ))
+_sym_db.RegisterMessage(MutateAdGroupBidModifiersRequest)
+
+AdGroupBidModifierOperation = _reflection.GeneratedProtocolMessageType('AdGroupBidModifierOperation', (_message.Message,), dict(
+ DESCRIPTOR = _ADGROUPBIDMODIFIEROPERATION,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_bid_modifier_service_pb2'
+ ,
+ __doc__ = """A single operation (create, remove, update) on an ad group bid modifier.
+
+
+ Attributes:
+ update_mask:
+ FieldMask that determines which resource fields are modified
+ in an update.
+ operation:
+ The mutate operation.
+ create:
+ Create operation: No resource name is expected for the new ad
+ group bid modifier.
+ update:
+ Update operation: The ad group bid modifier is expected to
+ have a valid resource name.
+ remove:
+ Remove operation: A resource name for the removed ad group bid
+ modifier is expected, in this format: ``customers/{customer_i
+ d}/adGroupBidModifiers/{ad_group_id}_{criterion_id}``
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.AdGroupBidModifierOperation)
+ ))
+_sym_db.RegisterMessage(AdGroupBidModifierOperation)
+
+MutateAdGroupBidModifiersResponse = _reflection.GeneratedProtocolMessageType('MutateAdGroupBidModifiersResponse', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATEADGROUPBIDMODIFIERSRESPONSE,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_bid_modifier_service_pb2'
+ ,
+ __doc__ = """Response message for ad group bid modifiers mutate.
+
+
+ Attributes:
+ results:
+ All results for the mutate.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateAdGroupBidModifiersResponse)
+ ))
+_sym_db.RegisterMessage(MutateAdGroupBidModifiersResponse)
+
+MutateAdGroupBidModifierResult = _reflection.GeneratedProtocolMessageType('MutateAdGroupBidModifierResult', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATEADGROUPBIDMODIFIERRESULT,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_bid_modifier_service_pb2'
+ ,
+ __doc__ = """The result for the criterion mutate.
+
+
+ Attributes:
+ resource_name:
+ Returned for successful operations.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateAdGroupBidModifierResult)
+ ))
+_sym_db.RegisterMessage(MutateAdGroupBidModifierResult)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$com.google.ads.googleads.v0.servicesB\036AdGroupBidModifierServiceProtoP\001ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\242\002\003GAA\252\002 Google.Ads.GoogleAds.V0.Services\312\002 Google\\Ads\\GoogleAds\\V0\\Services'))
+
+_ADGROUPBIDMODIFIERSERVICE = _descriptor.ServiceDescriptor(
+ name='AdGroupBidModifierService',
+ full_name='google.ads.googleads.v0.services.AdGroupBidModifierService',
+ file=DESCRIPTOR,
+ index=0,
+ options=None,
+ serialized_start=877,
+ serialized_end=1348,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='GetAdGroupBidModifier',
+ full_name='google.ads.googleads.v0.services.AdGroupBidModifierService.GetAdGroupBidModifier',
+ index=0,
+ containing_service=None,
+ input_type=_GETADGROUPBIDMODIFIERREQUEST,
+ output_type=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__bid__modifier__pb2._ADGROUPBIDMODIFIER,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0027\0225/v0/{resource_name=customers/*/adGroupBidModifiers/*}')),
+ ),
+ _descriptor.MethodDescriptor(
+ name='MutateAdGroupBidModifiers',
+ full_name='google.ads.googleads.v0.services.AdGroupBidModifierService.MutateAdGroupBidModifiers',
+ index=1,
+ containing_service=None,
+ input_type=_MUTATEADGROUPBIDMODIFIERSREQUEST,
+ output_type=_MUTATEADGROUPBIDMODIFIERSRESPONSE,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002=\"8/v0/customers/{customer_id=*}/adGroupBidModifiers:mutate:\001*')),
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_ADGROUPBIDMODIFIERSERVICE)
+
+DESCRIPTOR.services_by_name['AdGroupBidModifierService'] = _ADGROUPBIDMODIFIERSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/services/ad_group_bid_modifier_service_pb2_grpc.py b/google/ads/google_ads/v0/proto/services/ad_group_bid_modifier_service_pb2_grpc.py
new file mode 100644
index 000000000..323a70319
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/ad_group_bid_modifier_service_pb2_grpc.py
@@ -0,0 +1,65 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
+from google.ads.google_ads.v0.proto.resources import ad_group_bid_modifier_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__bid__modifier__pb2
+from google.ads.google_ads.v0.proto.services import ad_group_bid_modifier_service_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__bid__modifier__service__pb2
+
+
+class AdGroupBidModifierServiceStub(object):
+ """Service to manage ad group bid modifiers.
+ """
+
+ def __init__(self, channel):
+ """Constructor.
+
+ Args:
+ channel: A grpc.Channel.
+ """
+ self.GetAdGroupBidModifier = channel.unary_unary(
+ '/google.ads.googleads.v0.services.AdGroupBidModifierService/GetAdGroupBidModifier',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__bid__modifier__service__pb2.GetAdGroupBidModifierRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__bid__modifier__pb2.AdGroupBidModifier.FromString,
+ )
+ self.MutateAdGroupBidModifiers = channel.unary_unary(
+ '/google.ads.googleads.v0.services.AdGroupBidModifierService/MutateAdGroupBidModifiers',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__bid__modifier__service__pb2.MutateAdGroupBidModifiersRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__bid__modifier__service__pb2.MutateAdGroupBidModifiersResponse.FromString,
+ )
+
+
+class AdGroupBidModifierServiceServicer(object):
+ """Service to manage ad group bid modifiers.
+ """
+
+ def GetAdGroupBidModifier(self, request, context):
+ """Returns the requested ad group bid modifier in full detail.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+ def MutateAdGroupBidModifiers(self, request, context):
+ """Creates, updates, or removes ad group bid modifiers.
+ Operation statuses are returned.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+
+def add_AdGroupBidModifierServiceServicer_to_server(servicer, server):
+ rpc_method_handlers = {
+ 'GetAdGroupBidModifier': grpc.unary_unary_rpc_method_handler(
+ servicer.GetAdGroupBidModifier,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__bid__modifier__service__pb2.GetAdGroupBidModifierRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__bid__modifier__pb2.AdGroupBidModifier.SerializeToString,
+ ),
+ 'MutateAdGroupBidModifiers': grpc.unary_unary_rpc_method_handler(
+ servicer.MutateAdGroupBidModifiers,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__bid__modifier__service__pb2.MutateAdGroupBidModifiersRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__bid__modifier__service__pb2.MutateAdGroupBidModifiersResponse.SerializeToString,
+ ),
+ }
+ generic_handler = grpc.method_handlers_generic_handler(
+ 'google.ads.googleads.v0.services.AdGroupBidModifierService', rpc_method_handlers)
+ server.add_generic_rpc_handlers((generic_handler,))
diff --git a/google/ads/google_ads/v0/proto/services/ad_group_criterion_service_pb2.py b/google/ads/google_ads/v0/proto/services/ad_group_criterion_service_pb2.py
new file mode 100644
index 000000000..8291f225c
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/ad_group_criterion_service_pb2.py
@@ -0,0 +1,366 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/services/ad_group_criterion_service.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.resources import ad_group_criterion_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__criterion__pb2
+from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
+from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/services/ad_group_criterion_service.proto',
+ package='google.ads.googleads.v0.services',
+ syntax='proto3',
+ serialized_pb=_b('\nGgoogle/ads/googleads_v0/proto/services/ad_group_criterion_service.proto\x12 google.ads.googleads.v0.services\x1a@google/ads/googleads_v0/proto/resources/ad_group_criterion.proto\x1a\x1cgoogle/api/annotations.proto\x1a google/protobuf/field_mask.proto\"3\n\x1aGetAdGroupCriterionRequest\x12\x15\n\rresource_name\x18\x01 \x01(\t\"\x84\x01\n\x1cMutateAdGroupCriteriaRequest\x12\x13\n\x0b\x63ustomer_id\x18\x01 \x01(\t\x12O\n\noperations\x18\x02 \x03(\x0b\x32;.google.ads.googleads.v0.services.AdGroupCriterionOperation\"\xf9\x01\n\x19\x41\x64GroupCriterionOperation\x12/\n\x0bupdate_mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMask\x12\x45\n\x06\x63reate\x18\x01 \x01(\x0b\x32\x33.google.ads.googleads.v0.resources.AdGroupCriterionH\x00\x12\x45\n\x06update\x18\x02 \x01(\x0b\x32\x33.google.ads.googleads.v0.resources.AdGroupCriterionH\x00\x12\x10\n\x06remove\x18\x03 \x01(\tH\x00\x42\x0b\n\toperation\"p\n\x1dMutateAdGroupCriteriaResponse\x12O\n\x07results\x18\x02 \x03(\x0b\x32>.google.ads.googleads.v0.services.MutateAdGroupCriterionResult\"5\n\x1cMutateAdGroupCriterionResult\x12\x15\n\rresource_name\x18\x01 \x01(\t2\xbb\x03\n\x17\x41\x64GroupCriterionService\x12\xc3\x01\n\x13GetAdGroupCriterion\x12<.google.ads.googleads.v0.services.GetAdGroupCriterionRequest\x1a\x33.google.ads.googleads.v0.resources.AdGroupCriterion\"9\x82\xd3\xe4\x93\x02\x33\x12\x31/v0/{resource_name=customers/*/adGroupCriteria/*}\x12\xd9\x01\n\x15MutateAdGroupCriteria\x12>.google.ads.googleads.v0.services.MutateAdGroupCriteriaRequest\x1a?.google.ads.googleads.v0.services.MutateAdGroupCriteriaResponse\"?\x82\xd3\xe4\x93\x02\x39\"4/v0/customers/{customer_id=*}/adGroupCriteria:mutate:\x01*B\xdc\x01\n$com.google.ads.googleads.v0.servicesB\x1c\x41\x64GroupCriterionServiceProtoP\x01ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\xa2\x02\x03GAA\xaa\x02 Google.Ads.GoogleAds.V0.Services\xca\x02 Google\\Ads\\GoogleAds\\V0\\Servicesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__criterion__pb2.DESCRIPTOR,google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_protobuf_dot_field__mask__pb2.DESCRIPTOR,])
+
+
+
+
+_GETADGROUPCRITERIONREQUEST = _descriptor.Descriptor(
+ name='GetAdGroupCriterionRequest',
+ full_name='google.ads.googleads.v0.services.GetAdGroupCriterionRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.GetAdGroupCriterionRequest.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=239,
+ serialized_end=290,
+)
+
+
+_MUTATEADGROUPCRITERIAREQUEST = _descriptor.Descriptor(
+ name='MutateAdGroupCriteriaRequest',
+ full_name='google.ads.googleads.v0.services.MutateAdGroupCriteriaRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='customer_id', full_name='google.ads.googleads.v0.services.MutateAdGroupCriteriaRequest.customer_id', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='operations', full_name='google.ads.googleads.v0.services.MutateAdGroupCriteriaRequest.operations', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=293,
+ serialized_end=425,
+)
+
+
+_ADGROUPCRITERIONOPERATION = _descriptor.Descriptor(
+ name='AdGroupCriterionOperation',
+ full_name='google.ads.googleads.v0.services.AdGroupCriterionOperation',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='update_mask', full_name='google.ads.googleads.v0.services.AdGroupCriterionOperation.update_mask', index=0,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='create', full_name='google.ads.googleads.v0.services.AdGroupCriterionOperation.create', index=1,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='update', full_name='google.ads.googleads.v0.services.AdGroupCriterionOperation.update', index=2,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='remove', full_name='google.ads.googleads.v0.services.AdGroupCriterionOperation.remove', index=3,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='operation', full_name='google.ads.googleads.v0.services.AdGroupCriterionOperation.operation',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=428,
+ serialized_end=677,
+)
+
+
+_MUTATEADGROUPCRITERIARESPONSE = _descriptor.Descriptor(
+ name='MutateAdGroupCriteriaResponse',
+ full_name='google.ads.googleads.v0.services.MutateAdGroupCriteriaResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='results', full_name='google.ads.googleads.v0.services.MutateAdGroupCriteriaResponse.results', index=0,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=679,
+ serialized_end=791,
+)
+
+
+_MUTATEADGROUPCRITERIONRESULT = _descriptor.Descriptor(
+ name='MutateAdGroupCriterionResult',
+ full_name='google.ads.googleads.v0.services.MutateAdGroupCriterionResult',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.MutateAdGroupCriterionResult.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=793,
+ serialized_end=846,
+)
+
+_MUTATEADGROUPCRITERIAREQUEST.fields_by_name['operations'].message_type = _ADGROUPCRITERIONOPERATION
+_ADGROUPCRITERIONOPERATION.fields_by_name['update_mask'].message_type = google_dot_protobuf_dot_field__mask__pb2._FIELDMASK
+_ADGROUPCRITERIONOPERATION.fields_by_name['create'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__criterion__pb2._ADGROUPCRITERION
+_ADGROUPCRITERIONOPERATION.fields_by_name['update'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__criterion__pb2._ADGROUPCRITERION
+_ADGROUPCRITERIONOPERATION.oneofs_by_name['operation'].fields.append(
+ _ADGROUPCRITERIONOPERATION.fields_by_name['create'])
+_ADGROUPCRITERIONOPERATION.fields_by_name['create'].containing_oneof = _ADGROUPCRITERIONOPERATION.oneofs_by_name['operation']
+_ADGROUPCRITERIONOPERATION.oneofs_by_name['operation'].fields.append(
+ _ADGROUPCRITERIONOPERATION.fields_by_name['update'])
+_ADGROUPCRITERIONOPERATION.fields_by_name['update'].containing_oneof = _ADGROUPCRITERIONOPERATION.oneofs_by_name['operation']
+_ADGROUPCRITERIONOPERATION.oneofs_by_name['operation'].fields.append(
+ _ADGROUPCRITERIONOPERATION.fields_by_name['remove'])
+_ADGROUPCRITERIONOPERATION.fields_by_name['remove'].containing_oneof = _ADGROUPCRITERIONOPERATION.oneofs_by_name['operation']
+_MUTATEADGROUPCRITERIARESPONSE.fields_by_name['results'].message_type = _MUTATEADGROUPCRITERIONRESULT
+DESCRIPTOR.message_types_by_name['GetAdGroupCriterionRequest'] = _GETADGROUPCRITERIONREQUEST
+DESCRIPTOR.message_types_by_name['MutateAdGroupCriteriaRequest'] = _MUTATEADGROUPCRITERIAREQUEST
+DESCRIPTOR.message_types_by_name['AdGroupCriterionOperation'] = _ADGROUPCRITERIONOPERATION
+DESCRIPTOR.message_types_by_name['MutateAdGroupCriteriaResponse'] = _MUTATEADGROUPCRITERIARESPONSE
+DESCRIPTOR.message_types_by_name['MutateAdGroupCriterionResult'] = _MUTATEADGROUPCRITERIONRESULT
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+GetAdGroupCriterionRequest = _reflection.GeneratedProtocolMessageType('GetAdGroupCriterionRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETADGROUPCRITERIONREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_criterion_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [AdGroupCriterionService.GetAdGroupCriterion][google.ads.googleads.v0.services.AdGroupCriterionService.GetAdGroupCriterion].
+
+
+ Attributes:
+ resource_name:
+ The resource name of the criterion to fetch.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.GetAdGroupCriterionRequest)
+ ))
+_sym_db.RegisterMessage(GetAdGroupCriterionRequest)
+
+MutateAdGroupCriteriaRequest = _reflection.GeneratedProtocolMessageType('MutateAdGroupCriteriaRequest', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATEADGROUPCRITERIAREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_criterion_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [AdGroupCriterionService.MutateAdGroupCriteria][google.ads.googleads.v0.services.AdGroupCriterionService.MutateAdGroupCriteria].
+
+
+ Attributes:
+ customer_id:
+ ID of the customer whose criteria are being modified.
+ operations:
+ The list of operations to perform on individual criteria.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateAdGroupCriteriaRequest)
+ ))
+_sym_db.RegisterMessage(MutateAdGroupCriteriaRequest)
+
+AdGroupCriterionOperation = _reflection.GeneratedProtocolMessageType('AdGroupCriterionOperation', (_message.Message,), dict(
+ DESCRIPTOR = _ADGROUPCRITERIONOPERATION,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_criterion_service_pb2'
+ ,
+ __doc__ = """A single operation (create, remove, update) on an ad group criterion.
+
+
+ Attributes:
+ update_mask:
+ FieldMask that determines which resource fields are modified
+ in an update.
+ operation:
+ The mutate operation.
+ create:
+ Create operation: No resource name is expected for the new
+ criterion.
+ update:
+ Update operation: The criterion is expected to have a valid
+ resource name.
+ remove:
+ Remove operation: A resource name for the removed criterion is
+ expected, in this format: ``customers/{customer_id}/adGroupCr
+ iteria/{ad_group_id}_{criterion_id}``
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.AdGroupCriterionOperation)
+ ))
+_sym_db.RegisterMessage(AdGroupCriterionOperation)
+
+MutateAdGroupCriteriaResponse = _reflection.GeneratedProtocolMessageType('MutateAdGroupCriteriaResponse', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATEADGROUPCRITERIARESPONSE,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_criterion_service_pb2'
+ ,
+ __doc__ = """Response message for an ad group criterion mutate.
+
+
+ Attributes:
+ results:
+ All results for the mutate.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateAdGroupCriteriaResponse)
+ ))
+_sym_db.RegisterMessage(MutateAdGroupCriteriaResponse)
+
+MutateAdGroupCriterionResult = _reflection.GeneratedProtocolMessageType('MutateAdGroupCriterionResult', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATEADGROUPCRITERIONRESULT,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_criterion_service_pb2'
+ ,
+ __doc__ = """The result for the criterion mutate.
+
+
+ Attributes:
+ resource_name:
+ Returned for successful operations.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateAdGroupCriterionResult)
+ ))
+_sym_db.RegisterMessage(MutateAdGroupCriterionResult)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$com.google.ads.googleads.v0.servicesB\034AdGroupCriterionServiceProtoP\001ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\242\002\003GAA\252\002 Google.Ads.GoogleAds.V0.Services\312\002 Google\\Ads\\GoogleAds\\V0\\Services'))
+
+_ADGROUPCRITERIONSERVICE = _descriptor.ServiceDescriptor(
+ name='AdGroupCriterionService',
+ full_name='google.ads.googleads.v0.services.AdGroupCriterionService',
+ file=DESCRIPTOR,
+ index=0,
+ options=None,
+ serialized_start=849,
+ serialized_end=1292,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='GetAdGroupCriterion',
+ full_name='google.ads.googleads.v0.services.AdGroupCriterionService.GetAdGroupCriterion',
+ index=0,
+ containing_service=None,
+ input_type=_GETADGROUPCRITERIONREQUEST,
+ output_type=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__criterion__pb2._ADGROUPCRITERION,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0023\0221/v0/{resource_name=customers/*/adGroupCriteria/*}')),
+ ),
+ _descriptor.MethodDescriptor(
+ name='MutateAdGroupCriteria',
+ full_name='google.ads.googleads.v0.services.AdGroupCriterionService.MutateAdGroupCriteria',
+ index=1,
+ containing_service=None,
+ input_type=_MUTATEADGROUPCRITERIAREQUEST,
+ output_type=_MUTATEADGROUPCRITERIARESPONSE,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0029\"4/v0/customers/{customer_id=*}/adGroupCriteria:mutate:\001*')),
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_ADGROUPCRITERIONSERVICE)
+
+DESCRIPTOR.services_by_name['AdGroupCriterionService'] = _ADGROUPCRITERIONSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/services/ad_group_criterion_service_pb2_grpc.py b/google/ads/google_ads/v0/proto/services/ad_group_criterion_service_pb2_grpc.py
new file mode 100644
index 000000000..93132e8fa
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/ad_group_criterion_service_pb2_grpc.py
@@ -0,0 +1,64 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
+from google.ads.google_ads.v0.proto.resources import ad_group_criterion_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__criterion__pb2
+from google.ads.google_ads.v0.proto.services import ad_group_criterion_service_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__criterion__service__pb2
+
+
+class AdGroupCriterionServiceStub(object):
+ """Service to manage ad group criteria.
+ """
+
+ def __init__(self, channel):
+ """Constructor.
+
+ Args:
+ channel: A grpc.Channel.
+ """
+ self.GetAdGroupCriterion = channel.unary_unary(
+ '/google.ads.googleads.v0.services.AdGroupCriterionService/GetAdGroupCriterion',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__criterion__service__pb2.GetAdGroupCriterionRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__criterion__pb2.AdGroupCriterion.FromString,
+ )
+ self.MutateAdGroupCriteria = channel.unary_unary(
+ '/google.ads.googleads.v0.services.AdGroupCriterionService/MutateAdGroupCriteria',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__criterion__service__pb2.MutateAdGroupCriteriaRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__criterion__service__pb2.MutateAdGroupCriteriaResponse.FromString,
+ )
+
+
+class AdGroupCriterionServiceServicer(object):
+ """Service to manage ad group criteria.
+ """
+
+ def GetAdGroupCriterion(self, request, context):
+ """Returns the requested criterion in full detail.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+ def MutateAdGroupCriteria(self, request, context):
+ """Creates, updates, or removes criteria. Operation statuses are returned.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+
+def add_AdGroupCriterionServiceServicer_to_server(servicer, server):
+ rpc_method_handlers = {
+ 'GetAdGroupCriterion': grpc.unary_unary_rpc_method_handler(
+ servicer.GetAdGroupCriterion,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__criterion__service__pb2.GetAdGroupCriterionRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__criterion__pb2.AdGroupCriterion.SerializeToString,
+ ),
+ 'MutateAdGroupCriteria': grpc.unary_unary_rpc_method_handler(
+ servicer.MutateAdGroupCriteria,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__criterion__service__pb2.MutateAdGroupCriteriaRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__criterion__service__pb2.MutateAdGroupCriteriaResponse.SerializeToString,
+ ),
+ }
+ generic_handler = grpc.method_handlers_generic_handler(
+ 'google.ads.googleads.v0.services.AdGroupCriterionService', rpc_method_handlers)
+ server.add_generic_rpc_handlers((generic_handler,))
diff --git a/google/ads/google_ads/v0/proto/services/ad_group_service_pb2.py b/google/ads/google_ads/v0/proto/services/ad_group_service_pb2.py
new file mode 100644
index 000000000..34641d8dd
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/ad_group_service_pb2.py
@@ -0,0 +1,366 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/services/ad_group_service.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.resources import ad_group_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__pb2
+from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
+from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/services/ad_group_service.proto',
+ package='google.ads.googleads.v0.services',
+ syntax='proto3',
+ serialized_pb=_b('\n=google/ads/googleads_v0/proto/services/ad_group_service.proto\x12 google.ads.googleads.v0.services\x1a\x36google/ads/googleads_v0/proto/resources/ad_group.proto\x1a\x1cgoogle/api/annotations.proto\x1a google/protobuf/field_mask.proto\"*\n\x11GetAdGroupRequest\x12\x15\n\rresource_name\x18\x01 \x01(\t\"t\n\x15MutateAdGroupsRequest\x12\x13\n\x0b\x63ustomer_id\x18\x01 \x01(\t\x12\x46\n\noperations\x18\x02 \x03(\x0b\x32\x32.google.ads.googleads.v0.services.AdGroupOperation\"\xde\x01\n\x10\x41\x64GroupOperation\x12/\n\x0bupdate_mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMask\x12<\n\x06\x63reate\x18\x01 \x01(\x0b\x32*.google.ads.googleads.v0.resources.AdGroupH\x00\x12<\n\x06update\x18\x02 \x01(\x0b\x32*.google.ads.googleads.v0.resources.AdGroupH\x00\x12\x10\n\x06remove\x18\x03 \x01(\tH\x00\x42\x0b\n\toperation\"`\n\x16MutateAdGroupsResponse\x12\x46\n\x07results\x18\x02 \x03(\x0b\x32\x35.google.ads.googleads.v0.services.MutateAdGroupResult\",\n\x13MutateAdGroupResult\x12\x15\n\rresource_name\x18\x01 \x01(\t2\xf4\x02\n\x0e\x41\x64GroupService\x12\xa1\x01\n\nGetAdGroup\x12\x33.google.ads.googleads.v0.services.GetAdGroupRequest\x1a*.google.ads.googleads.v0.resources.AdGroup\"2\x82\xd3\xe4\x93\x02,\x12*/v0/{resource_name=customers/*/adGroups/*}\x12\xbd\x01\n\x0eMutateAdGroups\x12\x37.google.ads.googleads.v0.services.MutateAdGroupsRequest\x1a\x38.google.ads.googleads.v0.services.MutateAdGroupsResponse\"8\x82\xd3\xe4\x93\x02\x32\"-/v0/customers/{customer_id=*}/adGroups:mutate:\x01*B\xd3\x01\n$com.google.ads.googleads.v0.servicesB\x13\x41\x64GroupServiceProtoP\x01ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\xa2\x02\x03GAA\xaa\x02 Google.Ads.GoogleAds.V0.Services\xca\x02 Google\\Ads\\GoogleAds\\V0\\Servicesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__pb2.DESCRIPTOR,google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_protobuf_dot_field__mask__pb2.DESCRIPTOR,])
+
+
+
+
+_GETADGROUPREQUEST = _descriptor.Descriptor(
+ name='GetAdGroupRequest',
+ full_name='google.ads.googleads.v0.services.GetAdGroupRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.GetAdGroupRequest.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=219,
+ serialized_end=261,
+)
+
+
+_MUTATEADGROUPSREQUEST = _descriptor.Descriptor(
+ name='MutateAdGroupsRequest',
+ full_name='google.ads.googleads.v0.services.MutateAdGroupsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='customer_id', full_name='google.ads.googleads.v0.services.MutateAdGroupsRequest.customer_id', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='operations', full_name='google.ads.googleads.v0.services.MutateAdGroupsRequest.operations', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=263,
+ serialized_end=379,
+)
+
+
+_ADGROUPOPERATION = _descriptor.Descriptor(
+ name='AdGroupOperation',
+ full_name='google.ads.googleads.v0.services.AdGroupOperation',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='update_mask', full_name='google.ads.googleads.v0.services.AdGroupOperation.update_mask', index=0,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='create', full_name='google.ads.googleads.v0.services.AdGroupOperation.create', index=1,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='update', full_name='google.ads.googleads.v0.services.AdGroupOperation.update', index=2,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='remove', full_name='google.ads.googleads.v0.services.AdGroupOperation.remove', index=3,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='operation', full_name='google.ads.googleads.v0.services.AdGroupOperation.operation',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=382,
+ serialized_end=604,
+)
+
+
+_MUTATEADGROUPSRESPONSE = _descriptor.Descriptor(
+ name='MutateAdGroupsResponse',
+ full_name='google.ads.googleads.v0.services.MutateAdGroupsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='results', full_name='google.ads.googleads.v0.services.MutateAdGroupsResponse.results', index=0,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=606,
+ serialized_end=702,
+)
+
+
+_MUTATEADGROUPRESULT = _descriptor.Descriptor(
+ name='MutateAdGroupResult',
+ full_name='google.ads.googleads.v0.services.MutateAdGroupResult',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.MutateAdGroupResult.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=704,
+ serialized_end=748,
+)
+
+_MUTATEADGROUPSREQUEST.fields_by_name['operations'].message_type = _ADGROUPOPERATION
+_ADGROUPOPERATION.fields_by_name['update_mask'].message_type = google_dot_protobuf_dot_field__mask__pb2._FIELDMASK
+_ADGROUPOPERATION.fields_by_name['create'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__pb2._ADGROUP
+_ADGROUPOPERATION.fields_by_name['update'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__pb2._ADGROUP
+_ADGROUPOPERATION.oneofs_by_name['operation'].fields.append(
+ _ADGROUPOPERATION.fields_by_name['create'])
+_ADGROUPOPERATION.fields_by_name['create'].containing_oneof = _ADGROUPOPERATION.oneofs_by_name['operation']
+_ADGROUPOPERATION.oneofs_by_name['operation'].fields.append(
+ _ADGROUPOPERATION.fields_by_name['update'])
+_ADGROUPOPERATION.fields_by_name['update'].containing_oneof = _ADGROUPOPERATION.oneofs_by_name['operation']
+_ADGROUPOPERATION.oneofs_by_name['operation'].fields.append(
+ _ADGROUPOPERATION.fields_by_name['remove'])
+_ADGROUPOPERATION.fields_by_name['remove'].containing_oneof = _ADGROUPOPERATION.oneofs_by_name['operation']
+_MUTATEADGROUPSRESPONSE.fields_by_name['results'].message_type = _MUTATEADGROUPRESULT
+DESCRIPTOR.message_types_by_name['GetAdGroupRequest'] = _GETADGROUPREQUEST
+DESCRIPTOR.message_types_by_name['MutateAdGroupsRequest'] = _MUTATEADGROUPSREQUEST
+DESCRIPTOR.message_types_by_name['AdGroupOperation'] = _ADGROUPOPERATION
+DESCRIPTOR.message_types_by_name['MutateAdGroupsResponse'] = _MUTATEADGROUPSRESPONSE
+DESCRIPTOR.message_types_by_name['MutateAdGroupResult'] = _MUTATEADGROUPRESULT
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+GetAdGroupRequest = _reflection.GeneratedProtocolMessageType('GetAdGroupRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETADGROUPREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [AdGroupService.GetAdGroup][google.ads.googleads.v0.services.AdGroupService.GetAdGroup].
+
+
+ Attributes:
+ resource_name:
+ The resource name of the ad group to fetch.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.GetAdGroupRequest)
+ ))
+_sym_db.RegisterMessage(GetAdGroupRequest)
+
+MutateAdGroupsRequest = _reflection.GeneratedProtocolMessageType('MutateAdGroupsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATEADGROUPSREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [AdGroupService.MutateAdGroups][google.ads.googleads.v0.services.AdGroupService.MutateAdGroups].
+
+
+ Attributes:
+ customer_id:
+ The ID of the customer whose ad groups are being modified.
+ operations:
+ The list of operations to perform on individual ad groups.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateAdGroupsRequest)
+ ))
+_sym_db.RegisterMessage(MutateAdGroupsRequest)
+
+AdGroupOperation = _reflection.GeneratedProtocolMessageType('AdGroupOperation', (_message.Message,), dict(
+ DESCRIPTOR = _ADGROUPOPERATION,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_service_pb2'
+ ,
+ __doc__ = """A single operation (create, update, remove) on an ad group.
+
+
+ Attributes:
+ update_mask:
+ FieldMask that determines which resource fields are modified
+ in an update.
+ operation:
+ The mutate operation.
+ create:
+ Create operation: No resource name is expected for the new ad
+ group.
+ update:
+ Update operation: The ad group is expected to have a valid
+ resource name.
+ remove:
+ Remove operation: A resource name for the removed ad group is
+ expected, in this format:
+ ``customers/{customer_id}/adGroups/{ad_group_id}``
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.AdGroupOperation)
+ ))
+_sym_db.RegisterMessage(AdGroupOperation)
+
+MutateAdGroupsResponse = _reflection.GeneratedProtocolMessageType('MutateAdGroupsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATEADGROUPSRESPONSE,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_service_pb2'
+ ,
+ __doc__ = """Response message for an ad group mutate.
+
+
+ Attributes:
+ results:
+ All results for the mutate.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateAdGroupsResponse)
+ ))
+_sym_db.RegisterMessage(MutateAdGroupsResponse)
+
+MutateAdGroupResult = _reflection.GeneratedProtocolMessageType('MutateAdGroupResult', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATEADGROUPRESULT,
+ __module__ = 'google.ads.googleads_v0.proto.services.ad_group_service_pb2'
+ ,
+ __doc__ = """The result for the ad group mutate.
+
+
+ Attributes:
+ resource_name:
+ Returned for successful operations.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateAdGroupResult)
+ ))
+_sym_db.RegisterMessage(MutateAdGroupResult)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$com.google.ads.googleads.v0.servicesB\023AdGroupServiceProtoP\001ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\242\002\003GAA\252\002 Google.Ads.GoogleAds.V0.Services\312\002 Google\\Ads\\GoogleAds\\V0\\Services'))
+
+_ADGROUPSERVICE = _descriptor.ServiceDescriptor(
+ name='AdGroupService',
+ full_name='google.ads.googleads.v0.services.AdGroupService',
+ file=DESCRIPTOR,
+ index=0,
+ options=None,
+ serialized_start=751,
+ serialized_end=1123,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='GetAdGroup',
+ full_name='google.ads.googleads.v0.services.AdGroupService.GetAdGroup',
+ index=0,
+ containing_service=None,
+ input_type=_GETADGROUPREQUEST,
+ output_type=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__pb2._ADGROUP,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002,\022*/v0/{resource_name=customers/*/adGroups/*}')),
+ ),
+ _descriptor.MethodDescriptor(
+ name='MutateAdGroups',
+ full_name='google.ads.googleads.v0.services.AdGroupService.MutateAdGroups',
+ index=1,
+ containing_service=None,
+ input_type=_MUTATEADGROUPSREQUEST,
+ output_type=_MUTATEADGROUPSRESPONSE,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0022\"-/v0/customers/{customer_id=*}/adGroups:mutate:\001*')),
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_ADGROUPSERVICE)
+
+DESCRIPTOR.services_by_name['AdGroupService'] = _ADGROUPSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/services/ad_group_service_pb2_grpc.py b/google/ads/google_ads/v0/proto/services/ad_group_service_pb2_grpc.py
new file mode 100644
index 000000000..e43cf8edb
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/ad_group_service_pb2_grpc.py
@@ -0,0 +1,64 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
+from google.ads.google_ads.v0.proto.resources import ad_group_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__pb2
+from google.ads.google_ads.v0.proto.services import ad_group_service_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__service__pb2
+
+
+class AdGroupServiceStub(object):
+ """Service to manage ad groups.
+ """
+
+ def __init__(self, channel):
+ """Constructor.
+
+ Args:
+ channel: A grpc.Channel.
+ """
+ self.GetAdGroup = channel.unary_unary(
+ '/google.ads.googleads.v0.services.AdGroupService/GetAdGroup',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__service__pb2.GetAdGroupRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__pb2.AdGroup.FromString,
+ )
+ self.MutateAdGroups = channel.unary_unary(
+ '/google.ads.googleads.v0.services.AdGroupService/MutateAdGroups',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__service__pb2.MutateAdGroupsRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__service__pb2.MutateAdGroupsResponse.FromString,
+ )
+
+
+class AdGroupServiceServicer(object):
+ """Service to manage ad groups.
+ """
+
+ def GetAdGroup(self, request, context):
+ """Returns the requested ad group in full detail.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+ def MutateAdGroups(self, request, context):
+ """Creates, updates, or removes ad groups. Operation statuses are returned.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+
+def add_AdGroupServiceServicer_to_server(servicer, server):
+ rpc_method_handlers = {
+ 'GetAdGroup': grpc.unary_unary_rpc_method_handler(
+ servicer.GetAdGroup,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__service__pb2.GetAdGroupRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__pb2.AdGroup.SerializeToString,
+ ),
+ 'MutateAdGroups': grpc.unary_unary_rpc_method_handler(
+ servicer.MutateAdGroups,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__service__pb2.MutateAdGroupsRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_ad__group__service__pb2.MutateAdGroupsResponse.SerializeToString,
+ ),
+ }
+ generic_handler = grpc.method_handlers_generic_handler(
+ 'google.ads.googleads.v0.services.AdGroupService', rpc_method_handlers)
+ server.add_generic_rpc_handlers((generic_handler,))
diff --git a/google/ads/google_ads/v0/proto/services/bidding_strategy_service_pb2.py b/google/ads/google_ads/v0/proto/services/bidding_strategy_service_pb2.py
new file mode 100644
index 000000000..1097b38db
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/bidding_strategy_service_pb2.py
@@ -0,0 +1,368 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/services/bidding_strategy_service.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.resources import bidding_strategy_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_bidding__strategy__pb2
+from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
+from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/services/bidding_strategy_service.proto',
+ package='google.ads.googleads.v0.services',
+ syntax='proto3',
+ serialized_pb=_b('\nEgoogle/ads/googleads_v0/proto/services/bidding_strategy_service.proto\x12 google.ads.googleads.v0.services\x1a>google/ads/googleads_v0/proto/resources/bidding_strategy.proto\x1a\x1cgoogle/api/annotations.proto\x1a google/protobuf/field_mask.proto\"2\n\x19GetBiddingStrategyRequest\x12\x15\n\rresource_name\x18\x01 \x01(\t\"\x85\x01\n\x1eMutateBiddingStrategiesRequest\x12\x13\n\x0b\x63ustomer_id\x18\x01 \x01(\t\x12N\n\noperations\x18\x02 \x03(\x0b\x32:.google.ads.googleads.v0.services.BiddingStrategyOperation\"\xf6\x01\n\x18\x42iddingStrategyOperation\x12/\n\x0bupdate_mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMask\x12\x44\n\x06\x63reate\x18\x01 \x01(\x0b\x32\x32.google.ads.googleads.v0.resources.BiddingStrategyH\x00\x12\x44\n\x06update\x18\x02 \x01(\x0b\x32\x32.google.ads.googleads.v0.resources.BiddingStrategyH\x00\x12\x10\n\x06remove\x18\x03 \x01(\tH\x00\x42\x0b\n\toperation\"q\n\x1fMutateBiddingStrategiesResponse\x12N\n\x07results\x18\x02 \x03(\x0b\x32=.google.ads.googleads.v0.services.MutateBiddingStrategyResult\"4\n\x1bMutateBiddingStrategyResult\x12\x15\n\rresource_name\x18\x01 \x01(\t2\xc1\x03\n\x16\x42iddingStrategyService\x12\xc2\x01\n\x12GetBiddingStrategy\x12;.google.ads.googleads.v0.services.GetBiddingStrategyRequest\x1a\x32.google.ads.googleads.v0.resources.BiddingStrategy\";\x82\xd3\xe4\x93\x02\x35\x12\x33/v0/{resource_name=customers/*/biddingStrategies/*}\x12\xe1\x01\n\x17MutateBiddingStrategies\x12@.google.ads.googleads.v0.services.MutateBiddingStrategiesRequest\x1a\x41.google.ads.googleads.v0.services.MutateBiddingStrategiesResponse\"A\x82\xd3\xe4\x93\x02;\"6/v0/customers/{customer_id=*}/biddingStrategies:mutate:\x01*B\xdb\x01\n$com.google.ads.googleads.v0.servicesB\x1b\x42iddingStrategyServiceProtoP\x01ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\xa2\x02\x03GAA\xaa\x02 Google.Ads.GoogleAds.V0.Services\xca\x02 Google\\Ads\\GoogleAds\\V0\\Servicesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_bidding__strategy__pb2.DESCRIPTOR,google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_protobuf_dot_field__mask__pb2.DESCRIPTOR,])
+
+
+
+
+_GETBIDDINGSTRATEGYREQUEST = _descriptor.Descriptor(
+ name='GetBiddingStrategyRequest',
+ full_name='google.ads.googleads.v0.services.GetBiddingStrategyRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.GetBiddingStrategyRequest.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=235,
+ serialized_end=285,
+)
+
+
+_MUTATEBIDDINGSTRATEGIESREQUEST = _descriptor.Descriptor(
+ name='MutateBiddingStrategiesRequest',
+ full_name='google.ads.googleads.v0.services.MutateBiddingStrategiesRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='customer_id', full_name='google.ads.googleads.v0.services.MutateBiddingStrategiesRequest.customer_id', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='operations', full_name='google.ads.googleads.v0.services.MutateBiddingStrategiesRequest.operations', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=288,
+ serialized_end=421,
+)
+
+
+_BIDDINGSTRATEGYOPERATION = _descriptor.Descriptor(
+ name='BiddingStrategyOperation',
+ full_name='google.ads.googleads.v0.services.BiddingStrategyOperation',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='update_mask', full_name='google.ads.googleads.v0.services.BiddingStrategyOperation.update_mask', index=0,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='create', full_name='google.ads.googleads.v0.services.BiddingStrategyOperation.create', index=1,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='update', full_name='google.ads.googleads.v0.services.BiddingStrategyOperation.update', index=2,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='remove', full_name='google.ads.googleads.v0.services.BiddingStrategyOperation.remove', index=3,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='operation', full_name='google.ads.googleads.v0.services.BiddingStrategyOperation.operation',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=424,
+ serialized_end=670,
+)
+
+
+_MUTATEBIDDINGSTRATEGIESRESPONSE = _descriptor.Descriptor(
+ name='MutateBiddingStrategiesResponse',
+ full_name='google.ads.googleads.v0.services.MutateBiddingStrategiesResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='results', full_name='google.ads.googleads.v0.services.MutateBiddingStrategiesResponse.results', index=0,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=672,
+ serialized_end=785,
+)
+
+
+_MUTATEBIDDINGSTRATEGYRESULT = _descriptor.Descriptor(
+ name='MutateBiddingStrategyResult',
+ full_name='google.ads.googleads.v0.services.MutateBiddingStrategyResult',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.MutateBiddingStrategyResult.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=787,
+ serialized_end=839,
+)
+
+_MUTATEBIDDINGSTRATEGIESREQUEST.fields_by_name['operations'].message_type = _BIDDINGSTRATEGYOPERATION
+_BIDDINGSTRATEGYOPERATION.fields_by_name['update_mask'].message_type = google_dot_protobuf_dot_field__mask__pb2._FIELDMASK
+_BIDDINGSTRATEGYOPERATION.fields_by_name['create'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_bidding__strategy__pb2._BIDDINGSTRATEGY
+_BIDDINGSTRATEGYOPERATION.fields_by_name['update'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_bidding__strategy__pb2._BIDDINGSTRATEGY
+_BIDDINGSTRATEGYOPERATION.oneofs_by_name['operation'].fields.append(
+ _BIDDINGSTRATEGYOPERATION.fields_by_name['create'])
+_BIDDINGSTRATEGYOPERATION.fields_by_name['create'].containing_oneof = _BIDDINGSTRATEGYOPERATION.oneofs_by_name['operation']
+_BIDDINGSTRATEGYOPERATION.oneofs_by_name['operation'].fields.append(
+ _BIDDINGSTRATEGYOPERATION.fields_by_name['update'])
+_BIDDINGSTRATEGYOPERATION.fields_by_name['update'].containing_oneof = _BIDDINGSTRATEGYOPERATION.oneofs_by_name['operation']
+_BIDDINGSTRATEGYOPERATION.oneofs_by_name['operation'].fields.append(
+ _BIDDINGSTRATEGYOPERATION.fields_by_name['remove'])
+_BIDDINGSTRATEGYOPERATION.fields_by_name['remove'].containing_oneof = _BIDDINGSTRATEGYOPERATION.oneofs_by_name['operation']
+_MUTATEBIDDINGSTRATEGIESRESPONSE.fields_by_name['results'].message_type = _MUTATEBIDDINGSTRATEGYRESULT
+DESCRIPTOR.message_types_by_name['GetBiddingStrategyRequest'] = _GETBIDDINGSTRATEGYREQUEST
+DESCRIPTOR.message_types_by_name['MutateBiddingStrategiesRequest'] = _MUTATEBIDDINGSTRATEGIESREQUEST
+DESCRIPTOR.message_types_by_name['BiddingStrategyOperation'] = _BIDDINGSTRATEGYOPERATION
+DESCRIPTOR.message_types_by_name['MutateBiddingStrategiesResponse'] = _MUTATEBIDDINGSTRATEGIESRESPONSE
+DESCRIPTOR.message_types_by_name['MutateBiddingStrategyResult'] = _MUTATEBIDDINGSTRATEGYRESULT
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+GetBiddingStrategyRequest = _reflection.GeneratedProtocolMessageType('GetBiddingStrategyRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETBIDDINGSTRATEGYREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.bidding_strategy_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [BiddingStrategyService.GetBiddingStrategy][google.ads.googleads.v0.services.BiddingStrategyService.GetBiddingStrategy].
+
+
+ Attributes:
+ resource_name:
+ The resource name of the bidding strategy to fetch.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.GetBiddingStrategyRequest)
+ ))
+_sym_db.RegisterMessage(GetBiddingStrategyRequest)
+
+MutateBiddingStrategiesRequest = _reflection.GeneratedProtocolMessageType('MutateBiddingStrategiesRequest', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATEBIDDINGSTRATEGIESREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.bidding_strategy_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [BiddingStrategyService.MutateBiddingStrategies][google.ads.googleads.v0.services.BiddingStrategyService.MutateBiddingStrategies].
+
+
+ Attributes:
+ customer_id:
+ The ID of the customer whose bidding strategies are being
+ modified.
+ operations:
+ The list of operations to perform on individual bidding
+ strategies.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateBiddingStrategiesRequest)
+ ))
+_sym_db.RegisterMessage(MutateBiddingStrategiesRequest)
+
+BiddingStrategyOperation = _reflection.GeneratedProtocolMessageType('BiddingStrategyOperation', (_message.Message,), dict(
+ DESCRIPTOR = _BIDDINGSTRATEGYOPERATION,
+ __module__ = 'google.ads.googleads_v0.proto.services.bidding_strategy_service_pb2'
+ ,
+ __doc__ = """A single operation (create, update, remove) on a bidding strategy.
+
+
+ Attributes:
+ update_mask:
+ FieldMask that determines which resource fields are modified
+ in an update.
+ operation:
+ The mutate operation.
+ create:
+ Create operation: No resource name is expected for the new
+ bidding strategy.
+ update:
+ Update operation: The bidding strategy is expected to have a
+ valid resource name.
+ remove:
+ Remove operation: A resource name for the removed bidding
+ strategy is expected, in this format: ``customers/{customer_i
+ d}/biddingStrategies/{bidding_strategy_id}``
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.BiddingStrategyOperation)
+ ))
+_sym_db.RegisterMessage(BiddingStrategyOperation)
+
+MutateBiddingStrategiesResponse = _reflection.GeneratedProtocolMessageType('MutateBiddingStrategiesResponse', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATEBIDDINGSTRATEGIESRESPONSE,
+ __module__ = 'google.ads.googleads_v0.proto.services.bidding_strategy_service_pb2'
+ ,
+ __doc__ = """Response message for bidding strategy mutate.
+
+
+ Attributes:
+ results:
+ All results for the mutate.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateBiddingStrategiesResponse)
+ ))
+_sym_db.RegisterMessage(MutateBiddingStrategiesResponse)
+
+MutateBiddingStrategyResult = _reflection.GeneratedProtocolMessageType('MutateBiddingStrategyResult', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATEBIDDINGSTRATEGYRESULT,
+ __module__ = 'google.ads.googleads_v0.proto.services.bidding_strategy_service_pb2'
+ ,
+ __doc__ = """The result for the bidding strategy mutate.
+
+
+ Attributes:
+ resource_name:
+ Returned for successful operations.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateBiddingStrategyResult)
+ ))
+_sym_db.RegisterMessage(MutateBiddingStrategyResult)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$com.google.ads.googleads.v0.servicesB\033BiddingStrategyServiceProtoP\001ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\242\002\003GAA\252\002 Google.Ads.GoogleAds.V0.Services\312\002 Google\\Ads\\GoogleAds\\V0\\Services'))
+
+_BIDDINGSTRATEGYSERVICE = _descriptor.ServiceDescriptor(
+ name='BiddingStrategyService',
+ full_name='google.ads.googleads.v0.services.BiddingStrategyService',
+ file=DESCRIPTOR,
+ index=0,
+ options=None,
+ serialized_start=842,
+ serialized_end=1291,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='GetBiddingStrategy',
+ full_name='google.ads.googleads.v0.services.BiddingStrategyService.GetBiddingStrategy',
+ index=0,
+ containing_service=None,
+ input_type=_GETBIDDINGSTRATEGYREQUEST,
+ output_type=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_bidding__strategy__pb2._BIDDINGSTRATEGY,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0025\0223/v0/{resource_name=customers/*/biddingStrategies/*}')),
+ ),
+ _descriptor.MethodDescriptor(
+ name='MutateBiddingStrategies',
+ full_name='google.ads.googleads.v0.services.BiddingStrategyService.MutateBiddingStrategies',
+ index=1,
+ containing_service=None,
+ input_type=_MUTATEBIDDINGSTRATEGIESREQUEST,
+ output_type=_MUTATEBIDDINGSTRATEGIESRESPONSE,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002;\"6/v0/customers/{customer_id=*}/biddingStrategies:mutate:\001*')),
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_BIDDINGSTRATEGYSERVICE)
+
+DESCRIPTOR.services_by_name['BiddingStrategyService'] = _BIDDINGSTRATEGYSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/services/bidding_strategy_service_pb2_grpc.py b/google/ads/google_ads/v0/proto/services/bidding_strategy_service_pb2_grpc.py
new file mode 100644
index 000000000..13fe663eb
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/bidding_strategy_service_pb2_grpc.py
@@ -0,0 +1,65 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
+from google.ads.google_ads.v0.proto.resources import bidding_strategy_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_bidding__strategy__pb2
+from google.ads.google_ads.v0.proto.services import bidding_strategy_service_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_bidding__strategy__service__pb2
+
+
+class BiddingStrategyServiceStub(object):
+ """Service to manage bidding strategies.
+ """
+
+ def __init__(self, channel):
+ """Constructor.
+
+ Args:
+ channel: A grpc.Channel.
+ """
+ self.GetBiddingStrategy = channel.unary_unary(
+ '/google.ads.googleads.v0.services.BiddingStrategyService/GetBiddingStrategy',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_bidding__strategy__service__pb2.GetBiddingStrategyRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_bidding__strategy__pb2.BiddingStrategy.FromString,
+ )
+ self.MutateBiddingStrategies = channel.unary_unary(
+ '/google.ads.googleads.v0.services.BiddingStrategyService/MutateBiddingStrategies',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_bidding__strategy__service__pb2.MutateBiddingStrategiesRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_bidding__strategy__service__pb2.MutateBiddingStrategiesResponse.FromString,
+ )
+
+
+class BiddingStrategyServiceServicer(object):
+ """Service to manage bidding strategies.
+ """
+
+ def GetBiddingStrategy(self, request, context):
+ """Returns the requested bidding strategy in full detail.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+ def MutateBiddingStrategies(self, request, context):
+ """Creates, updates, or removes bidding strategies. Operation statuses are
+ returned.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+
+def add_BiddingStrategyServiceServicer_to_server(servicer, server):
+ rpc_method_handlers = {
+ 'GetBiddingStrategy': grpc.unary_unary_rpc_method_handler(
+ servicer.GetBiddingStrategy,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_bidding__strategy__service__pb2.GetBiddingStrategyRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_bidding__strategy__pb2.BiddingStrategy.SerializeToString,
+ ),
+ 'MutateBiddingStrategies': grpc.unary_unary_rpc_method_handler(
+ servicer.MutateBiddingStrategies,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_bidding__strategy__service__pb2.MutateBiddingStrategiesRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_bidding__strategy__service__pb2.MutateBiddingStrategiesResponse.SerializeToString,
+ ),
+ }
+ generic_handler = grpc.method_handlers_generic_handler(
+ 'google.ads.googleads.v0.services.BiddingStrategyService', rpc_method_handlers)
+ server.add_generic_rpc_handlers((generic_handler,))
diff --git a/google/ads/google_ads/v0/proto/services/campaign_budget_service_pb2.py b/google/ads/google_ads/v0/proto/services/campaign_budget_service_pb2.py
new file mode 100644
index 000000000..0833f69a3
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/campaign_budget_service_pb2.py
@@ -0,0 +1,368 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/services/campaign_budget_service.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.resources import campaign_budget_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__budget__pb2
+from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
+from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/services/campaign_budget_service.proto',
+ package='google.ads.googleads.v0.services',
+ syntax='proto3',
+ serialized_pb=_b('\nDgoogle/ads/googleads_v0/proto/services/campaign_budget_service.proto\x12 google.ads.googleads.v0.services\x1a=google/ads/googleads_v0/proto/resources/campaign_budget.proto\x1a\x1cgoogle/api/annotations.proto\x1a google/protobuf/field_mask.proto\"1\n\x18GetCampaignBudgetRequest\x12\x15\n\rresource_name\x18\x01 \x01(\t\"\x82\x01\n\x1cMutateCampaignBudgetsRequest\x12\x13\n\x0b\x63ustomer_id\x18\x01 \x01(\t\x12M\n\noperations\x18\x02 \x03(\x0b\x32\x39.google.ads.googleads.v0.services.CampaignBudgetOperation\"\xf3\x01\n\x17\x43\x61mpaignBudgetOperation\x12/\n\x0bupdate_mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMask\x12\x43\n\x06\x63reate\x18\x01 \x01(\x0b\x32\x31.google.ads.googleads.v0.resources.CampaignBudgetH\x00\x12\x43\n\x06update\x18\x02 \x01(\x0b\x32\x31.google.ads.googleads.v0.resources.CampaignBudgetH\x00\x12\x10\n\x06remove\x18\x03 \x01(\tH\x00\x42\x0b\n\toperation\"n\n\x1dMutateCampaignBudgetsResponse\x12M\n\x07results\x18\x02 \x03(\x0b\x32<.google.ads.googleads.v0.services.MutateCampaignBudgetResult\"3\n\x1aMutateCampaignBudgetResult\x12\x15\n\rresource_name\x18\x01 \x01(\t2\xb3\x03\n\x15\x43\x61mpaignBudgetService\x12\xbd\x01\n\x11GetCampaignBudget\x12:.google.ads.googleads.v0.services.GetCampaignBudgetRequest\x1a\x31.google.ads.googleads.v0.resources.CampaignBudget\"9\x82\xd3\xe4\x93\x02\x33\x12\x31/v0/{resource_name=customers/*/campaignBudgets/*}\x12\xd9\x01\n\x15MutateCampaignBudgets\x12>.google.ads.googleads.v0.services.MutateCampaignBudgetsRequest\x1a?.google.ads.googleads.v0.services.MutateCampaignBudgetsResponse\"?\x82\xd3\xe4\x93\x02\x39\"4/v0/customers/{customer_id=*}/campaignBudgets:mutate:\x01*B\xda\x01\n$com.google.ads.googleads.v0.servicesB\x1a\x43\x61mpaignBudgetServiceProtoP\x01ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\xa2\x02\x03GAA\xaa\x02 Google.Ads.GoogleAds.V0.Services\xca\x02 Google\\Ads\\GoogleAds\\V0\\Servicesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__budget__pb2.DESCRIPTOR,google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_protobuf_dot_field__mask__pb2.DESCRIPTOR,])
+
+
+
+
+_GETCAMPAIGNBUDGETREQUEST = _descriptor.Descriptor(
+ name='GetCampaignBudgetRequest',
+ full_name='google.ads.googleads.v0.services.GetCampaignBudgetRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.GetCampaignBudgetRequest.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=233,
+ serialized_end=282,
+)
+
+
+_MUTATECAMPAIGNBUDGETSREQUEST = _descriptor.Descriptor(
+ name='MutateCampaignBudgetsRequest',
+ full_name='google.ads.googleads.v0.services.MutateCampaignBudgetsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='customer_id', full_name='google.ads.googleads.v0.services.MutateCampaignBudgetsRequest.customer_id', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='operations', full_name='google.ads.googleads.v0.services.MutateCampaignBudgetsRequest.operations', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=285,
+ serialized_end=415,
+)
+
+
+_CAMPAIGNBUDGETOPERATION = _descriptor.Descriptor(
+ name='CampaignBudgetOperation',
+ full_name='google.ads.googleads.v0.services.CampaignBudgetOperation',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='update_mask', full_name='google.ads.googleads.v0.services.CampaignBudgetOperation.update_mask', index=0,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='create', full_name='google.ads.googleads.v0.services.CampaignBudgetOperation.create', index=1,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='update', full_name='google.ads.googleads.v0.services.CampaignBudgetOperation.update', index=2,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='remove', full_name='google.ads.googleads.v0.services.CampaignBudgetOperation.remove', index=3,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='operation', full_name='google.ads.googleads.v0.services.CampaignBudgetOperation.operation',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=418,
+ serialized_end=661,
+)
+
+
+_MUTATECAMPAIGNBUDGETSRESPONSE = _descriptor.Descriptor(
+ name='MutateCampaignBudgetsResponse',
+ full_name='google.ads.googleads.v0.services.MutateCampaignBudgetsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='results', full_name='google.ads.googleads.v0.services.MutateCampaignBudgetsResponse.results', index=0,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=663,
+ serialized_end=773,
+)
+
+
+_MUTATECAMPAIGNBUDGETRESULT = _descriptor.Descriptor(
+ name='MutateCampaignBudgetResult',
+ full_name='google.ads.googleads.v0.services.MutateCampaignBudgetResult',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.MutateCampaignBudgetResult.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=775,
+ serialized_end=826,
+)
+
+_MUTATECAMPAIGNBUDGETSREQUEST.fields_by_name['operations'].message_type = _CAMPAIGNBUDGETOPERATION
+_CAMPAIGNBUDGETOPERATION.fields_by_name['update_mask'].message_type = google_dot_protobuf_dot_field__mask__pb2._FIELDMASK
+_CAMPAIGNBUDGETOPERATION.fields_by_name['create'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__budget__pb2._CAMPAIGNBUDGET
+_CAMPAIGNBUDGETOPERATION.fields_by_name['update'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__budget__pb2._CAMPAIGNBUDGET
+_CAMPAIGNBUDGETOPERATION.oneofs_by_name['operation'].fields.append(
+ _CAMPAIGNBUDGETOPERATION.fields_by_name['create'])
+_CAMPAIGNBUDGETOPERATION.fields_by_name['create'].containing_oneof = _CAMPAIGNBUDGETOPERATION.oneofs_by_name['operation']
+_CAMPAIGNBUDGETOPERATION.oneofs_by_name['operation'].fields.append(
+ _CAMPAIGNBUDGETOPERATION.fields_by_name['update'])
+_CAMPAIGNBUDGETOPERATION.fields_by_name['update'].containing_oneof = _CAMPAIGNBUDGETOPERATION.oneofs_by_name['operation']
+_CAMPAIGNBUDGETOPERATION.oneofs_by_name['operation'].fields.append(
+ _CAMPAIGNBUDGETOPERATION.fields_by_name['remove'])
+_CAMPAIGNBUDGETOPERATION.fields_by_name['remove'].containing_oneof = _CAMPAIGNBUDGETOPERATION.oneofs_by_name['operation']
+_MUTATECAMPAIGNBUDGETSRESPONSE.fields_by_name['results'].message_type = _MUTATECAMPAIGNBUDGETRESULT
+DESCRIPTOR.message_types_by_name['GetCampaignBudgetRequest'] = _GETCAMPAIGNBUDGETREQUEST
+DESCRIPTOR.message_types_by_name['MutateCampaignBudgetsRequest'] = _MUTATECAMPAIGNBUDGETSREQUEST
+DESCRIPTOR.message_types_by_name['CampaignBudgetOperation'] = _CAMPAIGNBUDGETOPERATION
+DESCRIPTOR.message_types_by_name['MutateCampaignBudgetsResponse'] = _MUTATECAMPAIGNBUDGETSRESPONSE
+DESCRIPTOR.message_types_by_name['MutateCampaignBudgetResult'] = _MUTATECAMPAIGNBUDGETRESULT
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+GetCampaignBudgetRequest = _reflection.GeneratedProtocolMessageType('GetCampaignBudgetRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETCAMPAIGNBUDGETREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.campaign_budget_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [CampaignBudgetService.GetCampaignBudget][google.ads.googleads.v0.services.CampaignBudgetService.GetCampaignBudget].
+
+
+ Attributes:
+ resource_name:
+ The resource name of the campaign budget to fetch.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.GetCampaignBudgetRequest)
+ ))
+_sym_db.RegisterMessage(GetCampaignBudgetRequest)
+
+MutateCampaignBudgetsRequest = _reflection.GeneratedProtocolMessageType('MutateCampaignBudgetsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATECAMPAIGNBUDGETSREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.campaign_budget_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [CampaignBudgetService.MutateCampaignBudgets][google.ads.googleads.v0.services.CampaignBudgetService.MutateCampaignBudgets].
+
+
+ Attributes:
+ customer_id:
+ The ID of the customer whose campaign budgets are being
+ modified.
+ operations:
+ The list of operations to perform on individual campaign
+ budgets.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateCampaignBudgetsRequest)
+ ))
+_sym_db.RegisterMessage(MutateCampaignBudgetsRequest)
+
+CampaignBudgetOperation = _reflection.GeneratedProtocolMessageType('CampaignBudgetOperation', (_message.Message,), dict(
+ DESCRIPTOR = _CAMPAIGNBUDGETOPERATION,
+ __module__ = 'google.ads.googleads_v0.proto.services.campaign_budget_service_pb2'
+ ,
+ __doc__ = """A single operation (create, update, remove) on a campaign budget.
+
+
+ Attributes:
+ update_mask:
+ FieldMask that determines which resource fields are modified
+ in an update.
+ operation:
+ The mutate operation.
+ create:
+ Create operation: No resource name is expected for the new
+ budget.
+ update:
+ Update operation: The campaign budget is expected to have a
+ valid resource name.
+ remove:
+ Remove operation: A resource name for the removed budget is
+ expected, in this format:
+ ``customers/{customer_id}/campaignBudgets/{budget_id}``
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.CampaignBudgetOperation)
+ ))
+_sym_db.RegisterMessage(CampaignBudgetOperation)
+
+MutateCampaignBudgetsResponse = _reflection.GeneratedProtocolMessageType('MutateCampaignBudgetsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATECAMPAIGNBUDGETSRESPONSE,
+ __module__ = 'google.ads.googleads_v0.proto.services.campaign_budget_service_pb2'
+ ,
+ __doc__ = """Response message for campaign budget mutate.
+
+
+ Attributes:
+ results:
+ All results for the mutate.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateCampaignBudgetsResponse)
+ ))
+_sym_db.RegisterMessage(MutateCampaignBudgetsResponse)
+
+MutateCampaignBudgetResult = _reflection.GeneratedProtocolMessageType('MutateCampaignBudgetResult', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATECAMPAIGNBUDGETRESULT,
+ __module__ = 'google.ads.googleads_v0.proto.services.campaign_budget_service_pb2'
+ ,
+ __doc__ = """The result for the campaign budget mutate.
+
+
+ Attributes:
+ resource_name:
+ Returned for successful operations.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateCampaignBudgetResult)
+ ))
+_sym_db.RegisterMessage(MutateCampaignBudgetResult)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$com.google.ads.googleads.v0.servicesB\032CampaignBudgetServiceProtoP\001ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\242\002\003GAA\252\002 Google.Ads.GoogleAds.V0.Services\312\002 Google\\Ads\\GoogleAds\\V0\\Services'))
+
+_CAMPAIGNBUDGETSERVICE = _descriptor.ServiceDescriptor(
+ name='CampaignBudgetService',
+ full_name='google.ads.googleads.v0.services.CampaignBudgetService',
+ file=DESCRIPTOR,
+ index=0,
+ options=None,
+ serialized_start=829,
+ serialized_end=1264,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='GetCampaignBudget',
+ full_name='google.ads.googleads.v0.services.CampaignBudgetService.GetCampaignBudget',
+ index=0,
+ containing_service=None,
+ input_type=_GETCAMPAIGNBUDGETREQUEST,
+ output_type=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__budget__pb2._CAMPAIGNBUDGET,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0023\0221/v0/{resource_name=customers/*/campaignBudgets/*}')),
+ ),
+ _descriptor.MethodDescriptor(
+ name='MutateCampaignBudgets',
+ full_name='google.ads.googleads.v0.services.CampaignBudgetService.MutateCampaignBudgets',
+ index=1,
+ containing_service=None,
+ input_type=_MUTATECAMPAIGNBUDGETSREQUEST,
+ output_type=_MUTATECAMPAIGNBUDGETSRESPONSE,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0029\"4/v0/customers/{customer_id=*}/campaignBudgets:mutate:\001*')),
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_CAMPAIGNBUDGETSERVICE)
+
+DESCRIPTOR.services_by_name['CampaignBudgetService'] = _CAMPAIGNBUDGETSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/services/campaign_budget_service_pb2_grpc.py b/google/ads/google_ads/v0/proto/services/campaign_budget_service_pb2_grpc.py
new file mode 100644
index 000000000..3f8c75b90
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/campaign_budget_service_pb2_grpc.py
@@ -0,0 +1,65 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
+from google.ads.google_ads.v0.proto.resources import campaign_budget_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__budget__pb2
+from google.ads.google_ads.v0.proto.services import campaign_budget_service_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__budget__service__pb2
+
+
+class CampaignBudgetServiceStub(object):
+ """Service to manage campaign budgets.
+ """
+
+ def __init__(self, channel):
+ """Constructor.
+
+ Args:
+ channel: A grpc.Channel.
+ """
+ self.GetCampaignBudget = channel.unary_unary(
+ '/google.ads.googleads.v0.services.CampaignBudgetService/GetCampaignBudget',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__budget__service__pb2.GetCampaignBudgetRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__budget__pb2.CampaignBudget.FromString,
+ )
+ self.MutateCampaignBudgets = channel.unary_unary(
+ '/google.ads.googleads.v0.services.CampaignBudgetService/MutateCampaignBudgets',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__budget__service__pb2.MutateCampaignBudgetsRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__budget__service__pb2.MutateCampaignBudgetsResponse.FromString,
+ )
+
+
+class CampaignBudgetServiceServicer(object):
+ """Service to manage campaign budgets.
+ """
+
+ def GetCampaignBudget(self, request, context):
+ """Returns the requested Campaign Budget in full detail.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+ def MutateCampaignBudgets(self, request, context):
+ """Creates, updates, or removes campaign budgets. Operation statuses are
+ returned.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+
+def add_CampaignBudgetServiceServicer_to_server(servicer, server):
+ rpc_method_handlers = {
+ 'GetCampaignBudget': grpc.unary_unary_rpc_method_handler(
+ servicer.GetCampaignBudget,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__budget__service__pb2.GetCampaignBudgetRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__budget__pb2.CampaignBudget.SerializeToString,
+ ),
+ 'MutateCampaignBudgets': grpc.unary_unary_rpc_method_handler(
+ servicer.MutateCampaignBudgets,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__budget__service__pb2.MutateCampaignBudgetsRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__budget__service__pb2.MutateCampaignBudgetsResponse.SerializeToString,
+ ),
+ }
+ generic_handler = grpc.method_handlers_generic_handler(
+ 'google.ads.googleads.v0.services.CampaignBudgetService', rpc_method_handlers)
+ server.add_generic_rpc_handlers((generic_handler,))
diff --git a/google/ads/google_ads/v0/proto/services/campaign_criterion_service_pb2.py b/google/ads/google_ads/v0/proto/services/campaign_criterion_service_pb2.py
new file mode 100644
index 000000000..4dde29c6c
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/campaign_criterion_service_pb2.py
@@ -0,0 +1,366 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/services/campaign_criterion_service.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.resources import campaign_criterion_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__criterion__pb2
+from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
+from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/services/campaign_criterion_service.proto',
+ package='google.ads.googleads.v0.services',
+ syntax='proto3',
+ serialized_pb=_b('\nGgoogle/ads/googleads_v0/proto/services/campaign_criterion_service.proto\x12 google.ads.googleads.v0.services\x1a@google/ads/googleads_v0/proto/resources/campaign_criterion.proto\x1a\x1cgoogle/api/annotations.proto\x1a google/protobuf/field_mask.proto\"4\n\x1bGetCampaignCriterionRequest\x12\x15\n\rresource_name\x18\x01 \x01(\t\"\x86\x01\n\x1dMutateCampaignCriteriaRequest\x12\x13\n\x0b\x63ustomer_id\x18\x01 \x01(\t\x12P\n\noperations\x18\x02 \x03(\x0b\x32<.google.ads.googleads.v0.services.CampaignCriterionOperation\"\xfc\x01\n\x1a\x43\x61mpaignCriterionOperation\x12/\n\x0bupdate_mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMask\x12\x46\n\x06\x63reate\x18\x01 \x01(\x0b\x32\x34.google.ads.googleads.v0.resources.CampaignCriterionH\x00\x12\x46\n\x06update\x18\x02 \x01(\x0b\x32\x34.google.ads.googleads.v0.resources.CampaignCriterionH\x00\x12\x10\n\x06remove\x18\x03 \x01(\tH\x00\x42\x0b\n\toperation\"r\n\x1eMutateCampaignCriteriaResponse\x12P\n\x07results\x18\x02 \x03(\x0b\x32?.google.ads.googleads.v0.services.MutateCampaignCriterionResult\"6\n\x1dMutateCampaignCriterionResult\x12\x15\n\rresource_name\x18\x01 \x01(\t2\xc4\x03\n\x18\x43\x61mpaignCriterionService\x12\xc7\x01\n\x14GetCampaignCriterion\x12=.google.ads.googleads.v0.services.GetCampaignCriterionRequest\x1a\x34.google.ads.googleads.v0.resources.CampaignCriterion\":\x82\xd3\xe4\x93\x02\x34\x12\x32/v0/{resource_name=customers/*/campaignCriteria/*}\x12\xdd\x01\n\x16MutateCampaignCriteria\x12?.google.ads.googleads.v0.services.MutateCampaignCriteriaRequest\x1a@.google.ads.googleads.v0.services.MutateCampaignCriteriaResponse\"@\x82\xd3\xe4\x93\x02:\"5/v0/customers/{customer_id=*}/campaignCriteria:mutate:\x01*B\xdd\x01\n$com.google.ads.googleads.v0.servicesB\x1d\x43\x61mpaignCriterionServiceProtoP\x01ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\xa2\x02\x03GAA\xaa\x02 Google.Ads.GoogleAds.V0.Services\xca\x02 Google\\Ads\\GoogleAds\\V0\\Servicesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__criterion__pb2.DESCRIPTOR,google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_protobuf_dot_field__mask__pb2.DESCRIPTOR,])
+
+
+
+
+_GETCAMPAIGNCRITERIONREQUEST = _descriptor.Descriptor(
+ name='GetCampaignCriterionRequest',
+ full_name='google.ads.googleads.v0.services.GetCampaignCriterionRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.GetCampaignCriterionRequest.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=239,
+ serialized_end=291,
+)
+
+
+_MUTATECAMPAIGNCRITERIAREQUEST = _descriptor.Descriptor(
+ name='MutateCampaignCriteriaRequest',
+ full_name='google.ads.googleads.v0.services.MutateCampaignCriteriaRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='customer_id', full_name='google.ads.googleads.v0.services.MutateCampaignCriteriaRequest.customer_id', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='operations', full_name='google.ads.googleads.v0.services.MutateCampaignCriteriaRequest.operations', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=294,
+ serialized_end=428,
+)
+
+
+_CAMPAIGNCRITERIONOPERATION = _descriptor.Descriptor(
+ name='CampaignCriterionOperation',
+ full_name='google.ads.googleads.v0.services.CampaignCriterionOperation',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='update_mask', full_name='google.ads.googleads.v0.services.CampaignCriterionOperation.update_mask', index=0,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='create', full_name='google.ads.googleads.v0.services.CampaignCriterionOperation.create', index=1,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='update', full_name='google.ads.googleads.v0.services.CampaignCriterionOperation.update', index=2,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='remove', full_name='google.ads.googleads.v0.services.CampaignCriterionOperation.remove', index=3,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='operation', full_name='google.ads.googleads.v0.services.CampaignCriterionOperation.operation',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=431,
+ serialized_end=683,
+)
+
+
+_MUTATECAMPAIGNCRITERIARESPONSE = _descriptor.Descriptor(
+ name='MutateCampaignCriteriaResponse',
+ full_name='google.ads.googleads.v0.services.MutateCampaignCriteriaResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='results', full_name='google.ads.googleads.v0.services.MutateCampaignCriteriaResponse.results', index=0,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=685,
+ serialized_end=799,
+)
+
+
+_MUTATECAMPAIGNCRITERIONRESULT = _descriptor.Descriptor(
+ name='MutateCampaignCriterionResult',
+ full_name='google.ads.googleads.v0.services.MutateCampaignCriterionResult',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.MutateCampaignCriterionResult.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=801,
+ serialized_end=855,
+)
+
+_MUTATECAMPAIGNCRITERIAREQUEST.fields_by_name['operations'].message_type = _CAMPAIGNCRITERIONOPERATION
+_CAMPAIGNCRITERIONOPERATION.fields_by_name['update_mask'].message_type = google_dot_protobuf_dot_field__mask__pb2._FIELDMASK
+_CAMPAIGNCRITERIONOPERATION.fields_by_name['create'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__criterion__pb2._CAMPAIGNCRITERION
+_CAMPAIGNCRITERIONOPERATION.fields_by_name['update'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__criterion__pb2._CAMPAIGNCRITERION
+_CAMPAIGNCRITERIONOPERATION.oneofs_by_name['operation'].fields.append(
+ _CAMPAIGNCRITERIONOPERATION.fields_by_name['create'])
+_CAMPAIGNCRITERIONOPERATION.fields_by_name['create'].containing_oneof = _CAMPAIGNCRITERIONOPERATION.oneofs_by_name['operation']
+_CAMPAIGNCRITERIONOPERATION.oneofs_by_name['operation'].fields.append(
+ _CAMPAIGNCRITERIONOPERATION.fields_by_name['update'])
+_CAMPAIGNCRITERIONOPERATION.fields_by_name['update'].containing_oneof = _CAMPAIGNCRITERIONOPERATION.oneofs_by_name['operation']
+_CAMPAIGNCRITERIONOPERATION.oneofs_by_name['operation'].fields.append(
+ _CAMPAIGNCRITERIONOPERATION.fields_by_name['remove'])
+_CAMPAIGNCRITERIONOPERATION.fields_by_name['remove'].containing_oneof = _CAMPAIGNCRITERIONOPERATION.oneofs_by_name['operation']
+_MUTATECAMPAIGNCRITERIARESPONSE.fields_by_name['results'].message_type = _MUTATECAMPAIGNCRITERIONRESULT
+DESCRIPTOR.message_types_by_name['GetCampaignCriterionRequest'] = _GETCAMPAIGNCRITERIONREQUEST
+DESCRIPTOR.message_types_by_name['MutateCampaignCriteriaRequest'] = _MUTATECAMPAIGNCRITERIAREQUEST
+DESCRIPTOR.message_types_by_name['CampaignCriterionOperation'] = _CAMPAIGNCRITERIONOPERATION
+DESCRIPTOR.message_types_by_name['MutateCampaignCriteriaResponse'] = _MUTATECAMPAIGNCRITERIARESPONSE
+DESCRIPTOR.message_types_by_name['MutateCampaignCriterionResult'] = _MUTATECAMPAIGNCRITERIONRESULT
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+GetCampaignCriterionRequest = _reflection.GeneratedProtocolMessageType('GetCampaignCriterionRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETCAMPAIGNCRITERIONREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.campaign_criterion_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [CampaignCriterionService.GetCampaignCriterion][google.ads.googleads.v0.services.CampaignCriterionService.GetCampaignCriterion].
+
+
+ Attributes:
+ resource_name:
+ The resource name of the criterion to fetch.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.GetCampaignCriterionRequest)
+ ))
+_sym_db.RegisterMessage(GetCampaignCriterionRequest)
+
+MutateCampaignCriteriaRequest = _reflection.GeneratedProtocolMessageType('MutateCampaignCriteriaRequest', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATECAMPAIGNCRITERIAREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.campaign_criterion_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [CampaignCriterionService.MutateCampaignCriteria][google.ads.googleads.v0.services.CampaignCriterionService.MutateCampaignCriteria].
+
+
+ Attributes:
+ customer_id:
+ The ID of the customer whose criteria are being modified.
+ operations:
+ The list of operations to perform on individual criteria.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateCampaignCriteriaRequest)
+ ))
+_sym_db.RegisterMessage(MutateCampaignCriteriaRequest)
+
+CampaignCriterionOperation = _reflection.GeneratedProtocolMessageType('CampaignCriterionOperation', (_message.Message,), dict(
+ DESCRIPTOR = _CAMPAIGNCRITERIONOPERATION,
+ __module__ = 'google.ads.googleads_v0.proto.services.campaign_criterion_service_pb2'
+ ,
+ __doc__ = """A single operation (create, update, remove) on a campaign criterion.
+
+
+ Attributes:
+ update_mask:
+ FieldMask that determines which resource fields are modified
+ in an update.
+ operation:
+ The mutate operation.
+ create:
+ Create operation: No resource name is expected for the new
+ criterion.
+ update:
+ Update operation: The criterion is expected to have a valid
+ resource name.
+ remove:
+ Remove operation: A resource name for the removed criterion is
+ expected, in this format: ``customers/{customer_id}/campaignC
+ riteria/{campaign_id}_{criterion_id}``
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.CampaignCriterionOperation)
+ ))
+_sym_db.RegisterMessage(CampaignCriterionOperation)
+
+MutateCampaignCriteriaResponse = _reflection.GeneratedProtocolMessageType('MutateCampaignCriteriaResponse', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATECAMPAIGNCRITERIARESPONSE,
+ __module__ = 'google.ads.googleads_v0.proto.services.campaign_criterion_service_pb2'
+ ,
+ __doc__ = """Response message for campaign criterion mutate.
+
+
+ Attributes:
+ results:
+ All results for the mutate.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateCampaignCriteriaResponse)
+ ))
+_sym_db.RegisterMessage(MutateCampaignCriteriaResponse)
+
+MutateCampaignCriterionResult = _reflection.GeneratedProtocolMessageType('MutateCampaignCriterionResult', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATECAMPAIGNCRITERIONRESULT,
+ __module__ = 'google.ads.googleads_v0.proto.services.campaign_criterion_service_pb2'
+ ,
+ __doc__ = """The result for the criterion mutate.
+
+
+ Attributes:
+ resource_name:
+ Returned for successful operations.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateCampaignCriterionResult)
+ ))
+_sym_db.RegisterMessage(MutateCampaignCriterionResult)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$com.google.ads.googleads.v0.servicesB\035CampaignCriterionServiceProtoP\001ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\242\002\003GAA\252\002 Google.Ads.GoogleAds.V0.Services\312\002 Google\\Ads\\GoogleAds\\V0\\Services'))
+
+_CAMPAIGNCRITERIONSERVICE = _descriptor.ServiceDescriptor(
+ name='CampaignCriterionService',
+ full_name='google.ads.googleads.v0.services.CampaignCriterionService',
+ file=DESCRIPTOR,
+ index=0,
+ options=None,
+ serialized_start=858,
+ serialized_end=1310,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='GetCampaignCriterion',
+ full_name='google.ads.googleads.v0.services.CampaignCriterionService.GetCampaignCriterion',
+ index=0,
+ containing_service=None,
+ input_type=_GETCAMPAIGNCRITERIONREQUEST,
+ output_type=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__criterion__pb2._CAMPAIGNCRITERION,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0024\0222/v0/{resource_name=customers/*/campaignCriteria/*}')),
+ ),
+ _descriptor.MethodDescriptor(
+ name='MutateCampaignCriteria',
+ full_name='google.ads.googleads.v0.services.CampaignCriterionService.MutateCampaignCriteria',
+ index=1,
+ containing_service=None,
+ input_type=_MUTATECAMPAIGNCRITERIAREQUEST,
+ output_type=_MUTATECAMPAIGNCRITERIARESPONSE,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002:\"5/v0/customers/{customer_id=*}/campaignCriteria:mutate:\001*')),
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_CAMPAIGNCRITERIONSERVICE)
+
+DESCRIPTOR.services_by_name['CampaignCriterionService'] = _CAMPAIGNCRITERIONSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/services/campaign_criterion_service_pb2_grpc.py b/google/ads/google_ads/v0/proto/services/campaign_criterion_service_pb2_grpc.py
new file mode 100644
index 000000000..76c86445b
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/campaign_criterion_service_pb2_grpc.py
@@ -0,0 +1,64 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
+from google.ads.google_ads.v0.proto.resources import campaign_criterion_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__criterion__pb2
+from google.ads.google_ads.v0.proto.services import campaign_criterion_service_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__criterion__service__pb2
+
+
+class CampaignCriterionServiceStub(object):
+ """Service to manage campaign criteria.
+ """
+
+ def __init__(self, channel):
+ """Constructor.
+
+ Args:
+ channel: A grpc.Channel.
+ """
+ self.GetCampaignCriterion = channel.unary_unary(
+ '/google.ads.googleads.v0.services.CampaignCriterionService/GetCampaignCriterion',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__criterion__service__pb2.GetCampaignCriterionRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__criterion__pb2.CampaignCriterion.FromString,
+ )
+ self.MutateCampaignCriteria = channel.unary_unary(
+ '/google.ads.googleads.v0.services.CampaignCriterionService/MutateCampaignCriteria',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__criterion__service__pb2.MutateCampaignCriteriaRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__criterion__service__pb2.MutateCampaignCriteriaResponse.FromString,
+ )
+
+
+class CampaignCriterionServiceServicer(object):
+ """Service to manage campaign criteria.
+ """
+
+ def GetCampaignCriterion(self, request, context):
+ """Returns the requested criterion in full detail.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+ def MutateCampaignCriteria(self, request, context):
+ """Creates, updates, or removes criteria. Operation statuses are returned.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+
+def add_CampaignCriterionServiceServicer_to_server(servicer, server):
+ rpc_method_handlers = {
+ 'GetCampaignCriterion': grpc.unary_unary_rpc_method_handler(
+ servicer.GetCampaignCriterion,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__criterion__service__pb2.GetCampaignCriterionRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__criterion__pb2.CampaignCriterion.SerializeToString,
+ ),
+ 'MutateCampaignCriteria': grpc.unary_unary_rpc_method_handler(
+ servicer.MutateCampaignCriteria,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__criterion__service__pb2.MutateCampaignCriteriaRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__criterion__service__pb2.MutateCampaignCriteriaResponse.SerializeToString,
+ ),
+ }
+ generic_handler = grpc.method_handlers_generic_handler(
+ 'google.ads.googleads.v0.services.CampaignCriterionService', rpc_method_handlers)
+ server.add_generic_rpc_handlers((generic_handler,))
diff --git a/google/ads/google_ads/v0/proto/services/campaign_service_pb2.py b/google/ads/google_ads/v0/proto/services/campaign_service_pb2.py
new file mode 100644
index 000000000..4f1013572
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/campaign_service_pb2.py
@@ -0,0 +1,366 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/services/campaign_service.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.resources import campaign_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__pb2
+from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
+from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/services/campaign_service.proto',
+ package='google.ads.googleads.v0.services',
+ syntax='proto3',
+ serialized_pb=_b('\n=google/ads/googleads_v0/proto/services/campaign_service.proto\x12 google.ads.googleads.v0.services\x1a\x36google/ads/googleads_v0/proto/resources/campaign.proto\x1a\x1cgoogle/api/annotations.proto\x1a google/protobuf/field_mask.proto\"+\n\x12GetCampaignRequest\x12\x15\n\rresource_name\x18\x01 \x01(\t\"v\n\x16MutateCampaignsRequest\x12\x13\n\x0b\x63ustomer_id\x18\x01 \x01(\t\x12G\n\noperations\x18\x02 \x03(\x0b\x32\x33.google.ads.googleads.v0.services.CampaignOperation\"\xe1\x01\n\x11\x43\x61mpaignOperation\x12/\n\x0bupdate_mask\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.FieldMask\x12=\n\x06\x63reate\x18\x01 \x01(\x0b\x32+.google.ads.googleads.v0.resources.CampaignH\x00\x12=\n\x06update\x18\x02 \x01(\x0b\x32+.google.ads.googleads.v0.resources.CampaignH\x00\x12\x10\n\x06remove\x18\x03 \x01(\tH\x00\x42\x0b\n\toperation\"b\n\x17MutateCampaignsResponse\x12G\n\x07results\x18\x02 \x03(\x0b\x32\x36.google.ads.googleads.v0.services.MutateCampaignResult\"-\n\x14MutateCampaignResult\x12\x15\n\rresource_name\x18\x01 \x01(\t2\xfd\x02\n\x0f\x43\x61mpaignService\x12\xa5\x01\n\x0bGetCampaign\x12\x34.google.ads.googleads.v0.services.GetCampaignRequest\x1a+.google.ads.googleads.v0.resources.Campaign\"3\x82\xd3\xe4\x93\x02-\x12+/v0/{resource_name=customers/*/campaigns/*}\x12\xc1\x01\n\x0fMutateCampaigns\x12\x38.google.ads.googleads.v0.services.MutateCampaignsRequest\x1a\x39.google.ads.googleads.v0.services.MutateCampaignsResponse\"9\x82\xd3\xe4\x93\x02\x33\"./v0/customers/{customer_id=*}/campaigns:mutate:\x01*B\xd4\x01\n$com.google.ads.googleads.v0.servicesB\x14\x43\x61mpaignServiceProtoP\x01ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\xa2\x02\x03GAA\xaa\x02 Google.Ads.GoogleAds.V0.Services\xca\x02 Google\\Ads\\GoogleAds\\V0\\Servicesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__pb2.DESCRIPTOR,google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_protobuf_dot_field__mask__pb2.DESCRIPTOR,])
+
+
+
+
+_GETCAMPAIGNREQUEST = _descriptor.Descriptor(
+ name='GetCampaignRequest',
+ full_name='google.ads.googleads.v0.services.GetCampaignRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.GetCampaignRequest.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=219,
+ serialized_end=262,
+)
+
+
+_MUTATECAMPAIGNSREQUEST = _descriptor.Descriptor(
+ name='MutateCampaignsRequest',
+ full_name='google.ads.googleads.v0.services.MutateCampaignsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='customer_id', full_name='google.ads.googleads.v0.services.MutateCampaignsRequest.customer_id', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='operations', full_name='google.ads.googleads.v0.services.MutateCampaignsRequest.operations', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=264,
+ serialized_end=382,
+)
+
+
+_CAMPAIGNOPERATION = _descriptor.Descriptor(
+ name='CampaignOperation',
+ full_name='google.ads.googleads.v0.services.CampaignOperation',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='update_mask', full_name='google.ads.googleads.v0.services.CampaignOperation.update_mask', index=0,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='create', full_name='google.ads.googleads.v0.services.CampaignOperation.create', index=1,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='update', full_name='google.ads.googleads.v0.services.CampaignOperation.update', index=2,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='remove', full_name='google.ads.googleads.v0.services.CampaignOperation.remove', index=3,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='operation', full_name='google.ads.googleads.v0.services.CampaignOperation.operation',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=385,
+ serialized_end=610,
+)
+
+
+_MUTATECAMPAIGNSRESPONSE = _descriptor.Descriptor(
+ name='MutateCampaignsResponse',
+ full_name='google.ads.googleads.v0.services.MutateCampaignsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='results', full_name='google.ads.googleads.v0.services.MutateCampaignsResponse.results', index=0,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=612,
+ serialized_end=710,
+)
+
+
+_MUTATECAMPAIGNRESULT = _descriptor.Descriptor(
+ name='MutateCampaignResult',
+ full_name='google.ads.googleads.v0.services.MutateCampaignResult',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.MutateCampaignResult.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=712,
+ serialized_end=757,
+)
+
+_MUTATECAMPAIGNSREQUEST.fields_by_name['operations'].message_type = _CAMPAIGNOPERATION
+_CAMPAIGNOPERATION.fields_by_name['update_mask'].message_type = google_dot_protobuf_dot_field__mask__pb2._FIELDMASK
+_CAMPAIGNOPERATION.fields_by_name['create'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__pb2._CAMPAIGN
+_CAMPAIGNOPERATION.fields_by_name['update'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__pb2._CAMPAIGN
+_CAMPAIGNOPERATION.oneofs_by_name['operation'].fields.append(
+ _CAMPAIGNOPERATION.fields_by_name['create'])
+_CAMPAIGNOPERATION.fields_by_name['create'].containing_oneof = _CAMPAIGNOPERATION.oneofs_by_name['operation']
+_CAMPAIGNOPERATION.oneofs_by_name['operation'].fields.append(
+ _CAMPAIGNOPERATION.fields_by_name['update'])
+_CAMPAIGNOPERATION.fields_by_name['update'].containing_oneof = _CAMPAIGNOPERATION.oneofs_by_name['operation']
+_CAMPAIGNOPERATION.oneofs_by_name['operation'].fields.append(
+ _CAMPAIGNOPERATION.fields_by_name['remove'])
+_CAMPAIGNOPERATION.fields_by_name['remove'].containing_oneof = _CAMPAIGNOPERATION.oneofs_by_name['operation']
+_MUTATECAMPAIGNSRESPONSE.fields_by_name['results'].message_type = _MUTATECAMPAIGNRESULT
+DESCRIPTOR.message_types_by_name['GetCampaignRequest'] = _GETCAMPAIGNREQUEST
+DESCRIPTOR.message_types_by_name['MutateCampaignsRequest'] = _MUTATECAMPAIGNSREQUEST
+DESCRIPTOR.message_types_by_name['CampaignOperation'] = _CAMPAIGNOPERATION
+DESCRIPTOR.message_types_by_name['MutateCampaignsResponse'] = _MUTATECAMPAIGNSRESPONSE
+DESCRIPTOR.message_types_by_name['MutateCampaignResult'] = _MUTATECAMPAIGNRESULT
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+GetCampaignRequest = _reflection.GeneratedProtocolMessageType('GetCampaignRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETCAMPAIGNREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.campaign_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [CampaignService.GetCampaign][google.ads.googleads.v0.services.CampaignService.GetCampaign].
+
+
+ Attributes:
+ resource_name:
+ The resource name of the campaign to fetch.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.GetCampaignRequest)
+ ))
+_sym_db.RegisterMessage(GetCampaignRequest)
+
+MutateCampaignsRequest = _reflection.GeneratedProtocolMessageType('MutateCampaignsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATECAMPAIGNSREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.campaign_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [CampaignService.MutateCampaigns][google.ads.googleads.v0.services.CampaignService.MutateCampaigns].
+
+
+ Attributes:
+ customer_id:
+ The ID of the customer whose campaigns are being modified.
+ operations:
+ The list of operations to perform on individual campaigns.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateCampaignsRequest)
+ ))
+_sym_db.RegisterMessage(MutateCampaignsRequest)
+
+CampaignOperation = _reflection.GeneratedProtocolMessageType('CampaignOperation', (_message.Message,), dict(
+ DESCRIPTOR = _CAMPAIGNOPERATION,
+ __module__ = 'google.ads.googleads_v0.proto.services.campaign_service_pb2'
+ ,
+ __doc__ = """A single operation (create, update, remove) on a campaign.
+
+
+ Attributes:
+ update_mask:
+ FieldMask that determines which resource fields are modified
+ in an update.
+ operation:
+ The mutate operation.
+ create:
+ Create operation: No resource name is expected for the new
+ campaign.
+ update:
+ Update operation: The campaign is expected to have a valid
+ resource name.
+ remove:
+ Remove operation: A resource name for the removed campaign is
+ expected, in this format:
+ ``customers/{customer_id}/campaigns/{campaign_id}``
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.CampaignOperation)
+ ))
+_sym_db.RegisterMessage(CampaignOperation)
+
+MutateCampaignsResponse = _reflection.GeneratedProtocolMessageType('MutateCampaignsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATECAMPAIGNSRESPONSE,
+ __module__ = 'google.ads.googleads_v0.proto.services.campaign_service_pb2'
+ ,
+ __doc__ = """Response message for campaign mutate.
+
+
+ Attributes:
+ results:
+ All results for the mutate.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateCampaignsResponse)
+ ))
+_sym_db.RegisterMessage(MutateCampaignsResponse)
+
+MutateCampaignResult = _reflection.GeneratedProtocolMessageType('MutateCampaignResult', (_message.Message,), dict(
+ DESCRIPTOR = _MUTATECAMPAIGNRESULT,
+ __module__ = 'google.ads.googleads_v0.proto.services.campaign_service_pb2'
+ ,
+ __doc__ = """The result for the campaign mutate.
+
+
+ Attributes:
+ resource_name:
+ Returned for successful operations.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.MutateCampaignResult)
+ ))
+_sym_db.RegisterMessage(MutateCampaignResult)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$com.google.ads.googleads.v0.servicesB\024CampaignServiceProtoP\001ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\242\002\003GAA\252\002 Google.Ads.GoogleAds.V0.Services\312\002 Google\\Ads\\GoogleAds\\V0\\Services'))
+
+_CAMPAIGNSERVICE = _descriptor.ServiceDescriptor(
+ name='CampaignService',
+ full_name='google.ads.googleads.v0.services.CampaignService',
+ file=DESCRIPTOR,
+ index=0,
+ options=None,
+ serialized_start=760,
+ serialized_end=1141,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='GetCampaign',
+ full_name='google.ads.googleads.v0.services.CampaignService.GetCampaign',
+ index=0,
+ containing_service=None,
+ input_type=_GETCAMPAIGNREQUEST,
+ output_type=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__pb2._CAMPAIGN,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002-\022+/v0/{resource_name=customers/*/campaigns/*}')),
+ ),
+ _descriptor.MethodDescriptor(
+ name='MutateCampaigns',
+ full_name='google.ads.googleads.v0.services.CampaignService.MutateCampaigns',
+ index=1,
+ containing_service=None,
+ input_type=_MUTATECAMPAIGNSREQUEST,
+ output_type=_MUTATECAMPAIGNSRESPONSE,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0023\"./v0/customers/{customer_id=*}/campaigns:mutate:\001*')),
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_CAMPAIGNSERVICE)
+
+DESCRIPTOR.services_by_name['CampaignService'] = _CAMPAIGNSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/services/campaign_service_pb2_grpc.py b/google/ads/google_ads/v0/proto/services/campaign_service_pb2_grpc.py
new file mode 100644
index 000000000..555cc1981
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/campaign_service_pb2_grpc.py
@@ -0,0 +1,64 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
+from google.ads.google_ads.v0.proto.resources import campaign_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__pb2
+from google.ads.google_ads.v0.proto.services import campaign_service_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__service__pb2
+
+
+class CampaignServiceStub(object):
+ """Service to manage campaigns.
+ """
+
+ def __init__(self, channel):
+ """Constructor.
+
+ Args:
+ channel: A grpc.Channel.
+ """
+ self.GetCampaign = channel.unary_unary(
+ '/google.ads.googleads.v0.services.CampaignService/GetCampaign',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__service__pb2.GetCampaignRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__pb2.Campaign.FromString,
+ )
+ self.MutateCampaigns = channel.unary_unary(
+ '/google.ads.googleads.v0.services.CampaignService/MutateCampaigns',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__service__pb2.MutateCampaignsRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__service__pb2.MutateCampaignsResponse.FromString,
+ )
+
+
+class CampaignServiceServicer(object):
+ """Service to manage campaigns.
+ """
+
+ def GetCampaign(self, request, context):
+ """Returns the requested campaign in full detail.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+ def MutateCampaigns(self, request, context):
+ """Creates, updates, or removes campaigns. Operation statuses are returned.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+
+def add_CampaignServiceServicer_to_server(servicer, server):
+ rpc_method_handlers = {
+ 'GetCampaign': grpc.unary_unary_rpc_method_handler(
+ servicer.GetCampaign,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__service__pb2.GetCampaignRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__pb2.Campaign.SerializeToString,
+ ),
+ 'MutateCampaigns': grpc.unary_unary_rpc_method_handler(
+ servicer.MutateCampaigns,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__service__pb2.MutateCampaignsRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_campaign__service__pb2.MutateCampaignsResponse.SerializeToString,
+ ),
+ }
+ generic_handler = grpc.method_handlers_generic_handler(
+ 'google.ads.googleads.v0.services.CampaignService', rpc_method_handlers)
+ server.add_generic_rpc_handlers((generic_handler,))
diff --git a/google/ads/google_ads/v0/proto/services/customer_service_pb2.py b/google/ads/google_ads/v0/proto/services/customer_service_pb2.py
new file mode 100644
index 000000000..9e9ce18ee
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/customer_service_pb2.py
@@ -0,0 +1,107 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/services/customer_service.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.resources import customer_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_customer__pb2
+from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/services/customer_service.proto',
+ package='google.ads.googleads.v0.services',
+ syntax='proto3',
+ serialized_pb=_b('\n=google/ads/googleads_v0/proto/services/customer_service.proto\x12 google.ads.googleads.v0.services\x1a\x36google/ads/googleads_v0/proto/resources/customer.proto\x1a\x1cgoogle/api/annotations.proto\"+\n\x12GetCustomerRequest\x12\x15\n\rresource_name\x18\x01 \x01(\t2\xad\x01\n\x0f\x43ustomerService\x12\x99\x01\n\x0bGetCustomer\x12\x34.google.ads.googleads.v0.services.GetCustomerRequest\x1a+.google.ads.googleads.v0.resources.Customer\"\'\x82\xd3\xe4\x93\x02!\x12\x1f/v0/{resource_name=customers/*}B\xd4\x01\n$com.google.ads.googleads.v0.servicesB\x14\x43ustomerServiceProtoP\x01ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\xa2\x02\x03GAA\xaa\x02 Google.Ads.GoogleAds.V0.Services\xca\x02 Google\\Ads\\GoogleAds\\V0\\Servicesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_customer__pb2.DESCRIPTOR,google_dot_api_dot_annotations__pb2.DESCRIPTOR,])
+
+
+
+
+_GETCUSTOMERREQUEST = _descriptor.Descriptor(
+ name='GetCustomerRequest',
+ full_name='google.ads.googleads.v0.services.GetCustomerRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.GetCustomerRequest.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=185,
+ serialized_end=228,
+)
+
+DESCRIPTOR.message_types_by_name['GetCustomerRequest'] = _GETCUSTOMERREQUEST
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+GetCustomerRequest = _reflection.GeneratedProtocolMessageType('GetCustomerRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETCUSTOMERREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.customer_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [CustomerService.GetCustomer][google.ads.googleads.v0.services.CustomerService.GetCustomer].
+
+
+ Attributes:
+ resource_name:
+ The resource name of the customer to fetch.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.GetCustomerRequest)
+ ))
+_sym_db.RegisterMessage(GetCustomerRequest)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$com.google.ads.googleads.v0.servicesB\024CustomerServiceProtoP\001ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\242\002\003GAA\252\002 Google.Ads.GoogleAds.V0.Services\312\002 Google\\Ads\\GoogleAds\\V0\\Services'))
+
+_CUSTOMERSERVICE = _descriptor.ServiceDescriptor(
+ name='CustomerService',
+ full_name='google.ads.googleads.v0.services.CustomerService',
+ file=DESCRIPTOR,
+ index=0,
+ options=None,
+ serialized_start=231,
+ serialized_end=404,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='GetCustomer',
+ full_name='google.ads.googleads.v0.services.CustomerService.GetCustomer',
+ index=0,
+ containing_service=None,
+ input_type=_GETCUSTOMERREQUEST,
+ output_type=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_customer__pb2._CUSTOMER,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002!\022\037/v0/{resource_name=customers/*}')),
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_CUSTOMERSERVICE)
+
+DESCRIPTOR.services_by_name['CustomerService'] = _CUSTOMERSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/services/customer_service_pb2_grpc.py b/google/ads/google_ads/v0/proto/services/customer_service_pb2_grpc.py
new file mode 100644
index 000000000..27541b315
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/customer_service_pb2_grpc.py
@@ -0,0 +1,47 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
+from google.ads.google_ads.v0.proto.resources import customer_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_customer__pb2
+from google.ads.google_ads.v0.proto.services import customer_service_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_customer__service__pb2
+
+
+class CustomerServiceStub(object):
+ """Service to manage customers.
+ """
+
+ def __init__(self, channel):
+ """Constructor.
+
+ Args:
+ channel: A grpc.Channel.
+ """
+ self.GetCustomer = channel.unary_unary(
+ '/google.ads.googleads.v0.services.CustomerService/GetCustomer',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_customer__service__pb2.GetCustomerRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_customer__pb2.Customer.FromString,
+ )
+
+
+class CustomerServiceServicer(object):
+ """Service to manage customers.
+ """
+
+ def GetCustomer(self, request, context):
+ """Returns the requested customer in full detail.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+
+def add_CustomerServiceServicer_to_server(servicer, server):
+ rpc_method_handlers = {
+ 'GetCustomer': grpc.unary_unary_rpc_method_handler(
+ servicer.GetCustomer,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_customer__service__pb2.GetCustomerRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_customer__pb2.Customer.SerializeToString,
+ ),
+ }
+ generic_handler = grpc.method_handlers_generic_handler(
+ 'google.ads.googleads.v0.services.CustomerService', rpc_method_handlers)
+ server.add_generic_rpc_handlers((generic_handler,))
diff --git a/google/ads/google_ads/v0/proto/services/geo_target_constant_service_pb2.py b/google/ads/google_ads/v0/proto/services/geo_target_constant_service_pb2.py
new file mode 100644
index 000000000..00ba0ea5d
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/geo_target_constant_service_pb2.py
@@ -0,0 +1,107 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/services/geo_target_constant_service.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.resources import geo_target_constant_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_geo__target__constant__pb2
+from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/services/geo_target_constant_service.proto',
+ package='google.ads.googleads.v0.services',
+ syntax='proto3',
+ serialized_pb=_b('\nHgoogle/ads/googleads_v0/proto/services/geo_target_constant_service.proto\x12 google.ads.googleads.v0.services\x1a\x41google/ads/googleads_v0/proto/resources/geo_target_constant.proto\x1a\x1cgoogle/api/annotations.proto\"4\n\x1bGetGeoTargetConstantRequest\x12\x15\n\rresource_name\x18\x01 \x01(\t2\xda\x01\n\x18GeoTargetConstantService\x12\xbd\x01\n\x14GetGeoTargetConstant\x12=.google.ads.googleads.v0.services.GetGeoTargetConstantRequest\x1a\x34.google.ads.googleads.v0.resources.GeoTargetConstant\"0\x82\xd3\xe4\x93\x02*\x12(/v0/{resource_name=geoTargetConstants/*}B\xdd\x01\n$com.google.ads.googleads.v0.servicesB\x1dGeoTargetConstantServiceProtoP\x01ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\xa2\x02\x03GAA\xaa\x02 Google.Ads.GoogleAds.V0.Services\xca\x02 Google\\Ads\\GoogleAds\\V0\\Servicesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_geo__target__constant__pb2.DESCRIPTOR,google_dot_api_dot_annotations__pb2.DESCRIPTOR,])
+
+
+
+
+_GETGEOTARGETCONSTANTREQUEST = _descriptor.Descriptor(
+ name='GetGeoTargetConstantRequest',
+ full_name='google.ads.googleads.v0.services.GetGeoTargetConstantRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.GetGeoTargetConstantRequest.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=207,
+ serialized_end=259,
+)
+
+DESCRIPTOR.message_types_by_name['GetGeoTargetConstantRequest'] = _GETGEOTARGETCONSTANTREQUEST
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+GetGeoTargetConstantRequest = _reflection.GeneratedProtocolMessageType('GetGeoTargetConstantRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETGEOTARGETCONSTANTREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.geo_target_constant_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [GeoTargetConstantService.GetGeoTargetConstant][google.ads.googleads.v0.services.GeoTargetConstantService.GetGeoTargetConstant].
+
+
+ Attributes:
+ resource_name:
+ The resource name of the geo target constant to fetch.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.GetGeoTargetConstantRequest)
+ ))
+_sym_db.RegisterMessage(GetGeoTargetConstantRequest)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$com.google.ads.googleads.v0.servicesB\035GeoTargetConstantServiceProtoP\001ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\242\002\003GAA\252\002 Google.Ads.GoogleAds.V0.Services\312\002 Google\\Ads\\GoogleAds\\V0\\Services'))
+
+_GEOTARGETCONSTANTSERVICE = _descriptor.ServiceDescriptor(
+ name='GeoTargetConstantService',
+ full_name='google.ads.googleads.v0.services.GeoTargetConstantService',
+ file=DESCRIPTOR,
+ index=0,
+ options=None,
+ serialized_start=262,
+ serialized_end=480,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='GetGeoTargetConstant',
+ full_name='google.ads.googleads.v0.services.GeoTargetConstantService.GetGeoTargetConstant',
+ index=0,
+ containing_service=None,
+ input_type=_GETGEOTARGETCONSTANTREQUEST,
+ output_type=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_geo__target__constant__pb2._GEOTARGETCONSTANT,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002*\022(/v0/{resource_name=geoTargetConstants/*}')),
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_GEOTARGETCONSTANTSERVICE)
+
+DESCRIPTOR.services_by_name['GeoTargetConstantService'] = _GEOTARGETCONSTANTSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/services/geo_target_constant_service_pb2_grpc.py b/google/ads/google_ads/v0/proto/services/geo_target_constant_service_pb2_grpc.py
new file mode 100644
index 000000000..1677c73ed
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/geo_target_constant_service_pb2_grpc.py
@@ -0,0 +1,47 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
+from google.ads.google_ads.v0.proto.resources import geo_target_constant_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_geo__target__constant__pb2
+from google.ads.google_ads.v0.proto.services import geo_target_constant_service_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_geo__target__constant__service__pb2
+
+
+class GeoTargetConstantServiceStub(object):
+ """Service to fetch geo target constants.
+ """
+
+ def __init__(self, channel):
+ """Constructor.
+
+ Args:
+ channel: A grpc.Channel.
+ """
+ self.GetGeoTargetConstant = channel.unary_unary(
+ '/google.ads.googleads.v0.services.GeoTargetConstantService/GetGeoTargetConstant',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_geo__target__constant__service__pb2.GetGeoTargetConstantRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_geo__target__constant__pb2.GeoTargetConstant.FromString,
+ )
+
+
+class GeoTargetConstantServiceServicer(object):
+ """Service to fetch geo target constants.
+ """
+
+ def GetGeoTargetConstant(self, request, context):
+ """Returns the requested geo target constant in full detail.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+
+def add_GeoTargetConstantServiceServicer_to_server(servicer, server):
+ rpc_method_handlers = {
+ 'GetGeoTargetConstant': grpc.unary_unary_rpc_method_handler(
+ servicer.GetGeoTargetConstant,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_geo__target__constant__service__pb2.GetGeoTargetConstantRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_geo__target__constant__pb2.GeoTargetConstant.SerializeToString,
+ ),
+ }
+ generic_handler = grpc.method_handlers_generic_handler(
+ 'google.ads.googleads.v0.services.GeoTargetConstantService', rpc_method_handlers)
+ server.add_generic_rpc_handlers((generic_handler,))
diff --git a/google/ads/google_ads/v0/proto/services/google_ads_field_service_pb2.py b/google/ads/google_ads/v0/proto/services/google_ads_field_service_pb2.py
new file mode 100644
index 000000000..6d5f4e9ca
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/google_ads_field_service_pb2.py
@@ -0,0 +1,258 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/services/google_ads_field_service.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.resources import google_ads_field_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_google__ads__field__pb2
+from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/services/google_ads_field_service.proto',
+ package='google.ads.googleads.v0.services',
+ syntax='proto3',
+ serialized_pb=_b('\nEgoogle/ads/googleads_v0/proto/services/google_ads_field_service.proto\x12 google.ads.googleads.v0.services\x1a>google/ads/googleads_v0/proto/resources/google_ads_field.proto\x1a\x1cgoogle/api/annotations.proto\"1\n\x18GetGoogleAdsFieldRequest\x12\x15\n\rresource_name\x18\x01 \x01(\t\"T\n\x1cSearchGoogleAdsFieldsRequest\x12\r\n\x05query\x18\x01 \x01(\t\x12\x12\n\npage_token\x18\x02 \x01(\t\x12\x11\n\tpage_size\x18\x03 \x01(\x05\"\x99\x01\n\x1dSearchGoogleAdsFieldsResponse\x12\x42\n\x07results\x18\x01 \x03(\x0b\x32\x31.google.ads.googleads.v0.resources.GoogleAdsField\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x1b\n\x13total_results_count\x18\x03 \x01(\x03\x32\x8d\x03\n\x15GoogleAdsFieldService\x12\xb1\x01\n\x11GetGoogleAdsField\x12:.google.ads.googleads.v0.services.GetGoogleAdsFieldRequest\x1a\x31.google.ads.googleads.v0.resources.GoogleAdsField\"-\x82\xd3\xe4\x93\x02\'\x12%/v0/{resource_name=googleAdsFields/*}\x12\xbf\x01\n\x15SearchGoogleAdsFields\x12>.google.ads.googleads.v0.services.SearchGoogleAdsFieldsRequest\x1a?.google.ads.googleads.v0.services.SearchGoogleAdsFieldsResponse\"%\x82\xd3\xe4\x93\x02\x1f\"\x1a/v0/googleAdsFields:search:\x01*B\xda\x01\n$com.google.ads.googleads.v0.servicesB\x1aGoogleAdsFieldServiceProtoP\x01ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\xa2\x02\x03GAA\xaa\x02 Google.Ads.GoogleAds.V0.Services\xca\x02 Google\\Ads\\GoogleAds\\V0\\Servicesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_google__ads__field__pb2.DESCRIPTOR,google_dot_api_dot_annotations__pb2.DESCRIPTOR,])
+
+
+
+
+_GETGOOGLEADSFIELDREQUEST = _descriptor.Descriptor(
+ name='GetGoogleAdsFieldRequest',
+ full_name='google.ads.googleads.v0.services.GetGoogleAdsFieldRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.GetGoogleAdsFieldRequest.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=201,
+ serialized_end=250,
+)
+
+
+_SEARCHGOOGLEADSFIELDSREQUEST = _descriptor.Descriptor(
+ name='SearchGoogleAdsFieldsRequest',
+ full_name='google.ads.googleads.v0.services.SearchGoogleAdsFieldsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='query', full_name='google.ads.googleads.v0.services.SearchGoogleAdsFieldsRequest.query', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='page_token', full_name='google.ads.googleads.v0.services.SearchGoogleAdsFieldsRequest.page_token', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='page_size', full_name='google.ads.googleads.v0.services.SearchGoogleAdsFieldsRequest.page_size', index=2,
+ number=3, type=5, cpp_type=1, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=252,
+ serialized_end=336,
+)
+
+
+_SEARCHGOOGLEADSFIELDSRESPONSE = _descriptor.Descriptor(
+ name='SearchGoogleAdsFieldsResponse',
+ full_name='google.ads.googleads.v0.services.SearchGoogleAdsFieldsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='results', full_name='google.ads.googleads.v0.services.SearchGoogleAdsFieldsResponse.results', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='next_page_token', full_name='google.ads.googleads.v0.services.SearchGoogleAdsFieldsResponse.next_page_token', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='total_results_count', full_name='google.ads.googleads.v0.services.SearchGoogleAdsFieldsResponse.total_results_count', index=2,
+ number=3, type=3, cpp_type=2, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=339,
+ serialized_end=492,
+)
+
+_SEARCHGOOGLEADSFIELDSRESPONSE.fields_by_name['results'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_google__ads__field__pb2._GOOGLEADSFIELD
+DESCRIPTOR.message_types_by_name['GetGoogleAdsFieldRequest'] = _GETGOOGLEADSFIELDREQUEST
+DESCRIPTOR.message_types_by_name['SearchGoogleAdsFieldsRequest'] = _SEARCHGOOGLEADSFIELDSREQUEST
+DESCRIPTOR.message_types_by_name['SearchGoogleAdsFieldsResponse'] = _SEARCHGOOGLEADSFIELDSRESPONSE
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+GetGoogleAdsFieldRequest = _reflection.GeneratedProtocolMessageType('GetGoogleAdsFieldRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETGOOGLEADSFIELDREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.google_ads_field_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [GoogleAdsFieldService.GetGoogleAdsField][google.ads.googleads.v0.services.GoogleAdsFieldService.GetGoogleAdsField].
+
+
+ Attributes:
+ resource_name:
+ The resource name of the field to get.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.GetGoogleAdsFieldRequest)
+ ))
+_sym_db.RegisterMessage(GetGoogleAdsFieldRequest)
+
+SearchGoogleAdsFieldsRequest = _reflection.GeneratedProtocolMessageType('SearchGoogleAdsFieldsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _SEARCHGOOGLEADSFIELDSREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.google_ads_field_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [GoogleAdsFieldService.SearchGoogleAdsFields][google.ads.googleads.v0.services.GoogleAdsFieldService.SearchGoogleAdsFields].
+
+
+ Attributes:
+ query:
+ The query string.
+ page_token:
+ Token of the page to retrieve. If not specified, the first
+ page of results will be returned. Use the value obtained from
+ ``next_page_token`` in the previous response in order to
+ request the next page of results.
+ page_size:
+ Number of elements to retrieve in a single page. When too
+ large a page is requested, the server may decide to further
+ limit the number of returned resources.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.SearchGoogleAdsFieldsRequest)
+ ))
+_sym_db.RegisterMessage(SearchGoogleAdsFieldsRequest)
+
+SearchGoogleAdsFieldsResponse = _reflection.GeneratedProtocolMessageType('SearchGoogleAdsFieldsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _SEARCHGOOGLEADSFIELDSRESPONSE,
+ __module__ = 'google.ads.googleads_v0.proto.services.google_ads_field_service_pb2'
+ ,
+ __doc__ = """Response message for
+ [GoogleAdsFieldService.SearchGoogleAdsFields][google.ads.googleads.v0.services.GoogleAdsFieldService.SearchGoogleAdsFields].
+
+
+ Attributes:
+ results:
+ The list of fields that matched the query.
+ next_page_token:
+ Pagination token used to retrieve the next page of results.
+ Pass the content of this string as the ``page_token``
+ attribute of the next request. ``next_page_token`` is not
+ returned for the last page.
+ total_results_count:
+ Total number of results that match the query ignoring the
+ LIMIT clause.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.SearchGoogleAdsFieldsResponse)
+ ))
+_sym_db.RegisterMessage(SearchGoogleAdsFieldsResponse)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$com.google.ads.googleads.v0.servicesB\032GoogleAdsFieldServiceProtoP\001ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\242\002\003GAA\252\002 Google.Ads.GoogleAds.V0.Services\312\002 Google\\Ads\\GoogleAds\\V0\\Services'))
+
+_GOOGLEADSFIELDSERVICE = _descriptor.ServiceDescriptor(
+ name='GoogleAdsFieldService',
+ full_name='google.ads.googleads.v0.services.GoogleAdsFieldService',
+ file=DESCRIPTOR,
+ index=0,
+ options=None,
+ serialized_start=495,
+ serialized_end=892,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='GetGoogleAdsField',
+ full_name='google.ads.googleads.v0.services.GoogleAdsFieldService.GetGoogleAdsField',
+ index=0,
+ containing_service=None,
+ input_type=_GETGOOGLEADSFIELDREQUEST,
+ output_type=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_google__ads__field__pb2._GOOGLEADSFIELD,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002\'\022%/v0/{resource_name=googleAdsFields/*}')),
+ ),
+ _descriptor.MethodDescriptor(
+ name='SearchGoogleAdsFields',
+ full_name='google.ads.googleads.v0.services.GoogleAdsFieldService.SearchGoogleAdsFields',
+ index=1,
+ containing_service=None,
+ input_type=_SEARCHGOOGLEADSFIELDSREQUEST,
+ output_type=_SEARCHGOOGLEADSFIELDSRESPONSE,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002\037\"\032/v0/googleAdsFields:search:\001*')),
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_GOOGLEADSFIELDSERVICE)
+
+DESCRIPTOR.services_by_name['GoogleAdsFieldService'] = _GOOGLEADSFIELDSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/services/google_ads_field_service_pb2_grpc.py b/google/ads/google_ads/v0/proto/services/google_ads_field_service_pb2_grpc.py
new file mode 100644
index 000000000..787671a29
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/google_ads_field_service_pb2_grpc.py
@@ -0,0 +1,64 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
+from google.ads.google_ads.v0.proto.resources import google_ads_field_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_google__ads__field__pb2
+from google.ads.google_ads.v0.proto.services import google_ads_field_service_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_google__ads__field__service__pb2
+
+
+class GoogleAdsFieldServiceStub(object):
+ """Service to fetch Google Ads API fields.
+ """
+
+ def __init__(self, channel):
+ """Constructor.
+
+ Args:
+ channel: A grpc.Channel.
+ """
+ self.GetGoogleAdsField = channel.unary_unary(
+ '/google.ads.googleads.v0.services.GoogleAdsFieldService/GetGoogleAdsField',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_google__ads__field__service__pb2.GetGoogleAdsFieldRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_google__ads__field__pb2.GoogleAdsField.FromString,
+ )
+ self.SearchGoogleAdsFields = channel.unary_unary(
+ '/google.ads.googleads.v0.services.GoogleAdsFieldService/SearchGoogleAdsFields',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_google__ads__field__service__pb2.SearchGoogleAdsFieldsRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_google__ads__field__service__pb2.SearchGoogleAdsFieldsResponse.FromString,
+ )
+
+
+class GoogleAdsFieldServiceServicer(object):
+ """Service to fetch Google Ads API fields.
+ """
+
+ def GetGoogleAdsField(self, request, context):
+ """Returns just the requested field.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+ def SearchGoogleAdsFields(self, request, context):
+ """Returns all fields that match the search query.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+
+def add_GoogleAdsFieldServiceServicer_to_server(servicer, server):
+ rpc_method_handlers = {
+ 'GetGoogleAdsField': grpc.unary_unary_rpc_method_handler(
+ servicer.GetGoogleAdsField,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_google__ads__field__service__pb2.GetGoogleAdsFieldRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_google__ads__field__pb2.GoogleAdsField.SerializeToString,
+ ),
+ 'SearchGoogleAdsFields': grpc.unary_unary_rpc_method_handler(
+ servicer.SearchGoogleAdsFields,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_google__ads__field__service__pb2.SearchGoogleAdsFieldsRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_google__ads__field__service__pb2.SearchGoogleAdsFieldsResponse.SerializeToString,
+ ),
+ }
+ generic_handler = grpc.method_handlers_generic_handler(
+ 'google.ads.googleads.v0.services.GoogleAdsFieldService', rpc_method_handlers)
+ server.add_generic_rpc_handlers((generic_handler,))
diff --git a/google/ads/google_ads/v0/proto/services/google_ads_service_pb2.py b/google/ads/google_ads/v0/proto/services/google_ads_service_pb2.py
new file mode 100644
index 000000000..c511a72ec
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/google_ads_service_pb2.py
@@ -0,0 +1,511 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/services/google_ads_service.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.common import metrics_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_metrics__pb2
+from google.ads.google_ads.v0.proto.enums import ad_network_type_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__network__type__pb2
+from google.ads.google_ads.v0.proto.enums import day_of_week_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_day__of__week__pb2
+from google.ads.google_ads.v0.proto.enums import device_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_device__pb2
+from google.ads.google_ads.v0.proto.enums import slot_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_slot__pb2
+from google.ads.google_ads.v0.proto.resources import ad_group_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__pb2
+from google.ads.google_ads.v0.proto.resources import ad_group_ad_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__ad__pb2
+from google.ads.google_ads.v0.proto.resources import ad_group_bid_modifier_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__bid__modifier__pb2
+from google.ads.google_ads.v0.proto.resources import ad_group_criterion_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__criterion__pb2
+from google.ads.google_ads.v0.proto.resources import bidding_strategy_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_bidding__strategy__pb2
+from google.ads.google_ads.v0.proto.resources import campaign_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__pb2
+from google.ads.google_ads.v0.proto.resources import campaign_budget_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__budget__pb2
+from google.ads.google_ads.v0.proto.resources import campaign_criterion_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__criterion__pb2
+from google.ads.google_ads.v0.proto.resources import customer_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_customer__pb2
+from google.ads.google_ads.v0.proto.resources import geo_target_constant_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_geo__target__constant__pb2
+from google.ads.google_ads.v0.proto.resources import keyword_view_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_keyword__view__pb2
+from google.ads.google_ads.v0.proto.resources import recommendation_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_recommendation__pb2
+from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
+from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/services/google_ads_service.proto',
+ package='google.ads.googleads.v0.services',
+ syntax='proto3',
+ serialized_pb=_b('\n?google/ads/googleads_v0/proto/services/google_ads_service.proto\x12 google.ads.googleads.v0.services\x1a\x32google/ads/googleads_v0/proto/common/metrics.proto\x1a\x39google/ads/googleads_v0/proto/enums/ad_network_type.proto\x1a\x35google/ads/googleads_v0/proto/enums/day_of_week.proto\x1a\x30google/ads/googleads_v0/proto/enums/device.proto\x1a.google/ads/googleads_v0/proto/enums/slot.proto\x1a\x36google/ads/googleads_v0/proto/resources/ad_group.proto\x1a\x39google/ads/googleads_v0/proto/resources/ad_group_ad.proto\x1a\x43google/ads/googleads_v0/proto/resources/ad_group_bid_modifier.proto\x1a@google/ads/googleads_v0/proto/resources/ad_group_criterion.proto\x1a>google/ads/googleads_v0/proto/resources/bidding_strategy.proto\x1a\x36google/ads/googleads_v0/proto/resources/campaign.proto\x1a=google/ads/googleads_v0/proto/resources/campaign_budget.proto\x1a@google/ads/googleads_v0/proto/resources/campaign_criterion.proto\x1a\x36google/ads/googleads_v0/proto/resources/customer.proto\x1a\x41google/ads/googleads_v0/proto/resources/geo_target_constant.proto\x1a:google/ads/googleads_v0/proto/resources/keyword_view.proto\x1a.google.ads.googleads.v0.enums.AdNetworkTypeEnum.AdNetworkType\x12*\n\x04\x64\x61te\x18\x06 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12K\n\x0b\x64\x61y_of_week\x18\x07 \x01(\x0e\x32\x36.google.ads.googleads.v0.enums.DayOfWeekEnum.DayOfWeek\x12@\n\x06\x64\x65vice\x18\x08 \x01(\x0e\x32\x30.google.ads.googleads.v0.enums.DeviceEnum.Device\x12)\n\x04hour\x18\t \x01(\x0b\x32\x1b.google.protobuf.Int32Value\x12+\n\x05month\x18\n \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12-\n\x07quarter\x18\x0c \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12:\n\x04slot\x18\r \x01(\x0e\x32,.google.ads.googleads.v0.enums.SlotEnum.Slot\x12*\n\x04week\x18\x0e \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12)\n\x04year\x18\x0f \x01(\x0b\x32\x1b.google.protobuf.Int32Value2\xcd\x01\n\x10GoogleAdsService\x12\xb8\x01\n\x06Search\x12\x38.google.ads.googleads.v0.services.SearchGoogleAdsRequest\x1a\x39.google.ads.googleads.v0.services.SearchGoogleAdsResponse\"9\x82\xd3\xe4\x93\x02\x33\"./v0/customers/{customer_id=*}/googleAds:search:\x01*B\xd5\x01\n$com.google.ads.googleads.v0.servicesB\x15GoogleAdsServiceProtoP\x01ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\xa2\x02\x03GAA\xaa\x02 Google.Ads.GoogleAds.V0.Services\xca\x02 Google\\Ads\\GoogleAds\\V0\\Servicesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_metrics__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__network__type__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_day__of__week__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_device__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_slot__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__ad__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__bid__modifier__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__criterion__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_bidding__strategy__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__budget__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__criterion__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_customer__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_geo__target__constant__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_keyword__view__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_recommendation__pb2.DESCRIPTOR,google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_protobuf_dot_field__mask__pb2.DESCRIPTOR,google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,])
+
+
+
+
+_SEARCHGOOGLEADSREQUEST = _descriptor.Descriptor(
+ name='SearchGoogleAdsRequest',
+ full_name='google.ads.googleads.v0.services.SearchGoogleAdsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='customer_id', full_name='google.ads.googleads.v0.services.SearchGoogleAdsRequest.customer_id', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='query', full_name='google.ads.googleads.v0.services.SearchGoogleAdsRequest.query', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='page_token', full_name='google.ads.googleads.v0.services.SearchGoogleAdsRequest.page_token', index=2,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='page_size', full_name='google.ads.googleads.v0.services.SearchGoogleAdsRequest.page_size', index=3,
+ number=4, type=5, cpp_type=1, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1205,
+ serialized_end=1304,
+)
+
+
+_SEARCHGOOGLEADSRESPONSE = _descriptor.Descriptor(
+ name='SearchGoogleAdsResponse',
+ full_name='google.ads.googleads.v0.services.SearchGoogleAdsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='results', full_name='google.ads.googleads.v0.services.SearchGoogleAdsResponse.results', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='next_page_token', full_name='google.ads.googleads.v0.services.SearchGoogleAdsResponse.next_page_token', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='total_results_count', full_name='google.ads.googleads.v0.services.SearchGoogleAdsResponse.total_results_count', index=2,
+ number=3, type=3, cpp_type=2, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='field_mask', full_name='google.ads.googleads.v0.services.SearchGoogleAdsResponse.field_mask', index=3,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1307,
+ serialized_end=1499,
+)
+
+
+_GOOGLEADSROW = _descriptor.Descriptor(
+ name='GoogleAdsRow',
+ full_name='google.ads.googleads.v0.services.GoogleAdsRow',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='ad_group', full_name='google.ads.googleads.v0.services.GoogleAdsRow.ad_group', index=0,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ad_group_ad', full_name='google.ads.googleads.v0.services.GoogleAdsRow.ad_group_ad', index=1,
+ number=16, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ad_group_bid_modifier', full_name='google.ads.googleads.v0.services.GoogleAdsRow.ad_group_bid_modifier', index=2,
+ number=24, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ad_group_criterion', full_name='google.ads.googleads.v0.services.GoogleAdsRow.ad_group_criterion', index=3,
+ number=17, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='bidding_strategy', full_name='google.ads.googleads.v0.services.GoogleAdsRow.bidding_strategy', index=4,
+ number=18, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='campaign_budget', full_name='google.ads.googleads.v0.services.GoogleAdsRow.campaign_budget', index=5,
+ number=19, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='campaign', full_name='google.ads.googleads.v0.services.GoogleAdsRow.campaign', index=6,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='campaign_criterion', full_name='google.ads.googleads.v0.services.GoogleAdsRow.campaign_criterion', index=7,
+ number=20, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='customer', full_name='google.ads.googleads.v0.services.GoogleAdsRow.customer', index=8,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='geo_target_constant', full_name='google.ads.googleads.v0.services.GoogleAdsRow.geo_target_constant', index=9,
+ number=23, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='keyword_view', full_name='google.ads.googleads.v0.services.GoogleAdsRow.keyword_view', index=10,
+ number=21, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='recommendation', full_name='google.ads.googleads.v0.services.GoogleAdsRow.recommendation', index=11,
+ number=22, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='metrics', full_name='google.ads.googleads.v0.services.GoogleAdsRow.metrics', index=12,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ad_network_type', full_name='google.ads.googleads.v0.services.GoogleAdsRow.ad_network_type', index=13,
+ number=5, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='date', full_name='google.ads.googleads.v0.services.GoogleAdsRow.date', index=14,
+ number=6, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='day_of_week', full_name='google.ads.googleads.v0.services.GoogleAdsRow.day_of_week', index=15,
+ number=7, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='device', full_name='google.ads.googleads.v0.services.GoogleAdsRow.device', index=16,
+ number=8, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='hour', full_name='google.ads.googleads.v0.services.GoogleAdsRow.hour', index=17,
+ number=9, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='month', full_name='google.ads.googleads.v0.services.GoogleAdsRow.month', index=18,
+ number=10, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='quarter', full_name='google.ads.googleads.v0.services.GoogleAdsRow.quarter', index=19,
+ number=12, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='slot', full_name='google.ads.googleads.v0.services.GoogleAdsRow.slot', index=20,
+ number=13, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='week', full_name='google.ads.googleads.v0.services.GoogleAdsRow.week', index=21,
+ number=14, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='year', full_name='google.ads.googleads.v0.services.GoogleAdsRow.year', index=22,
+ number=15, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1502,
+ serialized_end=3018,
+)
+
+_SEARCHGOOGLEADSRESPONSE.fields_by_name['results'].message_type = _GOOGLEADSROW
+_SEARCHGOOGLEADSRESPONSE.fields_by_name['field_mask'].message_type = google_dot_protobuf_dot_field__mask__pb2._FIELDMASK
+_GOOGLEADSROW.fields_by_name['ad_group'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__pb2._ADGROUP
+_GOOGLEADSROW.fields_by_name['ad_group_ad'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__ad__pb2._ADGROUPAD
+_GOOGLEADSROW.fields_by_name['ad_group_bid_modifier'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__bid__modifier__pb2._ADGROUPBIDMODIFIER
+_GOOGLEADSROW.fields_by_name['ad_group_criterion'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__group__criterion__pb2._ADGROUPCRITERION
+_GOOGLEADSROW.fields_by_name['bidding_strategy'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_bidding__strategy__pb2._BIDDINGSTRATEGY
+_GOOGLEADSROW.fields_by_name['campaign_budget'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__budget__pb2._CAMPAIGNBUDGET
+_GOOGLEADSROW.fields_by_name['campaign'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__pb2._CAMPAIGN
+_GOOGLEADSROW.fields_by_name['campaign_criterion'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_campaign__criterion__pb2._CAMPAIGNCRITERION
+_GOOGLEADSROW.fields_by_name['customer'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_customer__pb2._CUSTOMER
+_GOOGLEADSROW.fields_by_name['geo_target_constant'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_geo__target__constant__pb2._GEOTARGETCONSTANT
+_GOOGLEADSROW.fields_by_name['keyword_view'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_keyword__view__pb2._KEYWORDVIEW
+_GOOGLEADSROW.fields_by_name['recommendation'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_recommendation__pb2._RECOMMENDATION
+_GOOGLEADSROW.fields_by_name['metrics'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_common_dot_metrics__pb2._METRICS
+_GOOGLEADSROW.fields_by_name['ad_network_type'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_ad__network__type__pb2._ADNETWORKTYPEENUM_ADNETWORKTYPE
+_GOOGLEADSROW.fields_by_name['date'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_GOOGLEADSROW.fields_by_name['day_of_week'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_day__of__week__pb2._DAYOFWEEKENUM_DAYOFWEEK
+_GOOGLEADSROW.fields_by_name['device'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_device__pb2._DEVICEENUM_DEVICE
+_GOOGLEADSROW.fields_by_name['hour'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT32VALUE
+_GOOGLEADSROW.fields_by_name['month'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_GOOGLEADSROW.fields_by_name['quarter'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_GOOGLEADSROW.fields_by_name['slot'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_slot__pb2._SLOTENUM_SLOT
+_GOOGLEADSROW.fields_by_name['week'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_GOOGLEADSROW.fields_by_name['year'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT32VALUE
+DESCRIPTOR.message_types_by_name['SearchGoogleAdsRequest'] = _SEARCHGOOGLEADSREQUEST
+DESCRIPTOR.message_types_by_name['SearchGoogleAdsResponse'] = _SEARCHGOOGLEADSRESPONSE
+DESCRIPTOR.message_types_by_name['GoogleAdsRow'] = _GOOGLEADSROW
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+SearchGoogleAdsRequest = _reflection.GeneratedProtocolMessageType('SearchGoogleAdsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _SEARCHGOOGLEADSREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.google_ads_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [GoogleAdsService.Search][google.ads.googleads.v0.services.GoogleAdsService.Search].
+
+
+ Attributes:
+ customer_id:
+ The ID of the customer being queried.
+ query:
+ The query string.
+ page_token:
+ Token of the page to retrieve. If not specified, the first
+ page of results will be returned. Use the value obtained from
+ ``next_page_token`` in the previous response in order to
+ request the next page of results.
+ page_size:
+ Number of elements to retrieve in a single page. When too
+ large a page is requested, the server may decide to further
+ limit the number of returned resources.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.SearchGoogleAdsRequest)
+ ))
+_sym_db.RegisterMessage(SearchGoogleAdsRequest)
+
+SearchGoogleAdsResponse = _reflection.GeneratedProtocolMessageType('SearchGoogleAdsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _SEARCHGOOGLEADSRESPONSE,
+ __module__ = 'google.ads.googleads_v0.proto.services.google_ads_service_pb2'
+ ,
+ __doc__ = """Response message for
+ [GoogleAdsService.Search][google.ads.googleads.v0.services.GoogleAdsService.Search].
+
+
+ Attributes:
+ results:
+ The list of rows that matched the query.
+ next_page_token:
+ Pagination token used to retrieve the next page of results.
+ Pass the content of this string as the ``page_token``
+ attribute of the next request. ``next_page_token`` is not
+ returned for the last page.
+ total_results_count:
+ Total number of results that match the query ignoring the
+ LIMIT clause.
+ field_mask:
+ FieldMask that represents what fields were requested by the
+ user.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.SearchGoogleAdsResponse)
+ ))
+_sym_db.RegisterMessage(SearchGoogleAdsResponse)
+
+GoogleAdsRow = _reflection.GeneratedProtocolMessageType('GoogleAdsRow', (_message.Message,), dict(
+ DESCRIPTOR = _GOOGLEADSROW,
+ __module__ = 'google.ads.googleads_v0.proto.services.google_ads_service_pb2'
+ ,
+ __doc__ = """A returned row from the query.
+
+
+ Attributes:
+ ad_group:
+ The ad group referenced in the query.
+ ad_group_ad:
+ The ad referenced in the query.
+ ad_group_bid_modifier:
+ The bid modifier referenced in the query.
+ ad_group_criterion:
+ The criterion referenced in the query.
+ bidding_strategy:
+ The bidding strategy referenced in the query.
+ campaign_budget:
+ The campaign budget referenced in the query.
+ campaign:
+ The campaign referenced in the query.
+ campaign_criterion:
+ The campaign criterion referenced in the query.
+ customer:
+ The customer referenced in the query.
+ geo_target_constant:
+ The geo target constant referenced in the query.
+ keyword_view:
+ The keyword view referenced in the query.
+ recommendation:
+ The recommendation referenced in the query.
+ metrics:
+ The metrics.
+ ad_network_type:
+ Ad network type.
+ date:
+ Date to which metrics apply. YYYY-MM-DD format, e.g.,
+ 2018-04-17.
+ day_of_week:
+ Day of the week, e.g., MONDAY.
+ device:
+ Platform to which metrics apply.
+ hour:
+ Hour of day as a number between 0 and 23, inclusive.
+ month:
+ Month as represented by the date of the first day of a month.
+ quarter:
+ Quarter as represented by the date of the first day of a
+ quarter. Uses the calendar year for quarters, e.g., the second
+ quarter of 2018 starts on 2018-04-01.
+ slot:
+ Position of the ad.
+ week:
+ Week as defined as Monday through Sunday, and represented by
+ the date of Monday.
+ year:
+ Year, formatted as yyyy.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.GoogleAdsRow)
+ ))
+_sym_db.RegisterMessage(GoogleAdsRow)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$com.google.ads.googleads.v0.servicesB\025GoogleAdsServiceProtoP\001ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\242\002\003GAA\252\002 Google.Ads.GoogleAds.V0.Services\312\002 Google\\Ads\\GoogleAds\\V0\\Services'))
+
+_GOOGLEADSSERVICE = _descriptor.ServiceDescriptor(
+ name='GoogleAdsService',
+ full_name='google.ads.googleads.v0.services.GoogleAdsService',
+ file=DESCRIPTOR,
+ index=0,
+ options=None,
+ serialized_start=3021,
+ serialized_end=3226,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='Search',
+ full_name='google.ads.googleads.v0.services.GoogleAdsService.Search',
+ index=0,
+ containing_service=None,
+ input_type=_SEARCHGOOGLEADSREQUEST,
+ output_type=_SEARCHGOOGLEADSRESPONSE,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0023\"./v0/customers/{customer_id=*}/googleAds:search:\001*')),
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_GOOGLEADSSERVICE)
+
+DESCRIPTOR.services_by_name['GoogleAdsService'] = _GOOGLEADSSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/services/google_ads_service_pb2_grpc.py b/google/ads/google_ads/v0/proto/services/google_ads_service_pb2_grpc.py
new file mode 100644
index 000000000..c20496af3
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/google_ads_service_pb2_grpc.py
@@ -0,0 +1,46 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
+from google.ads.google_ads.v0.proto.services import google_ads_service_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_google__ads__service__pb2
+
+
+class GoogleAdsServiceStub(object):
+ """Service to fetch data and metrics across resources.
+ """
+
+ def __init__(self, channel):
+ """Constructor.
+
+ Args:
+ channel: A grpc.Channel.
+ """
+ self.Search = channel.unary_unary(
+ '/google.ads.googleads.v0.services.GoogleAdsService/Search',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_google__ads__service__pb2.SearchGoogleAdsRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_google__ads__service__pb2.SearchGoogleAdsResponse.FromString,
+ )
+
+
+class GoogleAdsServiceServicer(object):
+ """Service to fetch data and metrics across resources.
+ """
+
+ def Search(self, request, context):
+ """Returns all rows that match the search query.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+
+def add_GoogleAdsServiceServicer_to_server(servicer, server):
+ rpc_method_handlers = {
+ 'Search': grpc.unary_unary_rpc_method_handler(
+ servicer.Search,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_google__ads__service__pb2.SearchGoogleAdsRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_google__ads__service__pb2.SearchGoogleAdsResponse.SerializeToString,
+ ),
+ }
+ generic_handler = grpc.method_handlers_generic_handler(
+ 'google.ads.googleads.v0.services.GoogleAdsService', rpc_method_handlers)
+ server.add_generic_rpc_handlers((generic_handler,))
diff --git a/google/ads/google_ads/v0/proto/services/keyword_view_service_pb2.py b/google/ads/google_ads/v0/proto/services/keyword_view_service_pb2.py
new file mode 100644
index 000000000..04d83ba20
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/keyword_view_service_pb2.py
@@ -0,0 +1,107 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/services/keyword_view_service.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.resources import keyword_view_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_keyword__view__pb2
+from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/services/keyword_view_service.proto',
+ package='google.ads.googleads.v0.services',
+ syntax='proto3',
+ serialized_pb=_b('\nAgoogle/ads/googleads_v0/proto/services/keyword_view_service.proto\x12 google.ads.googleads.v0.services\x1a:google/ads/googleads_v0/proto/resources/keyword_view.proto\x1a\x1cgoogle/api/annotations.proto\".\n\x15GetKeywordViewRequest\x12\x15\n\rresource_name\x18\x01 \x01(\t2\xc8\x01\n\x12KeywordViewService\x12\xb1\x01\n\x0eGetKeywordView\x12\x37.google.ads.googleads.v0.services.GetKeywordViewRequest\x1a..google.ads.googleads.v0.resources.KeywordView\"6\x82\xd3\xe4\x93\x02\x30\x12./v0/{resource_name=customers/*/keywordViews/*}B\xd7\x01\n$com.google.ads.googleads.v0.servicesB\x17KeywordViewServiceProtoP\x01ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\xa2\x02\x03GAA\xaa\x02 Google.Ads.GoogleAds.V0.Services\xca\x02 Google\\Ads\\GoogleAds\\V0\\Servicesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_keyword__view__pb2.DESCRIPTOR,google_dot_api_dot_annotations__pb2.DESCRIPTOR,])
+
+
+
+
+_GETKEYWORDVIEWREQUEST = _descriptor.Descriptor(
+ name='GetKeywordViewRequest',
+ full_name='google.ads.googleads.v0.services.GetKeywordViewRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.GetKeywordViewRequest.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=193,
+ serialized_end=239,
+)
+
+DESCRIPTOR.message_types_by_name['GetKeywordViewRequest'] = _GETKEYWORDVIEWREQUEST
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+GetKeywordViewRequest = _reflection.GeneratedProtocolMessageType('GetKeywordViewRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETKEYWORDVIEWREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.keyword_view_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [KeywordViewService.GetKeywordView][google.ads.googleads.v0.services.KeywordViewService.GetKeywordView].
+
+
+ Attributes:
+ resource_name:
+ The resource name of the keyword view to fetch.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.GetKeywordViewRequest)
+ ))
+_sym_db.RegisterMessage(GetKeywordViewRequest)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$com.google.ads.googleads.v0.servicesB\027KeywordViewServiceProtoP\001ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\242\002\003GAA\252\002 Google.Ads.GoogleAds.V0.Services\312\002 Google\\Ads\\GoogleAds\\V0\\Services'))
+
+_KEYWORDVIEWSERVICE = _descriptor.ServiceDescriptor(
+ name='KeywordViewService',
+ full_name='google.ads.googleads.v0.services.KeywordViewService',
+ file=DESCRIPTOR,
+ index=0,
+ options=None,
+ serialized_start=242,
+ serialized_end=442,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='GetKeywordView',
+ full_name='google.ads.googleads.v0.services.KeywordViewService.GetKeywordView',
+ index=0,
+ containing_service=None,
+ input_type=_GETKEYWORDVIEWREQUEST,
+ output_type=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_keyword__view__pb2._KEYWORDVIEW,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0020\022./v0/{resource_name=customers/*/keywordViews/*}')),
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_KEYWORDVIEWSERVICE)
+
+DESCRIPTOR.services_by_name['KeywordViewService'] = _KEYWORDVIEWSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/services/keyword_view_service_pb2_grpc.py b/google/ads/google_ads/v0/proto/services/keyword_view_service_pb2_grpc.py
new file mode 100644
index 000000000..6d31e720a
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/keyword_view_service_pb2_grpc.py
@@ -0,0 +1,47 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
+from google.ads.google_ads.v0.proto.resources import keyword_view_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_keyword__view__pb2
+from google.ads.google_ads.v0.proto.services import keyword_view_service_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_keyword__view__service__pb2
+
+
+class KeywordViewServiceStub(object):
+ """Service to manage keyword views.
+ """
+
+ def __init__(self, channel):
+ """Constructor.
+
+ Args:
+ channel: A grpc.Channel.
+ """
+ self.GetKeywordView = channel.unary_unary(
+ '/google.ads.googleads.v0.services.KeywordViewService/GetKeywordView',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_keyword__view__service__pb2.GetKeywordViewRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_keyword__view__pb2.KeywordView.FromString,
+ )
+
+
+class KeywordViewServiceServicer(object):
+ """Service to manage keyword views.
+ """
+
+ def GetKeywordView(self, request, context):
+ """Returns the requested keyword view in full detail.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+
+def add_KeywordViewServiceServicer_to_server(servicer, server):
+ rpc_method_handlers = {
+ 'GetKeywordView': grpc.unary_unary_rpc_method_handler(
+ servicer.GetKeywordView,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_keyword__view__service__pb2.GetKeywordViewRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_keyword__view__pb2.KeywordView.SerializeToString,
+ ),
+ }
+ generic_handler = grpc.method_handlers_generic_handler(
+ 'google.ads.googleads.v0.services.KeywordViewService', rpc_method_handlers)
+ server.add_generic_rpc_handlers((generic_handler,))
diff --git a/google/ads/google_ads/v0/proto/services/recommendation_service_pb2.py b/google/ads/google_ads/v0/proto/services/recommendation_service_pb2.py
new file mode 100644
index 000000000..768757b1c
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/recommendation_service_pb2.py
@@ -0,0 +1,633 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: google/ads/googleads_v0/proto/services/recommendation_service.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.ads.google_ads.v0.proto.enums import keyword_match_type_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_keyword__match__type__pb2
+from google.ads.google_ads.v0.proto.resources import ad_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__pb2
+from google.ads.google_ads.v0.proto.resources import recommendation_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_recommendation__pb2
+from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+from google.rpc import status_pb2 as google_dot_rpc_dot_status__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='google/ads/googleads_v0/proto/services/recommendation_service.proto',
+ package='google.ads.googleads.v0.services',
+ syntax='proto3',
+ serialized_pb=_b('\nCgoogle/ads/googleads_v0/proto/services/recommendation_service.proto\x12 google.ads.googleads.v0.services\x1a.google.ads.googleads.v0.services.ApplyRecommendationOperation\"\x90\x08\n\x1c\x41pplyRecommendationOperation\x12\x15\n\rresource_name\x18\x01 \x01(\t\x12r\n\x0f\x63\x61mpaign_budget\x18\x02 \x01(\x0b\x32W.google.ads.googleads.v0.services.ApplyRecommendationOperation.CampaignBudgetParametersH\x00\x12\x62\n\x07text_ad\x18\x03 \x01(\x0b\x32O.google.ads.googleads.v0.services.ApplyRecommendationOperation.TextAdParametersH\x00\x12\x63\n\x07keyword\x18\x04 \x01(\x0b\x32P.google.ads.googleads.v0.services.ApplyRecommendationOperation.KeywordParametersH\x00\x12t\n\x11target_cpa_opt_in\x18\x05 \x01(\x0b\x32W.google.ads.googleads.v0.services.ApplyRecommendationOperation.TargetCpaOptInParametersH\x00\x1aY\n\x18\x43\x61mpaignBudgetParameters\x12=\n\x18new_budget_amount_micros\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x1a\x45\n\x10TextAdParameters\x12\x31\n\x02\x61\x64\x18\x01 \x01(\x0b\x32%.google.ads.googleads.v0.resources.Ad\x1a\xd2\x01\n\x11KeywordParameters\x12.\n\x08\x61\x64_group\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12X\n\nmatch_type\x18\x02 \x01(\x0e\x32\x44.google.ads.googleads.v0.enums.KeywordMatchTypeEnum.KeywordMatchType\x12\x33\n\x0e\x63pc_bid_micros\x18\x03 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x1a\x9a\x01\n\x18TargetCpaOptInParameters\x12\x36\n\x11target_cpa_micros\x18\x01 \x01(\x0b\x32\x1b.google.protobuf.Int64Value\x12\x46\n!new_campaign_budget_amount_micros\x18\x02 \x01(\x0b\x32\x1b.google.protobuf.Int64ValueB\x12\n\x10\x61pply_parameters\"k\n\x1b\x41pplyRecommendationResponse\x12L\n\x07results\x18\x01 \x03(\x0b\x32;.google.ads.googleads.v0.services.ApplyRecommendationResult\"d\n\x19\x41pplyRecommendationResult\x12\x17\n\rresource_name\x18\x01 \x01(\tH\x00\x12$\n\x06status\x18\x02 \x01(\x0b\x32\x12.google.rpc.StatusH\x00\x42\x08\n\x06result2\xac\x03\n\x15RecommendationService\x12\xbd\x01\n\x11GetRecommendation\x12:.google.ads.googleads.v0.services.GetRecommendationRequest\x1a\x31.google.ads.googleads.v0.resources.Recommendation\"9\x82\xd3\xe4\x93\x02\x33\x12\x31/v0/{resource_name=customers/*/recommendations/*}\x12\xd2\x01\n\x13\x41pplyRecommendation\x12<.google.ads.googleads.v0.services.ApplyRecommendationRequest\x1a=.google.ads.googleads.v0.services.ApplyRecommendationResponse\">\x82\xd3\xe4\x93\x02\x38\"3/v0/customers/{customer_id=*}/recommendations:apply:\x01*B\xda\x01\n$com.google.ads.googleads.v0.servicesB\x1aRecommendationServiceProtoP\x01ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\xa2\x02\x03GAA\xaa\x02 Google.Ads.GoogleAds.V0.Services\xca\x02 Google\\Ads\\GoogleAds\\V0\\Servicesb\x06proto3')
+ ,
+ dependencies=[google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_keyword__match__type__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__pb2.DESCRIPTOR,google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_recommendation__pb2.DESCRIPTOR,google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,google_dot_rpc_dot_status__pb2.DESCRIPTOR,])
+
+
+
+
+_GETRECOMMENDATIONREQUEST = _descriptor.Descriptor(
+ name='GetRecommendationRequest',
+ full_name='google.ads.googleads.v0.services.GetRecommendationRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.GetRecommendationRequest.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=366,
+ serialized_end=415,
+)
+
+
+_APPLYRECOMMENDATIONREQUEST = _descriptor.Descriptor(
+ name='ApplyRecommendationRequest',
+ full_name='google.ads.googleads.v0.services.ApplyRecommendationRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='customer_id', full_name='google.ads.googleads.v0.services.ApplyRecommendationRequest.customer_id', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='operations', full_name='google.ads.googleads.v0.services.ApplyRecommendationRequest.operations', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=418,
+ serialized_end=551,
+)
+
+
+_APPLYRECOMMENDATIONOPERATION_CAMPAIGNBUDGETPARAMETERS = _descriptor.Descriptor(
+ name='CampaignBudgetParameters',
+ full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation.CampaignBudgetParameters',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='new_budget_amount_micros', full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation.CampaignBudgetParameters.new_budget_amount_micros', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1044,
+ serialized_end=1133,
+)
+
+_APPLYRECOMMENDATIONOPERATION_TEXTADPARAMETERS = _descriptor.Descriptor(
+ name='TextAdParameters',
+ full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation.TextAdParameters',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='ad', full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation.TextAdParameters.ad', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1135,
+ serialized_end=1204,
+)
+
+_APPLYRECOMMENDATIONOPERATION_KEYWORDPARAMETERS = _descriptor.Descriptor(
+ name='KeywordParameters',
+ full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation.KeywordParameters',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='ad_group', full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation.KeywordParameters.ad_group', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='match_type', full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation.KeywordParameters.match_type', index=1,
+ number=2, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cpc_bid_micros', full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation.KeywordParameters.cpc_bid_micros', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1207,
+ serialized_end=1417,
+)
+
+_APPLYRECOMMENDATIONOPERATION_TARGETCPAOPTINPARAMETERS = _descriptor.Descriptor(
+ name='TargetCpaOptInParameters',
+ full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation.TargetCpaOptInParameters',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='target_cpa_micros', full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation.TargetCpaOptInParameters.target_cpa_micros', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='new_campaign_budget_amount_micros', full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation.TargetCpaOptInParameters.new_campaign_budget_amount_micros', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1420,
+ serialized_end=1574,
+)
+
+_APPLYRECOMMENDATIONOPERATION = _descriptor.Descriptor(
+ name='ApplyRecommendationOperation',
+ full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='campaign_budget', full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation.campaign_budget', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='text_ad', full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation.text_ad', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='keyword', full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation.keyword', index=3,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='target_cpa_opt_in', full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation.target_cpa_opt_in', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[_APPLYRECOMMENDATIONOPERATION_CAMPAIGNBUDGETPARAMETERS, _APPLYRECOMMENDATIONOPERATION_TEXTADPARAMETERS, _APPLYRECOMMENDATIONOPERATION_KEYWORDPARAMETERS, _APPLYRECOMMENDATIONOPERATION_TARGETCPAOPTINPARAMETERS, ],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='apply_parameters', full_name='google.ads.googleads.v0.services.ApplyRecommendationOperation.apply_parameters',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=554,
+ serialized_end=1594,
+)
+
+
+_APPLYRECOMMENDATIONRESPONSE = _descriptor.Descriptor(
+ name='ApplyRecommendationResponse',
+ full_name='google.ads.googleads.v0.services.ApplyRecommendationResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='results', full_name='google.ads.googleads.v0.services.ApplyRecommendationResponse.results', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1596,
+ serialized_end=1703,
+)
+
+
+_APPLYRECOMMENDATIONRESULT = _descriptor.Descriptor(
+ name='ApplyRecommendationResult',
+ full_name='google.ads.googleads.v0.services.ApplyRecommendationResult',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='resource_name', full_name='google.ads.googleads.v0.services.ApplyRecommendationResult.resource_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='status', full_name='google.ads.googleads.v0.services.ApplyRecommendationResult.status', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='result', full_name='google.ads.googleads.v0.services.ApplyRecommendationResult.result',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=1705,
+ serialized_end=1805,
+)
+
+_APPLYRECOMMENDATIONREQUEST.fields_by_name['operations'].message_type = _APPLYRECOMMENDATIONOPERATION
+_APPLYRECOMMENDATIONOPERATION_CAMPAIGNBUDGETPARAMETERS.fields_by_name['new_budget_amount_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_APPLYRECOMMENDATIONOPERATION_CAMPAIGNBUDGETPARAMETERS.containing_type = _APPLYRECOMMENDATIONOPERATION
+_APPLYRECOMMENDATIONOPERATION_TEXTADPARAMETERS.fields_by_name['ad'].message_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_ad__pb2._AD
+_APPLYRECOMMENDATIONOPERATION_TEXTADPARAMETERS.containing_type = _APPLYRECOMMENDATIONOPERATION
+_APPLYRECOMMENDATIONOPERATION_KEYWORDPARAMETERS.fields_by_name['ad_group'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_APPLYRECOMMENDATIONOPERATION_KEYWORDPARAMETERS.fields_by_name['match_type'].enum_type = google_dot_ads_dot_googleads__v0_dot_proto_dot_enums_dot_keyword__match__type__pb2._KEYWORDMATCHTYPEENUM_KEYWORDMATCHTYPE
+_APPLYRECOMMENDATIONOPERATION_KEYWORDPARAMETERS.fields_by_name['cpc_bid_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_APPLYRECOMMENDATIONOPERATION_KEYWORDPARAMETERS.containing_type = _APPLYRECOMMENDATIONOPERATION
+_APPLYRECOMMENDATIONOPERATION_TARGETCPAOPTINPARAMETERS.fields_by_name['target_cpa_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_APPLYRECOMMENDATIONOPERATION_TARGETCPAOPTINPARAMETERS.fields_by_name['new_campaign_budget_amount_micros'].message_type = google_dot_protobuf_dot_wrappers__pb2._INT64VALUE
+_APPLYRECOMMENDATIONOPERATION_TARGETCPAOPTINPARAMETERS.containing_type = _APPLYRECOMMENDATIONOPERATION
+_APPLYRECOMMENDATIONOPERATION.fields_by_name['campaign_budget'].message_type = _APPLYRECOMMENDATIONOPERATION_CAMPAIGNBUDGETPARAMETERS
+_APPLYRECOMMENDATIONOPERATION.fields_by_name['text_ad'].message_type = _APPLYRECOMMENDATIONOPERATION_TEXTADPARAMETERS
+_APPLYRECOMMENDATIONOPERATION.fields_by_name['keyword'].message_type = _APPLYRECOMMENDATIONOPERATION_KEYWORDPARAMETERS
+_APPLYRECOMMENDATIONOPERATION.fields_by_name['target_cpa_opt_in'].message_type = _APPLYRECOMMENDATIONOPERATION_TARGETCPAOPTINPARAMETERS
+_APPLYRECOMMENDATIONOPERATION.oneofs_by_name['apply_parameters'].fields.append(
+ _APPLYRECOMMENDATIONOPERATION.fields_by_name['campaign_budget'])
+_APPLYRECOMMENDATIONOPERATION.fields_by_name['campaign_budget'].containing_oneof = _APPLYRECOMMENDATIONOPERATION.oneofs_by_name['apply_parameters']
+_APPLYRECOMMENDATIONOPERATION.oneofs_by_name['apply_parameters'].fields.append(
+ _APPLYRECOMMENDATIONOPERATION.fields_by_name['text_ad'])
+_APPLYRECOMMENDATIONOPERATION.fields_by_name['text_ad'].containing_oneof = _APPLYRECOMMENDATIONOPERATION.oneofs_by_name['apply_parameters']
+_APPLYRECOMMENDATIONOPERATION.oneofs_by_name['apply_parameters'].fields.append(
+ _APPLYRECOMMENDATIONOPERATION.fields_by_name['keyword'])
+_APPLYRECOMMENDATIONOPERATION.fields_by_name['keyword'].containing_oneof = _APPLYRECOMMENDATIONOPERATION.oneofs_by_name['apply_parameters']
+_APPLYRECOMMENDATIONOPERATION.oneofs_by_name['apply_parameters'].fields.append(
+ _APPLYRECOMMENDATIONOPERATION.fields_by_name['target_cpa_opt_in'])
+_APPLYRECOMMENDATIONOPERATION.fields_by_name['target_cpa_opt_in'].containing_oneof = _APPLYRECOMMENDATIONOPERATION.oneofs_by_name['apply_parameters']
+_APPLYRECOMMENDATIONRESPONSE.fields_by_name['results'].message_type = _APPLYRECOMMENDATIONRESULT
+_APPLYRECOMMENDATIONRESULT.fields_by_name['status'].message_type = google_dot_rpc_dot_status__pb2._STATUS
+_APPLYRECOMMENDATIONRESULT.oneofs_by_name['result'].fields.append(
+ _APPLYRECOMMENDATIONRESULT.fields_by_name['resource_name'])
+_APPLYRECOMMENDATIONRESULT.fields_by_name['resource_name'].containing_oneof = _APPLYRECOMMENDATIONRESULT.oneofs_by_name['result']
+_APPLYRECOMMENDATIONRESULT.oneofs_by_name['result'].fields.append(
+ _APPLYRECOMMENDATIONRESULT.fields_by_name['status'])
+_APPLYRECOMMENDATIONRESULT.fields_by_name['status'].containing_oneof = _APPLYRECOMMENDATIONRESULT.oneofs_by_name['result']
+DESCRIPTOR.message_types_by_name['GetRecommendationRequest'] = _GETRECOMMENDATIONREQUEST
+DESCRIPTOR.message_types_by_name['ApplyRecommendationRequest'] = _APPLYRECOMMENDATIONREQUEST
+DESCRIPTOR.message_types_by_name['ApplyRecommendationOperation'] = _APPLYRECOMMENDATIONOPERATION
+DESCRIPTOR.message_types_by_name['ApplyRecommendationResponse'] = _APPLYRECOMMENDATIONRESPONSE
+DESCRIPTOR.message_types_by_name['ApplyRecommendationResult'] = _APPLYRECOMMENDATIONRESULT
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+GetRecommendationRequest = _reflection.GeneratedProtocolMessageType('GetRecommendationRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETRECOMMENDATIONREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.recommendation_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [RecommendationService.GetRecommendation][google.ads.googleads.v0.services.RecommendationService.GetRecommendation].
+
+
+ Attributes:
+ resource_name:
+ The resource name of the recommendation to fetch.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.GetRecommendationRequest)
+ ))
+_sym_db.RegisterMessage(GetRecommendationRequest)
+
+ApplyRecommendationRequest = _reflection.GeneratedProtocolMessageType('ApplyRecommendationRequest', (_message.Message,), dict(
+ DESCRIPTOR = _APPLYRECOMMENDATIONREQUEST,
+ __module__ = 'google.ads.googleads_v0.proto.services.recommendation_service_pb2'
+ ,
+ __doc__ = """Request message for
+ [RecommendationService.ApplyRecommendation][google.ads.googleads.v0.services.RecommendationService.ApplyRecommendation].
+
+
+ Attributes:
+ customer_id:
+ The ID of the customer with the recommendation.
+ operations:
+ The list of operations to apply recommendations.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.ApplyRecommendationRequest)
+ ))
+_sym_db.RegisterMessage(ApplyRecommendationRequest)
+
+ApplyRecommendationOperation = _reflection.GeneratedProtocolMessageType('ApplyRecommendationOperation', (_message.Message,), dict(
+
+ CampaignBudgetParameters = _reflection.GeneratedProtocolMessageType('CampaignBudgetParameters', (_message.Message,), dict(
+ DESCRIPTOR = _APPLYRECOMMENDATIONOPERATION_CAMPAIGNBUDGETPARAMETERS,
+ __module__ = 'google.ads.googleads_v0.proto.services.recommendation_service_pb2'
+ ,
+ __doc__ = """Parameters to use when applying a campaign budget recommendation.
+
+
+ Attributes:
+ new_budget_amount_micros:
+ New budget amount to set for target budget resource. This is a
+ required field.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.ApplyRecommendationOperation.CampaignBudgetParameters)
+ ))
+ ,
+
+ TextAdParameters = _reflection.GeneratedProtocolMessageType('TextAdParameters', (_message.Message,), dict(
+ DESCRIPTOR = _APPLYRECOMMENDATIONOPERATION_TEXTADPARAMETERS,
+ __module__ = 'google.ads.googleads_v0.proto.services.recommendation_service_pb2'
+ ,
+ __doc__ = """Parameters to use when applying a text ad recommendation.
+
+
+ Attributes:
+ ad:
+ New ad to add to recommended ad group. All necessary fields
+ need to be set in this message. This is a required field.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.ApplyRecommendationOperation.TextAdParameters)
+ ))
+ ,
+
+ KeywordParameters = _reflection.GeneratedProtocolMessageType('KeywordParameters', (_message.Message,), dict(
+ DESCRIPTOR = _APPLYRECOMMENDATIONOPERATION_KEYWORDPARAMETERS,
+ __module__ = 'google.ads.googleads_v0.proto.services.recommendation_service_pb2'
+ ,
+ __doc__ = """Parameters to use when applying keyword recommendation.
+
+
+ Attributes:
+ ad_group:
+ The ad group resource to add keyword to. This is a required
+ field.
+ match_type:
+ The match type of the keyword. This is a required field.
+ cpc_bid_micros:
+ Optional, CPC bid to set for the keyword. If not set, keyword
+ will use bid based on bidding strategy used by target ad
+ group.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.ApplyRecommendationOperation.KeywordParameters)
+ ))
+ ,
+
+ TargetCpaOptInParameters = _reflection.GeneratedProtocolMessageType('TargetCpaOptInParameters', (_message.Message,), dict(
+ DESCRIPTOR = _APPLYRECOMMENDATIONOPERATION_TARGETCPAOPTINPARAMETERS,
+ __module__ = 'google.ads.googleads_v0.proto.services.recommendation_service_pb2'
+ ,
+ __doc__ = """Parameters to use when applying Target CPA recommendation.
+
+
+ Attributes:
+ target_cpa_micros:
+ Average CPA to use for Target CPA bidding strategy. This is a
+ required field.
+ new_campaign_budget_amount_micros:
+ Optional, budget amount to set for the campaign.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.ApplyRecommendationOperation.TargetCpaOptInParameters)
+ ))
+ ,
+ DESCRIPTOR = _APPLYRECOMMENDATIONOPERATION,
+ __module__ = 'google.ads.googleads_v0.proto.services.recommendation_service_pb2'
+ ,
+ __doc__ = """Information about the operation to apply a recommendation and any
+ parameters to customize it.
+
+
+ Attributes:
+ resource_name:
+ The resource name of the recommendation to apply.
+ apply_parameters:
+ Parameters to use when applying the recommendation.
+ campaign_budget:
+ Optional parameters to use when applying a campaign budget
+ recommendation.
+ text_ad:
+ Optional parameters to use when applying a text ad
+ recommendation.
+ keyword:
+ Optional parameters to use when applying keyword
+ recommendation.
+ target_cpa_opt_in:
+ Optional parameters to use when applying target CPA opt-in
+ recommendation.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.ApplyRecommendationOperation)
+ ))
+_sym_db.RegisterMessage(ApplyRecommendationOperation)
+_sym_db.RegisterMessage(ApplyRecommendationOperation.CampaignBudgetParameters)
+_sym_db.RegisterMessage(ApplyRecommendationOperation.TextAdParameters)
+_sym_db.RegisterMessage(ApplyRecommendationOperation.KeywordParameters)
+_sym_db.RegisterMessage(ApplyRecommendationOperation.TargetCpaOptInParameters)
+
+ApplyRecommendationResponse = _reflection.GeneratedProtocolMessageType('ApplyRecommendationResponse', (_message.Message,), dict(
+ DESCRIPTOR = _APPLYRECOMMENDATIONRESPONSE,
+ __module__ = 'google.ads.googleads_v0.proto.services.recommendation_service_pb2'
+ ,
+ __doc__ = """Response message for
+ [RecommendationService.ApplyRecommendation][google.ads.googleads.v0.services.RecommendationService.ApplyRecommendation].
+
+
+ Attributes:
+ results:
+ Results of operations to apply recommendations.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.ApplyRecommendationResponse)
+ ))
+_sym_db.RegisterMessage(ApplyRecommendationResponse)
+
+ApplyRecommendationResult = _reflection.GeneratedProtocolMessageType('ApplyRecommendationResult', (_message.Message,), dict(
+ DESCRIPTOR = _APPLYRECOMMENDATIONRESULT,
+ __module__ = 'google.ads.googleads_v0.proto.services.recommendation_service_pb2'
+ ,
+ __doc__ = """The result of applying a recommendation.
+
+
+ Attributes:
+ result:
+ One of the successfully applied recommendation resource name
+ or error information will be set.
+ resource_name:
+ Returned for successful applies.
+ status:
+ Returned for failed operations.
+ """,
+ # @@protoc_insertion_point(class_scope:google.ads.googleads.v0.services.ApplyRecommendationResult)
+ ))
+_sym_db.RegisterMessage(ApplyRecommendationResult)
+
+
+DESCRIPTOR.has_options = True
+DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$com.google.ads.googleads.v0.servicesB\032RecommendationServiceProtoP\001ZHgoogle.golang.org/genproto/googleapis/ads/googleads/v0/services;services\242\002\003GAA\252\002 Google.Ads.GoogleAds.V0.Services\312\002 Google\\Ads\\GoogleAds\\V0\\Services'))
+
+_RECOMMENDATIONSERVICE = _descriptor.ServiceDescriptor(
+ name='RecommendationService',
+ full_name='google.ads.googleads.v0.services.RecommendationService',
+ file=DESCRIPTOR,
+ index=0,
+ options=None,
+ serialized_start=1808,
+ serialized_end=2236,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='GetRecommendation',
+ full_name='google.ads.googleads.v0.services.RecommendationService.GetRecommendation',
+ index=0,
+ containing_service=None,
+ input_type=_GETRECOMMENDATIONREQUEST,
+ output_type=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_recommendation__pb2._RECOMMENDATION,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0023\0221/v0/{resource_name=customers/*/recommendations/*}')),
+ ),
+ _descriptor.MethodDescriptor(
+ name='ApplyRecommendation',
+ full_name='google.ads.googleads.v0.services.RecommendationService.ApplyRecommendation',
+ index=1,
+ containing_service=None,
+ input_type=_APPLYRECOMMENDATIONREQUEST,
+ output_type=_APPLYRECOMMENDATIONRESPONSE,
+ options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0028\"3/v0/customers/{customer_id=*}/recommendations:apply:\001*')),
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_RECOMMENDATIONSERVICE)
+
+DESCRIPTOR.services_by_name['RecommendationService'] = _RECOMMENDATIONSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/google/ads/google_ads/v0/proto/services/recommendation_service_pb2_grpc.py b/google/ads/google_ads/v0/proto/services/recommendation_service_pb2_grpc.py
new file mode 100644
index 000000000..5f103ab48
--- /dev/null
+++ b/google/ads/google_ads/v0/proto/services/recommendation_service_pb2_grpc.py
@@ -0,0 +1,64 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
+from google.ads.google_ads.v0.proto.resources import recommendation_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_recommendation__pb2
+from google.ads.google_ads.v0.proto.services import recommendation_service_pb2 as google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_recommendation__service__pb2
+
+
+class RecommendationServiceStub(object):
+ """Service to manage recommendations.
+ """
+
+ def __init__(self, channel):
+ """Constructor.
+
+ Args:
+ channel: A grpc.Channel.
+ """
+ self.GetRecommendation = channel.unary_unary(
+ '/google.ads.googleads.v0.services.RecommendationService/GetRecommendation',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_recommendation__service__pb2.GetRecommendationRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_recommendation__pb2.Recommendation.FromString,
+ )
+ self.ApplyRecommendation = channel.unary_unary(
+ '/google.ads.googleads.v0.services.RecommendationService/ApplyRecommendation',
+ request_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_recommendation__service__pb2.ApplyRecommendationRequest.SerializeToString,
+ response_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_recommendation__service__pb2.ApplyRecommendationResponse.FromString,
+ )
+
+
+class RecommendationServiceServicer(object):
+ """Service to manage recommendations.
+ """
+
+ def GetRecommendation(self, request, context):
+ """Returns the requested recommendation in full detail.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+ def ApplyRecommendation(self, request, context):
+ """Applies given recommendations with corresponding apply parameters.
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+
+def add_RecommendationServiceServicer_to_server(servicer, server):
+ rpc_method_handlers = {
+ 'GetRecommendation': grpc.unary_unary_rpc_method_handler(
+ servicer.GetRecommendation,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_recommendation__service__pb2.GetRecommendationRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_resources_dot_recommendation__pb2.Recommendation.SerializeToString,
+ ),
+ 'ApplyRecommendation': grpc.unary_unary_rpc_method_handler(
+ servicer.ApplyRecommendation,
+ request_deserializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_recommendation__service__pb2.ApplyRecommendationRequest.FromString,
+ response_serializer=google_dot_ads_dot_googleads__v0_dot_proto_dot_services_dot_recommendation__service__pb2.ApplyRecommendationResponse.SerializeToString,
+ ),
+ }
+ generic_handler = grpc.method_handlers_generic_handler(
+ 'google.ads.googleads.v0.services.RecommendationService', rpc_method_handlers)
+ server.add_generic_rpc_handlers((generic_handler,))
diff --git a/google/ads/google_ads/v0/services/__init__.py b/google/ads/google_ads/v0/services/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/google/ads/google_ads/v0/services/ad_group_ad_service_client.py b/google/ads/google_ads/v0/services/ad_group_ad_service_client.py
new file mode 100644
index 000000000..d63e22d73
--- /dev/null
+++ b/google/ads/google_ads/v0/services/ad_group_ad_service_client.py
@@ -0,0 +1,279 @@
+# Copyright 2018 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.
+"""Accesses the google.ads.googleads.v0.services AdGroupAdService API."""
+
+import pkg_resources
+import warnings
+
+from google.oauth2 import service_account
+import google.api_core.gapic_v1.client_info
+import google.api_core.gapic_v1.config
+import google.api_core.gapic_v1.method
+import google.api_core.grpc_helpers
+import google.api_core.path_template
+
+from google.ads.google_ads.v0.services import ad_group_ad_service_client_config
+from google.ads.google_ads.v0.services.transports import ad_group_ad_service_grpc_transport
+from google.ads.google_ads.v0.proto.services import ad_group_ad_service_pb2
+
+_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution(
+ 'google-ads', ).version
+
+
+class AdGroupAdServiceClient(object):
+ """Service to manage ads in an ad group."""
+
+ SERVICE_ADDRESS = 'googleads.googleapis.com:443'
+ """The default address of the service."""
+
+ # The name of the interface for this client. This is the key used to
+ # find the method configuration in the client_config dictionary.
+ _INTERFACE_NAME = 'google.ads.googleads.v0.services.AdGroupAdService'
+
+ @classmethod
+ def from_service_account_file(cls, filename, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ AdGroupAdServiceClient: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_file(
+ filename)
+ kwargs['credentials'] = credentials
+ return cls(*args, **kwargs)
+
+ from_service_account_json = from_service_account_file
+
+ @classmethod
+ def ad_group_ad_path(cls, customer, ad_group_ad):
+ """Return a fully-qualified ad_group_ad string."""
+ return google.api_core.path_template.expand(
+ 'customers/{customer}/adGroupAds/{ad_group_ad}',
+ customer=customer,
+ ad_group_ad=ad_group_ad,
+ )
+
+ def __init__(self,
+ transport=None,
+ channel=None,
+ credentials=None,
+ client_config=ad_group_ad_service_client_config.config,
+ client_info=None):
+ """Constructor.
+
+ Args:
+ transport (Union[~.AdGroupAdServiceGrpcTransport,
+ Callable[[~.Credentials, type], ~.AdGroupAdServiceGrpcTransport]): A transport
+ instance, responsible for actually making the API calls.
+ The default transport uses the gRPC protocol.
+ This argument may also be a callable which returns a
+ transport instance. Callables will be sent the credentials
+ as the first argument and the default transport class as
+ the second argument.
+ channel (grpc.Channel): DEPRECATED. A ``Channel`` instance
+ through which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is mutually exclusive with providing a
+ transport instance to ``transport``; doing so will raise
+ an exception.
+ client_config (dict): DEPRECATED. A dictionary of call options for
+ each method. If not specified, the default configuration is used.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ """
+ # Raise deprecation warnings for things we want to go away.
+ if client_config:
+ warnings.warn('The `client_config` argument is deprecated.',
+ PendingDeprecationWarning)
+ if channel:
+ warnings.warn(
+ 'The `channel` argument is deprecated; use '
+ '`transport` instead.', PendingDeprecationWarning)
+
+ # Instantiate the transport.
+ # The transport is responsible for handling serialization and
+ # deserialization and actually sending data to the service.
+ if transport:
+ if callable(transport):
+ self.transport = transport(
+ credentials=credentials,
+ default_class=ad_group_ad_service_grpc_transport.
+ AdGroupAdServiceGrpcTransport,
+ )
+ else:
+ if credentials:
+ raise ValueError(
+ 'Received both a transport instance and '
+ 'credentials; these are mutually exclusive.')
+ self.transport = transport
+ else:
+ self.transport = ad_group_ad_service_grpc_transport.AdGroupAdServiceGrpcTransport(
+ address=self.SERVICE_ADDRESS,
+ channel=channel,
+ credentials=credentials,
+ )
+
+ if client_info is None:
+ client_info = (
+ google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO)
+ client_info.gapic_version = _GAPIC_LIBRARY_VERSION
+ self._client_info = client_info
+
+ # Parse out the default settings for retry and timeout for each RPC
+ # from the client configuration.
+ # (Ordinarily, these are the defaults specified in the `*_config.py`
+ # file next to this one.)
+ self._method_configs = google.api_core.gapic_v1.config.parse_method_configs(
+ client_config['interfaces'][self._INTERFACE_NAME], )
+
+ # Save a dictionary of cached API call functions.
+ # These are the actual callables which invoke the proper
+ # transport methods, wrapped with `wrap_method` to add retry,
+ # timeout, and the like.
+ self._inner_api_calls = {}
+
+ # Service calls
+ def get_ad_group_ad(self,
+ resource_name,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Returns the requested ad in full detail.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.AdGroupAdServiceClient()
+ >>>
+ >>> resource_name = client.ad_group_ad_path('[CUSTOMER]', '[AD_GROUP_AD]')
+ >>>
+ >>> response = client.get_ad_group_ad(resource_name)
+
+ Args:
+ resource_name (str): The resource name of the ad to fetch.
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.AdGroupAd` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'get_ad_group_ad' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'get_ad_group_ad'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.get_ad_group_ad,
+ default_retry=self._method_configs['GetAdGroupAd'].retry,
+ default_timeout=self._method_configs['GetAdGroupAd']
+ .timeout,
+ client_info=self._client_info,
+ )
+
+ request = ad_group_ad_service_pb2.GetAdGroupAdRequest(
+ resource_name=resource_name, )
+ return self._inner_api_calls['get_ad_group_ad'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
+
+ def mutate_ad_group_ads(self,
+ customer_id,
+ operations,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Creates, updates, or removes ads. Operation statuses are returned.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.AdGroupAdServiceClient()
+ >>>
+ >>> # TODO: Initialize ``customer_id``:
+ >>> customer_id = ''
+ >>>
+ >>> # TODO: Initialize ``operations``:
+ >>> operations = []
+ >>>
+ >>> response = client.mutate_ad_group_ads(customer_id, operations)
+
+ Args:
+ customer_id (str): The ID of the customer whose ads are being modified.
+ operations (list[Union[dict, ~google.cloud.ads.googleads_v0.types.AdGroupAdOperation]]): The list of operations to perform on individual ads.
+ If a dict is provided, it must be of the same form as the protobuf
+ message :class:`~google.cloud.ads.googleads_v0.types.AdGroupAdOperation`
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.MutateAdGroupAdsResponse` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'mutate_ad_group_ads' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'mutate_ad_group_ads'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.mutate_ad_group_ads,
+ default_retry=self._method_configs[
+ 'MutateAdGroupAds'].retry,
+ default_timeout=self._method_configs['MutateAdGroupAds']
+ .timeout,
+ client_info=self._client_info,
+ )
+
+ request = ad_group_ad_service_pb2.MutateAdGroupAdsRequest(
+ customer_id=customer_id,
+ operations=operations,
+ )
+ return self._inner_api_calls['mutate_ad_group_ads'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
diff --git a/google/ads/google_ads/v0/services/ad_group_ad_service_client_config.py b/google/ads/google_ads/v0/services/ad_group_ad_service_client_config.py
new file mode 100644
index 000000000..60f08cf38
--- /dev/null
+++ b/google/ads/google_ads/v0/services/ad_group_ad_service_client_config.py
@@ -0,0 +1,33 @@
+config = {
+ "interfaces": {
+ "google.ads.googleads.v0.services.AdGroupAdService": {
+ "retry_codes": {
+ "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetAdGroupAd": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "MutateAdGroupAds": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/google/ads/google_ads/v0/services/ad_group_bid_modifier_service_client.py b/google/ads/google_ads/v0/services/ad_group_bid_modifier_service_client.py
new file mode 100644
index 000000000..fa0b09afa
--- /dev/null
+++ b/google/ads/google_ads/v0/services/ad_group_bid_modifier_service_client.py
@@ -0,0 +1,284 @@
+# Copyright 2018 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.
+"""Accesses the google.ads.googleads.v0.services AdGroupBidModifierService API."""
+
+import pkg_resources
+import warnings
+
+from google.oauth2 import service_account
+import google.api_core.gapic_v1.client_info
+import google.api_core.gapic_v1.config
+import google.api_core.gapic_v1.method
+import google.api_core.grpc_helpers
+import google.api_core.path_template
+
+from google.ads.google_ads.v0.services import ad_group_bid_modifier_service_client_config
+from google.ads.google_ads.v0.services.transports import ad_group_bid_modifier_service_grpc_transport
+from google.ads.google_ads.v0.proto.services import ad_group_bid_modifier_service_pb2
+
+_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution(
+ 'google-ads', ).version
+
+
+class AdGroupBidModifierServiceClient(object):
+ """Service to manage ad group bid modifiers."""
+
+ SERVICE_ADDRESS = 'googleads.googleapis.com:443'
+ """The default address of the service."""
+
+ # The name of the interface for this client. This is the key used to
+ # find the method configuration in the client_config dictionary.
+ _INTERFACE_NAME = 'google.ads.googleads.v0.services.AdGroupBidModifierService'
+
+ @classmethod
+ def from_service_account_file(cls, filename, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ AdGroupBidModifierServiceClient: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_file(
+ filename)
+ kwargs['credentials'] = credentials
+ return cls(*args, **kwargs)
+
+ from_service_account_json = from_service_account_file
+
+ @classmethod
+ def ad_group_bid_modifier_path(cls, customer, ad_group_bid_modifier):
+ """Return a fully-qualified ad_group_bid_modifier string."""
+ return google.api_core.path_template.expand(
+ 'customers/{customer}/adGroupBidModifiers/{ad_group_bid_modifier}',
+ customer=customer,
+ ad_group_bid_modifier=ad_group_bid_modifier,
+ )
+
+ def __init__(
+ self,
+ transport=None,
+ channel=None,
+ credentials=None,
+ client_config=ad_group_bid_modifier_service_client_config.config,
+ client_info=None):
+ """Constructor.
+
+ Args:
+ transport (Union[~.AdGroupBidModifierServiceGrpcTransport,
+ Callable[[~.Credentials, type], ~.AdGroupBidModifierServiceGrpcTransport]): A transport
+ instance, responsible for actually making the API calls.
+ The default transport uses the gRPC protocol.
+ This argument may also be a callable which returns a
+ transport instance. Callables will be sent the credentials
+ as the first argument and the default transport class as
+ the second argument.
+ channel (grpc.Channel): DEPRECATED. A ``Channel`` instance
+ through which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is mutually exclusive with providing a
+ transport instance to ``transport``; doing so will raise
+ an exception.
+ client_config (dict): DEPRECATED. A dictionary of call options for
+ each method. If not specified, the default configuration is used.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ """
+ # Raise deprecation warnings for things we want to go away.
+ if client_config:
+ warnings.warn('The `client_config` argument is deprecated.',
+ PendingDeprecationWarning)
+ if channel:
+ warnings.warn(
+ 'The `channel` argument is deprecated; use '
+ '`transport` instead.', PendingDeprecationWarning)
+
+ # Instantiate the transport.
+ # The transport is responsible for handling serialization and
+ # deserialization and actually sending data to the service.
+ if transport:
+ if callable(transport):
+ self.transport = transport(
+ credentials=credentials,
+ default_class=ad_group_bid_modifier_service_grpc_transport.
+ AdGroupBidModifierServiceGrpcTransport,
+ )
+ else:
+ if credentials:
+ raise ValueError(
+ 'Received both a transport instance and '
+ 'credentials; these are mutually exclusive.')
+ self.transport = transport
+ else:
+ self.transport = ad_group_bid_modifier_service_grpc_transport.AdGroupBidModifierServiceGrpcTransport(
+ address=self.SERVICE_ADDRESS,
+ channel=channel,
+ credentials=credentials,
+ )
+
+ if client_info is None:
+ client_info = (
+ google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO)
+ client_info.gapic_version = _GAPIC_LIBRARY_VERSION
+ self._client_info = client_info
+
+ # Parse out the default settings for retry and timeout for each RPC
+ # from the client configuration.
+ # (Ordinarily, these are the defaults specified in the `*_config.py`
+ # file next to this one.)
+ self._method_configs = google.api_core.gapic_v1.config.parse_method_configs(
+ client_config['interfaces'][self._INTERFACE_NAME], )
+
+ # Save a dictionary of cached API call functions.
+ # These are the actual callables which invoke the proper
+ # transport methods, wrapped with `wrap_method` to add retry,
+ # timeout, and the like.
+ self._inner_api_calls = {}
+
+ # Service calls
+ def get_ad_group_bid_modifier(
+ self,
+ resource_name,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Returns the requested ad group bid modifier in full detail.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.AdGroupBidModifierServiceClient()
+ >>>
+ >>> resource_name = client.ad_group_bid_modifier_path('[CUSTOMER]', '[AD_GROUP_BID_MODIFIER]')
+ >>>
+ >>> response = client.get_ad_group_bid_modifier(resource_name)
+
+ Args:
+ resource_name (str): The resource name of the ad group bid modifier to fetch.
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.AdGroupBidModifier` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'get_ad_group_bid_modifier' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'get_ad_group_bid_modifier'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.get_ad_group_bid_modifier,
+ default_retry=self._method_configs['GetAdGroupBidModifier']
+ .retry,
+ default_timeout=self._method_configs[
+ 'GetAdGroupBidModifier'].timeout,
+ client_info=self._client_info,
+ )
+
+ request = ad_group_bid_modifier_service_pb2.GetAdGroupBidModifierRequest(
+ resource_name=resource_name, )
+ return self._inner_api_calls['get_ad_group_bid_modifier'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
+
+ def mutate_ad_group_bid_modifiers(
+ self,
+ customer_id,
+ operations,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Creates, updates, or removes ad group bid modifiers.
+ Operation statuses are returned.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.AdGroupBidModifierServiceClient()
+ >>>
+ >>> # TODO: Initialize ``customer_id``:
+ >>> customer_id = ''
+ >>>
+ >>> # TODO: Initialize ``operations``:
+ >>> operations = []
+ >>>
+ >>> response = client.mutate_ad_group_bid_modifiers(customer_id, operations)
+
+ Args:
+ customer_id (str): ID of the customer whose ad group bid modifiers are being modified.
+ operations (list[Union[dict, ~google.cloud.ads.googleads_v0.types.AdGroupBidModifierOperation]]): The list of operations to perform on individual ad group bid modifiers.
+ If a dict is provided, it must be of the same form as the protobuf
+ message :class:`~google.cloud.ads.googleads_v0.types.AdGroupBidModifierOperation`
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.MutateAdGroupBidModifiersResponse` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'mutate_ad_group_bid_modifiers' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'mutate_ad_group_bid_modifiers'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.mutate_ad_group_bid_modifiers,
+ default_retry=self._method_configs[
+ 'MutateAdGroupBidModifiers'].retry,
+ default_timeout=self._method_configs[
+ 'MutateAdGroupBidModifiers'].timeout,
+ client_info=self._client_info,
+ )
+
+ request = ad_group_bid_modifier_service_pb2.MutateAdGroupBidModifiersRequest(
+ customer_id=customer_id,
+ operations=operations,
+ )
+ return self._inner_api_calls['mutate_ad_group_bid_modifiers'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
diff --git a/google/ads/google_ads/v0/services/ad_group_bid_modifier_service_client_config.py b/google/ads/google_ads/v0/services/ad_group_bid_modifier_service_client_config.py
new file mode 100644
index 000000000..03b2b73f5
--- /dev/null
+++ b/google/ads/google_ads/v0/services/ad_group_bid_modifier_service_client_config.py
@@ -0,0 +1,33 @@
+config = {
+ "interfaces": {
+ "google.ads.googleads.v0.services.AdGroupBidModifierService": {
+ "retry_codes": {
+ "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetAdGroupBidModifier": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "MutateAdGroupBidModifiers": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/google/ads/google_ads/v0/services/ad_group_criterion_service_client.py b/google/ads/google_ads/v0/services/ad_group_criterion_service_client.py
new file mode 100644
index 000000000..f56746f16
--- /dev/null
+++ b/google/ads/google_ads/v0/services/ad_group_criterion_service_client.py
@@ -0,0 +1,281 @@
+# Copyright 2018 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.
+"""Accesses the google.ads.googleads.v0.services AdGroupCriterionService API."""
+
+import pkg_resources
+import warnings
+
+from google.oauth2 import service_account
+import google.api_core.gapic_v1.client_info
+import google.api_core.gapic_v1.config
+import google.api_core.gapic_v1.method
+import google.api_core.grpc_helpers
+import google.api_core.path_template
+
+from google.ads.google_ads.v0.services import ad_group_criterion_service_client_config
+from google.ads.google_ads.v0.services.transports import ad_group_criterion_service_grpc_transport
+from google.ads.google_ads.v0.proto.services import ad_group_criterion_service_pb2
+
+_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution(
+ 'google-ads', ).version
+
+
+class AdGroupCriterionServiceClient(object):
+ """Service to manage ad group criteria."""
+
+ SERVICE_ADDRESS = 'googleads.googleapis.com:443'
+ """The default address of the service."""
+
+ # The name of the interface for this client. This is the key used to
+ # find the method configuration in the client_config dictionary.
+ _INTERFACE_NAME = 'google.ads.googleads.v0.services.AdGroupCriterionService'
+
+ @classmethod
+ def from_service_account_file(cls, filename, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ AdGroupCriterionServiceClient: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_file(
+ filename)
+ kwargs['credentials'] = credentials
+ return cls(*args, **kwargs)
+
+ from_service_account_json = from_service_account_file
+
+ @classmethod
+ def ad_group_criteria_path(cls, customer, ad_group_criteria):
+ """Return a fully-qualified ad_group_criteria string."""
+ return google.api_core.path_template.expand(
+ 'customers/{customer}/adGroupCriteria/{ad_group_criteria}',
+ customer=customer,
+ ad_group_criteria=ad_group_criteria,
+ )
+
+ def __init__(self,
+ transport=None,
+ channel=None,
+ credentials=None,
+ client_config=ad_group_criterion_service_client_config.config,
+ client_info=None):
+ """Constructor.
+
+ Args:
+ transport (Union[~.AdGroupCriterionServiceGrpcTransport,
+ Callable[[~.Credentials, type], ~.AdGroupCriterionServiceGrpcTransport]): A transport
+ instance, responsible for actually making the API calls.
+ The default transport uses the gRPC protocol.
+ This argument may also be a callable which returns a
+ transport instance. Callables will be sent the credentials
+ as the first argument and the default transport class as
+ the second argument.
+ channel (grpc.Channel): DEPRECATED. A ``Channel`` instance
+ through which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is mutually exclusive with providing a
+ transport instance to ``transport``; doing so will raise
+ an exception.
+ client_config (dict): DEPRECATED. A dictionary of call options for
+ each method. If not specified, the default configuration is used.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ """
+ # Raise deprecation warnings for things we want to go away.
+ if client_config:
+ warnings.warn('The `client_config` argument is deprecated.',
+ PendingDeprecationWarning)
+ if channel:
+ warnings.warn(
+ 'The `channel` argument is deprecated; use '
+ '`transport` instead.', PendingDeprecationWarning)
+
+ # Instantiate the transport.
+ # The transport is responsible for handling serialization and
+ # deserialization and actually sending data to the service.
+ if transport:
+ if callable(transport):
+ self.transport = transport(
+ credentials=credentials,
+ default_class=ad_group_criterion_service_grpc_transport.
+ AdGroupCriterionServiceGrpcTransport,
+ )
+ else:
+ if credentials:
+ raise ValueError(
+ 'Received both a transport instance and '
+ 'credentials; these are mutually exclusive.')
+ self.transport = transport
+ else:
+ self.transport = ad_group_criterion_service_grpc_transport.AdGroupCriterionServiceGrpcTransport(
+ address=self.SERVICE_ADDRESS,
+ channel=channel,
+ credentials=credentials,
+ )
+
+ if client_info is None:
+ client_info = (
+ google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO)
+ client_info.gapic_version = _GAPIC_LIBRARY_VERSION
+ self._client_info = client_info
+
+ # Parse out the default settings for retry and timeout for each RPC
+ # from the client configuration.
+ # (Ordinarily, these are the defaults specified in the `*_config.py`
+ # file next to this one.)
+ self._method_configs = google.api_core.gapic_v1.config.parse_method_configs(
+ client_config['interfaces'][self._INTERFACE_NAME], )
+
+ # Save a dictionary of cached API call functions.
+ # These are the actual callables which invoke the proper
+ # transport methods, wrapped with `wrap_method` to add retry,
+ # timeout, and the like.
+ self._inner_api_calls = {}
+
+ # Service calls
+ def get_ad_group_criterion(self,
+ resource_name,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Returns the requested criterion in full detail.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.AdGroupCriterionServiceClient()
+ >>>
+ >>> resource_name = client.ad_group_criteria_path('[CUSTOMER]', '[AD_GROUP_CRITERIA]')
+ >>>
+ >>> response = client.get_ad_group_criterion(resource_name)
+
+ Args:
+ resource_name (str): The resource name of the criterion to fetch.
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.AdGroupCriterion` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'get_ad_group_criterion' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'get_ad_group_criterion'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.get_ad_group_criterion,
+ default_retry=self._method_configs[
+ 'GetAdGroupCriterion'].retry,
+ default_timeout=self._method_configs['GetAdGroupCriterion']
+ .timeout,
+ client_info=self._client_info,
+ )
+
+ request = ad_group_criterion_service_pb2.GetAdGroupCriterionRequest(
+ resource_name=resource_name, )
+ return self._inner_api_calls['get_ad_group_criterion'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
+
+ def mutate_ad_group_criteria(
+ self,
+ customer_id,
+ operations,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Creates, updates, or removes criteria. Operation statuses are returned.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.AdGroupCriterionServiceClient()
+ >>>
+ >>> # TODO: Initialize ``customer_id``:
+ >>> customer_id = ''
+ >>>
+ >>> # TODO: Initialize ``operations``:
+ >>> operations = []
+ >>>
+ >>> response = client.mutate_ad_group_criteria(customer_id, operations)
+
+ Args:
+ customer_id (str): ID of the customer whose criteria are being modified.
+ operations (list[Union[dict, ~google.cloud.ads.googleads_v0.types.AdGroupCriterionOperation]]): The list of operations to perform on individual criteria.
+ If a dict is provided, it must be of the same form as the protobuf
+ message :class:`~google.cloud.ads.googleads_v0.types.AdGroupCriterionOperation`
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.MutateAdGroupCriteriaResponse` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'mutate_ad_group_criteria' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'mutate_ad_group_criteria'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.mutate_ad_group_criteria,
+ default_retry=self._method_configs['MutateAdGroupCriteria']
+ .retry,
+ default_timeout=self._method_configs[
+ 'MutateAdGroupCriteria'].timeout,
+ client_info=self._client_info,
+ )
+
+ request = ad_group_criterion_service_pb2.MutateAdGroupCriteriaRequest(
+ customer_id=customer_id,
+ operations=operations,
+ )
+ return self._inner_api_calls['mutate_ad_group_criteria'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
diff --git a/google/ads/google_ads/v0/services/ad_group_criterion_service_client_config.py b/google/ads/google_ads/v0/services/ad_group_criterion_service_client_config.py
new file mode 100644
index 000000000..d2fa41dc1
--- /dev/null
+++ b/google/ads/google_ads/v0/services/ad_group_criterion_service_client_config.py
@@ -0,0 +1,33 @@
+config = {
+ "interfaces": {
+ "google.ads.googleads.v0.services.AdGroupCriterionService": {
+ "retry_codes": {
+ "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetAdGroupCriterion": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "MutateAdGroupCriteria": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/google/ads/google_ads/v0/services/ad_group_service_client.py b/google/ads/google_ads/v0/services/ad_group_service_client.py
new file mode 100644
index 000000000..3aef77f01
--- /dev/null
+++ b/google/ads/google_ads/v0/services/ad_group_service_client.py
@@ -0,0 +1,277 @@
+# Copyright 2018 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.
+"""Accesses the google.ads.googleads.v0.services AdGroupService API."""
+
+import pkg_resources
+import warnings
+
+from google.oauth2 import service_account
+import google.api_core.gapic_v1.client_info
+import google.api_core.gapic_v1.config
+import google.api_core.gapic_v1.method
+import google.api_core.grpc_helpers
+import google.api_core.path_template
+
+from google.ads.google_ads.v0.services import ad_group_service_client_config
+from google.ads.google_ads.v0.services.transports import ad_group_service_grpc_transport
+from google.ads.google_ads.v0.proto.services import ad_group_service_pb2
+
+_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution(
+ 'google-ads', ).version
+
+
+class AdGroupServiceClient(object):
+ """Service to manage ad groups."""
+
+ SERVICE_ADDRESS = 'googleads.googleapis.com:443'
+ """The default address of the service."""
+
+ # The name of the interface for this client. This is the key used to
+ # find the method configuration in the client_config dictionary.
+ _INTERFACE_NAME = 'google.ads.googleads.v0.services.AdGroupService'
+
+ @classmethod
+ def from_service_account_file(cls, filename, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ AdGroupServiceClient: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_file(
+ filename)
+ kwargs['credentials'] = credentials
+ return cls(*args, **kwargs)
+
+ from_service_account_json = from_service_account_file
+
+ @classmethod
+ def ad_group_path(cls, customer, ad_group):
+ """Return a fully-qualified ad_group string."""
+ return google.api_core.path_template.expand(
+ 'customers/{customer}/adGroups/{ad_group}',
+ customer=customer,
+ ad_group=ad_group,
+ )
+
+ def __init__(self,
+ transport=None,
+ channel=None,
+ credentials=None,
+ client_config=ad_group_service_client_config.config,
+ client_info=None):
+ """Constructor.
+
+ Args:
+ transport (Union[~.AdGroupServiceGrpcTransport,
+ Callable[[~.Credentials, type], ~.AdGroupServiceGrpcTransport]): A transport
+ instance, responsible for actually making the API calls.
+ The default transport uses the gRPC protocol.
+ This argument may also be a callable which returns a
+ transport instance. Callables will be sent the credentials
+ as the first argument and the default transport class as
+ the second argument.
+ channel (grpc.Channel): DEPRECATED. A ``Channel`` instance
+ through which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is mutually exclusive with providing a
+ transport instance to ``transport``; doing so will raise
+ an exception.
+ client_config (dict): DEPRECATED. A dictionary of call options for
+ each method. If not specified, the default configuration is used.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ """
+ # Raise deprecation warnings for things we want to go away.
+ if client_config:
+ warnings.warn('The `client_config` argument is deprecated.',
+ PendingDeprecationWarning)
+ if channel:
+ warnings.warn(
+ 'The `channel` argument is deprecated; use '
+ '`transport` instead.', PendingDeprecationWarning)
+
+ # Instantiate the transport.
+ # The transport is responsible for handling serialization and
+ # deserialization and actually sending data to the service.
+ if transport:
+ if callable(transport):
+ self.transport = transport(
+ credentials=credentials,
+ default_class=ad_group_service_grpc_transport.
+ AdGroupServiceGrpcTransport,
+ )
+ else:
+ if credentials:
+ raise ValueError(
+ 'Received both a transport instance and '
+ 'credentials; these are mutually exclusive.')
+ self.transport = transport
+ else:
+ self.transport = ad_group_service_grpc_transport.AdGroupServiceGrpcTransport(
+ address=self.SERVICE_ADDRESS,
+ channel=channel,
+ credentials=credentials,
+ )
+
+ if client_info is None:
+ client_info = (
+ google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO)
+ client_info.gapic_version = _GAPIC_LIBRARY_VERSION
+ self._client_info = client_info
+
+ # Parse out the default settings for retry and timeout for each RPC
+ # from the client configuration.
+ # (Ordinarily, these are the defaults specified in the `*_config.py`
+ # file next to this one.)
+ self._method_configs = google.api_core.gapic_v1.config.parse_method_configs(
+ client_config['interfaces'][self._INTERFACE_NAME], )
+
+ # Save a dictionary of cached API call functions.
+ # These are the actual callables which invoke the proper
+ # transport methods, wrapped with `wrap_method` to add retry,
+ # timeout, and the like.
+ self._inner_api_calls = {}
+
+ # Service calls
+ def get_ad_group(self,
+ resource_name,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Returns the requested ad group in full detail.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.AdGroupServiceClient()
+ >>>
+ >>> resource_name = client.ad_group_path('[CUSTOMER]', '[AD_GROUP]')
+ >>>
+ >>> response = client.get_ad_group(resource_name)
+
+ Args:
+ resource_name (str): The resource name of the ad group to fetch.
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.AdGroup` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'get_ad_group' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'get_ad_group'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.get_ad_group,
+ default_retry=self._method_configs['GetAdGroup'].retry,
+ default_timeout=self._method_configs['GetAdGroup'].timeout,
+ client_info=self._client_info,
+ )
+
+ request = ad_group_service_pb2.GetAdGroupRequest(
+ resource_name=resource_name, )
+ return self._inner_api_calls['get_ad_group'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
+
+ def mutate_ad_groups(self,
+ customer_id,
+ operations,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Creates, updates, or removes ad groups. Operation statuses are returned.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.AdGroupServiceClient()
+ >>>
+ >>> # TODO: Initialize ``customer_id``:
+ >>> customer_id = ''
+ >>>
+ >>> # TODO: Initialize ``operations``:
+ >>> operations = []
+ >>>
+ >>> response = client.mutate_ad_groups(customer_id, operations)
+
+ Args:
+ customer_id (str): The ID of the customer whose ad groups are being modified.
+ operations (list[Union[dict, ~google.cloud.ads.googleads_v0.types.AdGroupOperation]]): The list of operations to perform on individual ad groups.
+ If a dict is provided, it must be of the same form as the protobuf
+ message :class:`~google.cloud.ads.googleads_v0.types.AdGroupOperation`
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.MutateAdGroupsResponse` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'mutate_ad_groups' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'mutate_ad_groups'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.mutate_ad_groups,
+ default_retry=self._method_configs['MutateAdGroups'].retry,
+ default_timeout=self._method_configs['MutateAdGroups']
+ .timeout,
+ client_info=self._client_info,
+ )
+
+ request = ad_group_service_pb2.MutateAdGroupsRequest(
+ customer_id=customer_id,
+ operations=operations,
+ )
+ return self._inner_api_calls['mutate_ad_groups'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
diff --git a/google/ads/google_ads/v0/services/ad_group_service_client_config.py b/google/ads/google_ads/v0/services/ad_group_service_client_config.py
new file mode 100644
index 000000000..c2f718283
--- /dev/null
+++ b/google/ads/google_ads/v0/services/ad_group_service_client_config.py
@@ -0,0 +1,33 @@
+config = {
+ "interfaces": {
+ "google.ads.googleads.v0.services.AdGroupService": {
+ "retry_codes": {
+ "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetAdGroup": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "MutateAdGroups": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/google/ads/google_ads/v0/services/bidding_strategy_service_client.py b/google/ads/google_ads/v0/services/bidding_strategy_service_client.py
new file mode 100644
index 000000000..fcbdc9eaf
--- /dev/null
+++ b/google/ads/google_ads/v0/services/bidding_strategy_service_client.py
@@ -0,0 +1,282 @@
+# Copyright 2018 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.
+"""Accesses the google.ads.googleads.v0.services BiddingStrategyService API."""
+
+import pkg_resources
+import warnings
+
+from google.oauth2 import service_account
+import google.api_core.gapic_v1.client_info
+import google.api_core.gapic_v1.config
+import google.api_core.gapic_v1.method
+import google.api_core.grpc_helpers
+import google.api_core.path_template
+
+from google.ads.google_ads.v0.services import bidding_strategy_service_client_config
+from google.ads.google_ads.v0.services.transports import bidding_strategy_service_grpc_transport
+from google.ads.google_ads.v0.proto.services import bidding_strategy_service_pb2
+
+_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution(
+ 'google-ads', ).version
+
+
+class BiddingStrategyServiceClient(object):
+ """Service to manage bidding strategies."""
+
+ SERVICE_ADDRESS = 'googleads.googleapis.com:443'
+ """The default address of the service."""
+
+ # The name of the interface for this client. This is the key used to
+ # find the method configuration in the client_config dictionary.
+ _INTERFACE_NAME = 'google.ads.googleads.v0.services.BiddingStrategyService'
+
+ @classmethod
+ def from_service_account_file(cls, filename, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ BiddingStrategyServiceClient: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_file(
+ filename)
+ kwargs['credentials'] = credentials
+ return cls(*args, **kwargs)
+
+ from_service_account_json = from_service_account_file
+
+ @classmethod
+ def bidding_strategy_path(cls, customer, bidding_strategy):
+ """Return a fully-qualified bidding_strategy string."""
+ return google.api_core.path_template.expand(
+ 'customers/{customer}/biddingStrategies/{bidding_strategy}',
+ customer=customer,
+ bidding_strategy=bidding_strategy,
+ )
+
+ def __init__(self,
+ transport=None,
+ channel=None,
+ credentials=None,
+ client_config=bidding_strategy_service_client_config.config,
+ client_info=None):
+ """Constructor.
+
+ Args:
+ transport (Union[~.BiddingStrategyServiceGrpcTransport,
+ Callable[[~.Credentials, type], ~.BiddingStrategyServiceGrpcTransport]): A transport
+ instance, responsible for actually making the API calls.
+ The default transport uses the gRPC protocol.
+ This argument may also be a callable which returns a
+ transport instance. Callables will be sent the credentials
+ as the first argument and the default transport class as
+ the second argument.
+ channel (grpc.Channel): DEPRECATED. A ``Channel`` instance
+ through which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is mutually exclusive with providing a
+ transport instance to ``transport``; doing so will raise
+ an exception.
+ client_config (dict): DEPRECATED. A dictionary of call options for
+ each method. If not specified, the default configuration is used.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ """
+ # Raise deprecation warnings for things we want to go away.
+ if client_config:
+ warnings.warn('The `client_config` argument is deprecated.',
+ PendingDeprecationWarning)
+ if channel:
+ warnings.warn(
+ 'The `channel` argument is deprecated; use '
+ '`transport` instead.', PendingDeprecationWarning)
+
+ # Instantiate the transport.
+ # The transport is responsible for handling serialization and
+ # deserialization and actually sending data to the service.
+ if transport:
+ if callable(transport):
+ self.transport = transport(
+ credentials=credentials,
+ default_class=bidding_strategy_service_grpc_transport.
+ BiddingStrategyServiceGrpcTransport,
+ )
+ else:
+ if credentials:
+ raise ValueError(
+ 'Received both a transport instance and '
+ 'credentials; these are mutually exclusive.')
+ self.transport = transport
+ else:
+ self.transport = bidding_strategy_service_grpc_transport.BiddingStrategyServiceGrpcTransport(
+ address=self.SERVICE_ADDRESS,
+ channel=channel,
+ credentials=credentials,
+ )
+
+ if client_info is None:
+ client_info = (
+ google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO)
+ client_info.gapic_version = _GAPIC_LIBRARY_VERSION
+ self._client_info = client_info
+
+ # Parse out the default settings for retry and timeout for each RPC
+ # from the client configuration.
+ # (Ordinarily, these are the defaults specified in the `*_config.py`
+ # file next to this one.)
+ self._method_configs = google.api_core.gapic_v1.config.parse_method_configs(
+ client_config['interfaces'][self._INTERFACE_NAME], )
+
+ # Save a dictionary of cached API call functions.
+ # These are the actual callables which invoke the proper
+ # transport methods, wrapped with `wrap_method` to add retry,
+ # timeout, and the like.
+ self._inner_api_calls = {}
+
+ # Service calls
+ def get_bidding_strategy(self,
+ resource_name,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Returns the requested bidding strategy in full detail.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.BiddingStrategyServiceClient()
+ >>>
+ >>> resource_name = client.bidding_strategy_path('[CUSTOMER]', '[BIDDING_STRATEGY]')
+ >>>
+ >>> response = client.get_bidding_strategy(resource_name)
+
+ Args:
+ resource_name (str): The resource name of the bidding strategy to fetch.
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.BiddingStrategy` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'get_bidding_strategy' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'get_bidding_strategy'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.get_bidding_strategy,
+ default_retry=self._method_configs[
+ 'GetBiddingStrategy'].retry,
+ default_timeout=self._method_configs['GetBiddingStrategy']
+ .timeout,
+ client_info=self._client_info,
+ )
+
+ request = bidding_strategy_service_pb2.GetBiddingStrategyRequest(
+ resource_name=resource_name, )
+ return self._inner_api_calls['get_bidding_strategy'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
+
+ def mutate_bidding_strategies(
+ self,
+ customer_id,
+ operations,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Creates, updates, or removes bidding strategies. Operation statuses are
+ returned.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.BiddingStrategyServiceClient()
+ >>>
+ >>> # TODO: Initialize ``customer_id``:
+ >>> customer_id = ''
+ >>>
+ >>> # TODO: Initialize ``operations``:
+ >>> operations = []
+ >>>
+ >>> response = client.mutate_bidding_strategies(customer_id, operations)
+
+ Args:
+ customer_id (str): The ID of the customer whose bidding strategies are being modified.
+ operations (list[Union[dict, ~google.cloud.ads.googleads_v0.types.BiddingStrategyOperation]]): The list of operations to perform on individual bidding strategies.
+ If a dict is provided, it must be of the same form as the protobuf
+ message :class:`~google.cloud.ads.googleads_v0.types.BiddingStrategyOperation`
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.MutateBiddingStrategiesResponse` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'mutate_bidding_strategies' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'mutate_bidding_strategies'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.mutate_bidding_strategies,
+ default_retry=self._method_configs[
+ 'MutateBiddingStrategies'].retry,
+ default_timeout=self._method_configs[
+ 'MutateBiddingStrategies'].timeout,
+ client_info=self._client_info,
+ )
+
+ request = bidding_strategy_service_pb2.MutateBiddingStrategiesRequest(
+ customer_id=customer_id,
+ operations=operations,
+ )
+ return self._inner_api_calls['mutate_bidding_strategies'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
diff --git a/google/ads/google_ads/v0/services/bidding_strategy_service_client_config.py b/google/ads/google_ads/v0/services/bidding_strategy_service_client_config.py
new file mode 100644
index 000000000..6d558b9bb
--- /dev/null
+++ b/google/ads/google_ads/v0/services/bidding_strategy_service_client_config.py
@@ -0,0 +1,33 @@
+config = {
+ "interfaces": {
+ "google.ads.googleads.v0.services.BiddingStrategyService": {
+ "retry_codes": {
+ "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetBiddingStrategy": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "MutateBiddingStrategies": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/google/ads/google_ads/v0/services/campaign_budget_service_client.py b/google/ads/google_ads/v0/services/campaign_budget_service_client.py
new file mode 100644
index 000000000..7542149c1
--- /dev/null
+++ b/google/ads/google_ads/v0/services/campaign_budget_service_client.py
@@ -0,0 +1,282 @@
+# Copyright 2018 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.
+"""Accesses the google.ads.googleads.v0.services CampaignBudgetService API."""
+
+import pkg_resources
+import warnings
+
+from google.oauth2 import service_account
+import google.api_core.gapic_v1.client_info
+import google.api_core.gapic_v1.config
+import google.api_core.gapic_v1.method
+import google.api_core.grpc_helpers
+import google.api_core.path_template
+
+from google.ads.google_ads.v0.services import campaign_budget_service_client_config
+from google.ads.google_ads.v0.services.transports import campaign_budget_service_grpc_transport
+from google.ads.google_ads.v0.proto.services import campaign_budget_service_pb2
+
+_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution(
+ 'google-ads', ).version
+
+
+class CampaignBudgetServiceClient(object):
+ """Service to manage campaign budgets."""
+
+ SERVICE_ADDRESS = 'googleads.googleapis.com:443'
+ """The default address of the service."""
+
+ # The name of the interface for this client. This is the key used to
+ # find the method configuration in the client_config dictionary.
+ _INTERFACE_NAME = 'google.ads.googleads.v0.services.CampaignBudgetService'
+
+ @classmethod
+ def from_service_account_file(cls, filename, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ CampaignBudgetServiceClient: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_file(
+ filename)
+ kwargs['credentials'] = credentials
+ return cls(*args, **kwargs)
+
+ from_service_account_json = from_service_account_file
+
+ @classmethod
+ def campaign_budget_path(cls, customer, campaign_budget):
+ """Return a fully-qualified campaign_budget string."""
+ return google.api_core.path_template.expand(
+ 'customers/{customer}/campaignBudgets/{campaign_budget}',
+ customer=customer,
+ campaign_budget=campaign_budget,
+ )
+
+ def __init__(self,
+ transport=None,
+ channel=None,
+ credentials=None,
+ client_config=campaign_budget_service_client_config.config,
+ client_info=None):
+ """Constructor.
+
+ Args:
+ transport (Union[~.CampaignBudgetServiceGrpcTransport,
+ Callable[[~.Credentials, type], ~.CampaignBudgetServiceGrpcTransport]): A transport
+ instance, responsible for actually making the API calls.
+ The default transport uses the gRPC protocol.
+ This argument may also be a callable which returns a
+ transport instance. Callables will be sent the credentials
+ as the first argument and the default transport class as
+ the second argument.
+ channel (grpc.Channel): DEPRECATED. A ``Channel`` instance
+ through which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is mutually exclusive with providing a
+ transport instance to ``transport``; doing so will raise
+ an exception.
+ client_config (dict): DEPRECATED. A dictionary of call options for
+ each method. If not specified, the default configuration is used.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ """
+ # Raise deprecation warnings for things we want to go away.
+ if client_config:
+ warnings.warn('The `client_config` argument is deprecated.',
+ PendingDeprecationWarning)
+ if channel:
+ warnings.warn(
+ 'The `channel` argument is deprecated; use '
+ '`transport` instead.', PendingDeprecationWarning)
+
+ # Instantiate the transport.
+ # The transport is responsible for handling serialization and
+ # deserialization and actually sending data to the service.
+ if transport:
+ if callable(transport):
+ self.transport = transport(
+ credentials=credentials,
+ default_class=campaign_budget_service_grpc_transport.
+ CampaignBudgetServiceGrpcTransport,
+ )
+ else:
+ if credentials:
+ raise ValueError(
+ 'Received both a transport instance and '
+ 'credentials; these are mutually exclusive.')
+ self.transport = transport
+ else:
+ self.transport = campaign_budget_service_grpc_transport.CampaignBudgetServiceGrpcTransport(
+ address=self.SERVICE_ADDRESS,
+ channel=channel,
+ credentials=credentials,
+ )
+
+ if client_info is None:
+ client_info = (
+ google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO)
+ client_info.gapic_version = _GAPIC_LIBRARY_VERSION
+ self._client_info = client_info
+
+ # Parse out the default settings for retry and timeout for each RPC
+ # from the client configuration.
+ # (Ordinarily, these are the defaults specified in the `*_config.py`
+ # file next to this one.)
+ self._method_configs = google.api_core.gapic_v1.config.parse_method_configs(
+ client_config['interfaces'][self._INTERFACE_NAME], )
+
+ # Save a dictionary of cached API call functions.
+ # These are the actual callables which invoke the proper
+ # transport methods, wrapped with `wrap_method` to add retry,
+ # timeout, and the like.
+ self._inner_api_calls = {}
+
+ # Service calls
+ def get_campaign_budget(self,
+ resource_name,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Returns the requested Campaign Budget in full detail.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.CampaignBudgetServiceClient()
+ >>>
+ >>> resource_name = client.campaign_budget_path('[CUSTOMER]', '[CAMPAIGN_BUDGET]')
+ >>>
+ >>> response = client.get_campaign_budget(resource_name)
+
+ Args:
+ resource_name (str): The resource name of the campaign budget to fetch.
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.CampaignBudget` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'get_campaign_budget' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'get_campaign_budget'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.get_campaign_budget,
+ default_retry=self._method_configs[
+ 'GetCampaignBudget'].retry,
+ default_timeout=self._method_configs['GetCampaignBudget']
+ .timeout,
+ client_info=self._client_info,
+ )
+
+ request = campaign_budget_service_pb2.GetCampaignBudgetRequest(
+ resource_name=resource_name, )
+ return self._inner_api_calls['get_campaign_budget'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
+
+ def mutate_campaign_budgets(
+ self,
+ customer_id,
+ operations,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Creates, updates, or removes campaign budgets. Operation statuses are
+ returned.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.CampaignBudgetServiceClient()
+ >>>
+ >>> # TODO: Initialize ``customer_id``:
+ >>> customer_id = ''
+ >>>
+ >>> # TODO: Initialize ``operations``:
+ >>> operations = []
+ >>>
+ >>> response = client.mutate_campaign_budgets(customer_id, operations)
+
+ Args:
+ customer_id (str): The ID of the customer whose campaign budgets are being modified.
+ operations (list[Union[dict, ~google.cloud.ads.googleads_v0.types.CampaignBudgetOperation]]): The list of operations to perform on individual campaign budgets.
+ If a dict is provided, it must be of the same form as the protobuf
+ message :class:`~google.cloud.ads.googleads_v0.types.CampaignBudgetOperation`
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.MutateCampaignBudgetsResponse` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'mutate_campaign_budgets' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'mutate_campaign_budgets'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.mutate_campaign_budgets,
+ default_retry=self._method_configs['MutateCampaignBudgets']
+ .retry,
+ default_timeout=self._method_configs[
+ 'MutateCampaignBudgets'].timeout,
+ client_info=self._client_info,
+ )
+
+ request = campaign_budget_service_pb2.MutateCampaignBudgetsRequest(
+ customer_id=customer_id,
+ operations=operations,
+ )
+ return self._inner_api_calls['mutate_campaign_budgets'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
diff --git a/google/ads/google_ads/v0/services/campaign_budget_service_client_config.py b/google/ads/google_ads/v0/services/campaign_budget_service_client_config.py
new file mode 100644
index 000000000..54248a38e
--- /dev/null
+++ b/google/ads/google_ads/v0/services/campaign_budget_service_client_config.py
@@ -0,0 +1,33 @@
+config = {
+ "interfaces": {
+ "google.ads.googleads.v0.services.CampaignBudgetService": {
+ "retry_codes": {
+ "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetCampaignBudget": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "MutateCampaignBudgets": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/google/ads/google_ads/v0/services/campaign_criterion_service_client.py b/google/ads/google_ads/v0/services/campaign_criterion_service_client.py
new file mode 100644
index 000000000..ec4d6d455
--- /dev/null
+++ b/google/ads/google_ads/v0/services/campaign_criterion_service_client.py
@@ -0,0 +1,281 @@
+# Copyright 2018 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.
+"""Accesses the google.ads.googleads.v0.services CampaignCriterionService API."""
+
+import pkg_resources
+import warnings
+
+from google.oauth2 import service_account
+import google.api_core.gapic_v1.client_info
+import google.api_core.gapic_v1.config
+import google.api_core.gapic_v1.method
+import google.api_core.grpc_helpers
+import google.api_core.path_template
+
+from google.ads.google_ads.v0.services import campaign_criterion_service_client_config
+from google.ads.google_ads.v0.services.transports import campaign_criterion_service_grpc_transport
+from google.ads.google_ads.v0.proto.services import campaign_criterion_service_pb2
+
+_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution(
+ 'google-ads', ).version
+
+
+class CampaignCriterionServiceClient(object):
+ """Service to manage campaign criteria."""
+
+ SERVICE_ADDRESS = 'googleads.googleapis.com:443'
+ """The default address of the service."""
+
+ # The name of the interface for this client. This is the key used to
+ # find the method configuration in the client_config dictionary.
+ _INTERFACE_NAME = 'google.ads.googleads.v0.services.CampaignCriterionService'
+
+ @classmethod
+ def from_service_account_file(cls, filename, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ CampaignCriterionServiceClient: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_file(
+ filename)
+ kwargs['credentials'] = credentials
+ return cls(*args, **kwargs)
+
+ from_service_account_json = from_service_account_file
+
+ @classmethod
+ def campaign_criteria_path(cls, customer, campaign_criteria):
+ """Return a fully-qualified campaign_criteria string."""
+ return google.api_core.path_template.expand(
+ 'customers/{customer}/campaignCriteria/{campaign_criteria}',
+ customer=customer,
+ campaign_criteria=campaign_criteria,
+ )
+
+ def __init__(self,
+ transport=None,
+ channel=None,
+ credentials=None,
+ client_config=campaign_criterion_service_client_config.config,
+ client_info=None):
+ """Constructor.
+
+ Args:
+ transport (Union[~.CampaignCriterionServiceGrpcTransport,
+ Callable[[~.Credentials, type], ~.CampaignCriterionServiceGrpcTransport]): A transport
+ instance, responsible for actually making the API calls.
+ The default transport uses the gRPC protocol.
+ This argument may also be a callable which returns a
+ transport instance. Callables will be sent the credentials
+ as the first argument and the default transport class as
+ the second argument.
+ channel (grpc.Channel): DEPRECATED. A ``Channel`` instance
+ through which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is mutually exclusive with providing a
+ transport instance to ``transport``; doing so will raise
+ an exception.
+ client_config (dict): DEPRECATED. A dictionary of call options for
+ each method. If not specified, the default configuration is used.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ """
+ # Raise deprecation warnings for things we want to go away.
+ if client_config:
+ warnings.warn('The `client_config` argument is deprecated.',
+ PendingDeprecationWarning)
+ if channel:
+ warnings.warn(
+ 'The `channel` argument is deprecated; use '
+ '`transport` instead.', PendingDeprecationWarning)
+
+ # Instantiate the transport.
+ # The transport is responsible for handling serialization and
+ # deserialization and actually sending data to the service.
+ if transport:
+ if callable(transport):
+ self.transport = transport(
+ credentials=credentials,
+ default_class=campaign_criterion_service_grpc_transport.
+ CampaignCriterionServiceGrpcTransport,
+ )
+ else:
+ if credentials:
+ raise ValueError(
+ 'Received both a transport instance and '
+ 'credentials; these are mutually exclusive.')
+ self.transport = transport
+ else:
+ self.transport = campaign_criterion_service_grpc_transport.CampaignCriterionServiceGrpcTransport(
+ address=self.SERVICE_ADDRESS,
+ channel=channel,
+ credentials=credentials,
+ )
+
+ if client_info is None:
+ client_info = (
+ google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO)
+ client_info.gapic_version = _GAPIC_LIBRARY_VERSION
+ self._client_info = client_info
+
+ # Parse out the default settings for retry and timeout for each RPC
+ # from the client configuration.
+ # (Ordinarily, these are the defaults specified in the `*_config.py`
+ # file next to this one.)
+ self._method_configs = google.api_core.gapic_v1.config.parse_method_configs(
+ client_config['interfaces'][self._INTERFACE_NAME], )
+
+ # Save a dictionary of cached API call functions.
+ # These are the actual callables which invoke the proper
+ # transport methods, wrapped with `wrap_method` to add retry,
+ # timeout, and the like.
+ self._inner_api_calls = {}
+
+ # Service calls
+ def get_campaign_criterion(self,
+ resource_name,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Returns the requested criterion in full detail.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.CampaignCriterionServiceClient()
+ >>>
+ >>> resource_name = client.campaign_criteria_path('[CUSTOMER]', '[CAMPAIGN_CRITERIA]')
+ >>>
+ >>> response = client.get_campaign_criterion(resource_name)
+
+ Args:
+ resource_name (str): The resource name of the criterion to fetch.
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.CampaignCriterion` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'get_campaign_criterion' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'get_campaign_criterion'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.get_campaign_criterion,
+ default_retry=self._method_configs['GetCampaignCriterion']
+ .retry,
+ default_timeout=self._method_configs[
+ 'GetCampaignCriterion'].timeout,
+ client_info=self._client_info,
+ )
+
+ request = campaign_criterion_service_pb2.GetCampaignCriterionRequest(
+ resource_name=resource_name, )
+ return self._inner_api_calls['get_campaign_criterion'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
+
+ def mutate_campaign_criteria(
+ self,
+ customer_id,
+ operations,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Creates, updates, or removes criteria. Operation statuses are returned.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.CampaignCriterionServiceClient()
+ >>>
+ >>> # TODO: Initialize ``customer_id``:
+ >>> customer_id = ''
+ >>>
+ >>> # TODO: Initialize ``operations``:
+ >>> operations = []
+ >>>
+ >>> response = client.mutate_campaign_criteria(customer_id, operations)
+
+ Args:
+ customer_id (str): The ID of the customer whose criteria are being modified.
+ operations (list[Union[dict, ~google.cloud.ads.googleads_v0.types.CampaignCriterionOperation]]): The list of operations to perform on individual criteria.
+ If a dict is provided, it must be of the same form as the protobuf
+ message :class:`~google.cloud.ads.googleads_v0.types.CampaignCriterionOperation`
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.MutateCampaignCriteriaResponse` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'mutate_campaign_criteria' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'mutate_campaign_criteria'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.mutate_campaign_criteria,
+ default_retry=self._method_configs[
+ 'MutateCampaignCriteria'].retry,
+ default_timeout=self._method_configs[
+ 'MutateCampaignCriteria'].timeout,
+ client_info=self._client_info,
+ )
+
+ request = campaign_criterion_service_pb2.MutateCampaignCriteriaRequest(
+ customer_id=customer_id,
+ operations=operations,
+ )
+ return self._inner_api_calls['mutate_campaign_criteria'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
diff --git a/google/ads/google_ads/v0/services/campaign_criterion_service_client_config.py b/google/ads/google_ads/v0/services/campaign_criterion_service_client_config.py
new file mode 100644
index 000000000..16cdd3c5b
--- /dev/null
+++ b/google/ads/google_ads/v0/services/campaign_criterion_service_client_config.py
@@ -0,0 +1,33 @@
+config = {
+ "interfaces": {
+ "google.ads.googleads.v0.services.CampaignCriterionService": {
+ "retry_codes": {
+ "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetCampaignCriterion": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "MutateCampaignCriteria": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/google/ads/google_ads/v0/services/campaign_service_client.py b/google/ads/google_ads/v0/services/campaign_service_client.py
new file mode 100644
index 000000000..2aea37117
--- /dev/null
+++ b/google/ads/google_ads/v0/services/campaign_service_client.py
@@ -0,0 +1,279 @@
+# Copyright 2018 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.
+"""Accesses the google.ads.googleads.v0.services CampaignService API."""
+
+import pkg_resources
+import warnings
+
+from google.oauth2 import service_account
+import google.api_core.gapic_v1.client_info
+import google.api_core.gapic_v1.config
+import google.api_core.gapic_v1.method
+import google.api_core.grpc_helpers
+import google.api_core.path_template
+
+from google.ads.google_ads.v0.services import campaign_service_client_config
+from google.ads.google_ads.v0.services.transports import campaign_service_grpc_transport
+from google.ads.google_ads.v0.proto.services import campaign_service_pb2
+
+_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution(
+ 'google-ads', ).version
+
+
+class CampaignServiceClient(object):
+ """Service to manage campaigns."""
+
+ SERVICE_ADDRESS = 'googleads.googleapis.com:443'
+ """The default address of the service."""
+
+ # The name of the interface for this client. This is the key used to
+ # find the method configuration in the client_config dictionary.
+ _INTERFACE_NAME = 'google.ads.googleads.v0.services.CampaignService'
+
+ @classmethod
+ def from_service_account_file(cls, filename, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ CampaignServiceClient: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_file(
+ filename)
+ kwargs['credentials'] = credentials
+ return cls(*args, **kwargs)
+
+ from_service_account_json = from_service_account_file
+
+ @classmethod
+ def campaign_path(cls, customer, campaign):
+ """Return a fully-qualified campaign string."""
+ return google.api_core.path_template.expand(
+ 'customers/{customer}/campaigns/{campaign}',
+ customer=customer,
+ campaign=campaign,
+ )
+
+ def __init__(self,
+ transport=None,
+ channel=None,
+ credentials=None,
+ client_config=campaign_service_client_config.config,
+ client_info=None):
+ """Constructor.
+
+ Args:
+ transport (Union[~.CampaignServiceGrpcTransport,
+ Callable[[~.Credentials, type], ~.CampaignServiceGrpcTransport]): A transport
+ instance, responsible for actually making the API calls.
+ The default transport uses the gRPC protocol.
+ This argument may also be a callable which returns a
+ transport instance. Callables will be sent the credentials
+ as the first argument and the default transport class as
+ the second argument.
+ channel (grpc.Channel): DEPRECATED. A ``Channel`` instance
+ through which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is mutually exclusive with providing a
+ transport instance to ``transport``; doing so will raise
+ an exception.
+ client_config (dict): DEPRECATED. A dictionary of call options for
+ each method. If not specified, the default configuration is used.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ """
+ # Raise deprecation warnings for things we want to go away.
+ if client_config:
+ warnings.warn('The `client_config` argument is deprecated.',
+ PendingDeprecationWarning)
+ if channel:
+ warnings.warn(
+ 'The `channel` argument is deprecated; use '
+ '`transport` instead.', PendingDeprecationWarning)
+
+ # Instantiate the transport.
+ # The transport is responsible for handling serialization and
+ # deserialization and actually sending data to the service.
+ if transport:
+ if callable(transport):
+ self.transport = transport(
+ credentials=credentials,
+ default_class=campaign_service_grpc_transport.
+ CampaignServiceGrpcTransport,
+ )
+ else:
+ if credentials:
+ raise ValueError(
+ 'Received both a transport instance and '
+ 'credentials; these are mutually exclusive.')
+ self.transport = transport
+ else:
+ self.transport = campaign_service_grpc_transport.CampaignServiceGrpcTransport(
+ address=self.SERVICE_ADDRESS,
+ channel=channel,
+ credentials=credentials,
+ )
+
+ if client_info is None:
+ client_info = (
+ google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO)
+ client_info.gapic_version = _GAPIC_LIBRARY_VERSION
+ self._client_info = client_info
+
+ # Parse out the default settings for retry and timeout for each RPC
+ # from the client configuration.
+ # (Ordinarily, these are the defaults specified in the `*_config.py`
+ # file next to this one.)
+ self._method_configs = google.api_core.gapic_v1.config.parse_method_configs(
+ client_config['interfaces'][self._INTERFACE_NAME], )
+
+ # Save a dictionary of cached API call functions.
+ # These are the actual callables which invoke the proper
+ # transport methods, wrapped with `wrap_method` to add retry,
+ # timeout, and the like.
+ self._inner_api_calls = {}
+
+ # Service calls
+ def get_campaign(self,
+ resource_name,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Returns the requested campaign in full detail.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.CampaignServiceClient()
+ >>>
+ >>> resource_name = client.campaign_path('[CUSTOMER]', '[CAMPAIGN]')
+ >>>
+ >>> response = client.get_campaign(resource_name)
+
+ Args:
+ resource_name (str): The resource name of the campaign to fetch.
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.Campaign` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'get_campaign' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'get_campaign'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.get_campaign,
+ default_retry=self._method_configs['GetCampaign'].retry,
+ default_timeout=self._method_configs['GetCampaign']
+ .timeout,
+ client_info=self._client_info,
+ )
+
+ request = campaign_service_pb2.GetCampaignRequest(
+ resource_name=resource_name, )
+ return self._inner_api_calls['get_campaign'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
+
+ def mutate_campaigns(self,
+ customer_id,
+ operations,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Creates, updates, or removes campaigns. Operation statuses are returned.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.CampaignServiceClient()
+ >>>
+ >>> # TODO: Initialize ``customer_id``:
+ >>> customer_id = ''
+ >>>
+ >>> # TODO: Initialize ``operations``:
+ >>> operations = []
+ >>>
+ >>> response = client.mutate_campaigns(customer_id, operations)
+
+ Args:
+ customer_id (str): The ID of the customer whose campaigns are being modified.
+ operations (list[Union[dict, ~google.cloud.ads.googleads_v0.types.CampaignOperation]]): The list of operations to perform on individual campaigns.
+ If a dict is provided, it must be of the same form as the protobuf
+ message :class:`~google.cloud.ads.googleads_v0.types.CampaignOperation`
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.MutateCampaignsResponse` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'mutate_campaigns' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'mutate_campaigns'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.mutate_campaigns,
+ default_retry=self._method_configs[
+ 'MutateCampaigns'].retry,
+ default_timeout=self._method_configs['MutateCampaigns']
+ .timeout,
+ client_info=self._client_info,
+ )
+
+ request = campaign_service_pb2.MutateCampaignsRequest(
+ customer_id=customer_id,
+ operations=operations,
+ )
+ return self._inner_api_calls['mutate_campaigns'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
diff --git a/google/ads/google_ads/v0/services/campaign_service_client_config.py b/google/ads/google_ads/v0/services/campaign_service_client_config.py
new file mode 100644
index 000000000..3af71346d
--- /dev/null
+++ b/google/ads/google_ads/v0/services/campaign_service_client_config.py
@@ -0,0 +1,33 @@
+config = {
+ "interfaces": {
+ "google.ads.googleads.v0.services.CampaignService": {
+ "retry_codes": {
+ "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetCampaign": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "MutateCampaigns": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/google/ads/google_ads/v0/services/customer_service_client.py b/google/ads/google_ads/v0/services/customer_service_client.py
new file mode 100644
index 000000000..5145f2a97
--- /dev/null
+++ b/google/ads/google_ads/v0/services/customer_service_client.py
@@ -0,0 +1,213 @@
+# Copyright 2018 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.
+"""Accesses the google.ads.googleads.v0.services CustomerService API."""
+
+import pkg_resources
+import warnings
+
+from google.oauth2 import service_account
+import google.api_core.gapic_v1.client_info
+import google.api_core.gapic_v1.config
+import google.api_core.gapic_v1.method
+import google.api_core.grpc_helpers
+import google.api_core.path_template
+
+from google.ads.google_ads.v0.services import customer_service_client_config
+from google.ads.google_ads.v0.services.transports import customer_service_grpc_transport
+from google.ads.google_ads.v0.proto.services import customer_service_pb2
+
+_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution(
+ 'google-ads', ).version
+
+
+class CustomerServiceClient(object):
+ """Service to manage customers."""
+
+ SERVICE_ADDRESS = 'googleads.googleapis.com:443'
+ """The default address of the service."""
+
+ # The name of the interface for this client. This is the key used to
+ # find the method configuration in the client_config dictionary.
+ _INTERFACE_NAME = 'google.ads.googleads.v0.services.CustomerService'
+
+ @classmethod
+ def from_service_account_file(cls, filename, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ CustomerServiceClient: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_file(
+ filename)
+ kwargs['credentials'] = credentials
+ return cls(*args, **kwargs)
+
+ from_service_account_json = from_service_account_file
+
+ @classmethod
+ def customer_path(cls, customer):
+ """Return a fully-qualified customer string."""
+ return google.api_core.path_template.expand(
+ 'customers/{customer}',
+ customer=customer,
+ )
+
+ def __init__(self,
+ transport=None,
+ channel=None,
+ credentials=None,
+ client_config=customer_service_client_config.config,
+ client_info=None):
+ """Constructor.
+
+ Args:
+ transport (Union[~.CustomerServiceGrpcTransport,
+ Callable[[~.Credentials, type], ~.CustomerServiceGrpcTransport]): A transport
+ instance, responsible for actually making the API calls.
+ The default transport uses the gRPC protocol.
+ This argument may also be a callable which returns a
+ transport instance. Callables will be sent the credentials
+ as the first argument and the default transport class as
+ the second argument.
+ channel (grpc.Channel): DEPRECATED. A ``Channel`` instance
+ through which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is mutually exclusive with providing a
+ transport instance to ``transport``; doing so will raise
+ an exception.
+ client_config (dict): DEPRECATED. A dictionary of call options for
+ each method. If not specified, the default configuration is used.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ """
+ # Raise deprecation warnings for things we want to go away.
+ if client_config:
+ warnings.warn('The `client_config` argument is deprecated.',
+ PendingDeprecationWarning)
+ if channel:
+ warnings.warn(
+ 'The `channel` argument is deprecated; use '
+ '`transport` instead.', PendingDeprecationWarning)
+
+ # Instantiate the transport.
+ # The transport is responsible for handling serialization and
+ # deserialization and actually sending data to the service.
+ if transport:
+ if callable(transport):
+ self.transport = transport(
+ credentials=credentials,
+ default_class=customer_service_grpc_transport.
+ CustomerServiceGrpcTransport,
+ )
+ else:
+ if credentials:
+ raise ValueError(
+ 'Received both a transport instance and '
+ 'credentials; these are mutually exclusive.')
+ self.transport = transport
+ else:
+ self.transport = customer_service_grpc_transport.CustomerServiceGrpcTransport(
+ address=self.SERVICE_ADDRESS,
+ channel=channel,
+ credentials=credentials,
+ )
+
+ if client_info is None:
+ client_info = (
+ google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO)
+ client_info.gapic_version = _GAPIC_LIBRARY_VERSION
+ self._client_info = client_info
+
+ # Parse out the default settings for retry and timeout for each RPC
+ # from the client configuration.
+ # (Ordinarily, these are the defaults specified in the `*_config.py`
+ # file next to this one.)
+ self._method_configs = google.api_core.gapic_v1.config.parse_method_configs(
+ client_config['interfaces'][self._INTERFACE_NAME], )
+
+ # Save a dictionary of cached API call functions.
+ # These are the actual callables which invoke the proper
+ # transport methods, wrapped with `wrap_method` to add retry,
+ # timeout, and the like.
+ self._inner_api_calls = {}
+
+ # Service calls
+ def get_customer(self,
+ resource_name,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Returns the requested customer in full detail.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.CustomerServiceClient()
+ >>>
+ >>> resource_name = client.customer_path('[CUSTOMER]')
+ >>>
+ >>> response = client.get_customer(resource_name)
+
+ Args:
+ resource_name (str): The resource name of the customer to fetch.
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.Customer` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'get_customer' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'get_customer'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.get_customer,
+ default_retry=self._method_configs['GetCustomer'].retry,
+ default_timeout=self._method_configs['GetCustomer']
+ .timeout,
+ client_info=self._client_info,
+ )
+
+ request = customer_service_pb2.GetCustomerRequest(
+ resource_name=resource_name, )
+ return self._inner_api_calls['get_customer'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
diff --git a/google/ads/google_ads/v0/services/customer_service_client_config.py b/google/ads/google_ads/v0/services/customer_service_client_config.py
new file mode 100644
index 000000000..14e28368a
--- /dev/null
+++ b/google/ads/google_ads/v0/services/customer_service_client_config.py
@@ -0,0 +1,28 @@
+config = {
+ "interfaces": {
+ "google.ads.googleads.v0.services.CustomerService": {
+ "retry_codes": {
+ "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetCustomer": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/google/ads/google_ads/v0/services/enums.py b/google/ads/google_ads/v0/services/enums.py
new file mode 100644
index 000000000..cfd059da8
--- /dev/null
+++ b/google/ads/google_ads/v0/services/enums.py
@@ -0,0 +1,2927 @@
+# Copyright 2018 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.
+"""Wrappers for protocol buffer enum types."""
+
+import enum
+
+
+class KeywordMatchTypeEnum(object):
+ class KeywordMatchType(enum.IntEnum):
+ """
+ Possible Keyword match types.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): Used for return value only. Represents value unknown in this version.
+ EXACT (int): Exact match.
+ PHRASE (int): Phrase match.
+ BROAD (int): Broad match.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ EXACT = 2
+ PHRASE = 3
+ BROAD = 4
+
+
+class ListingCustomAttributeIndexEnum(object):
+ class ListingCustomAttributeIndex(enum.IntEnum):
+ """
+ The index of the listing custom attribute.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): Used for return value only. Represents value unknown in this version.
+ CUSTOM_ATTRIBUTE_0 (int): First listing custom attribute.
+ CUSTOM_ATTRIBUTE_1 (int): Second listing custom attribute.
+ CUSTOM_ATTRIBUTE_2 (int): Third listing custom attribute.
+ CUSTOM_ATTRIBUTE_3 (int): Fourth listing custom attribute.
+ CUSTOM_ATTRIBUTE_4 (int): Fifth listing custom attribute.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ CUSTOM_ATTRIBUTE_0 = 2
+ CUSTOM_ATTRIBUTE_1 = 3
+ CUSTOM_ATTRIBUTE_2 = 4
+ CUSTOM_ATTRIBUTE_3 = 5
+ CUSTOM_ATTRIBUTE_4 = 6
+
+
+class ListingGroupTypeEnum(object):
+ class ListingGroupType(enum.IntEnum):
+ """
+ The type of the listing group.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): Used for return value only. Represents value unknown in this version.
+ SUBDIVISION (int): Subdivision of products along some listing dimension. These nodes
+ are not used by serving to target listing entries, but is purely
+ to define the structure of the tree.
+ UNIT (int): Listing group unit that defines a bid.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ SUBDIVISION = 2
+ UNIT = 3
+
+
+class PageOnePromotedStrategyGoalEnum(object):
+ class PageOnePromotedStrategyGoal(enum.IntEnum):
+ """
+ Enum describing possible strategy goals.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): Used for return value only. Represents value unknown in this version.
+ FIRST_PAGE (int): First page on google.com.
+ FIRST_PAGE_PROMOTED (int): Top slots of the first page on google.com.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ FIRST_PAGE = 2
+ FIRST_PAGE_PROMOTED = 3
+
+
+class QualityScoreBucketEnum(object):
+ class QualityScoreBucket(enum.IntEnum):
+ """
+ Enum listing the possible quality score buckets.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): Used for return value only. Represents value unknown in this version.
+ BELOW_AVERAGE (int): Quality of the creative is below average.
+ AVERAGE (int): Quality of the creative is average.
+ ABOVE_AVERAGE (int): Quality of the creative is above average.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ BELOW_AVERAGE = 2
+ AVERAGE = 3
+ ABOVE_AVERAGE = 4
+
+
+class AdGroupStatusEnum(object):
+ class AdGroupStatus(enum.IntEnum):
+ """
+ The possible statuses of an ad group.
+
+ Attributes:
+ UNSPECIFIED (int): The status has not been specified.
+ UNKNOWN (int): The received value is not known in this version.
+
+ This is a response-only value.
+ ENABLED (int): The ad group is enabled.
+ PAUSED (int): The ad group is paused.
+ REMOVED (int): The ad group is removed.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ ENABLED = 2
+ PAUSED = 3
+ REMOVED = 4
+
+
+class DeviceEnum(object):
+ class Device(enum.IntEnum):
+ """
+ Enumerates AdWords platforms available for targeting.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): The value is unknown in this version.
+ MOBILE (int): Mobile devices with full browsers.
+ TABLET (int): Tablets with full browsers.
+ DESKTOP (int): Computers.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ MOBILE = 2
+ TABLET = 3
+ DESKTOP = 4
+
+
+class AdGroupAdStatusEnum(object):
+ class AdGroupAdStatus(enum.IntEnum):
+ """
+ The possible statuses of an AdGroupAd.
+
+ Attributes:
+ UNSPECIFIED (int): No value has been specified.
+ UNKNOWN (int): The received value is not known in this version.
+
+ This is a response-only value.
+ ENABLED (int): The ad group ad is enabled.
+ PAUSED (int): The ad group ad is paused.
+ REMOVED (int): The ad group ad is removed.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ ENABLED = 2
+ PAUSED = 3
+ REMOVED = 4
+
+
+class RecommendationTypeEnum(object):
+ class RecommendationType(enum.IntEnum):
+ """
+ Types of recommendations.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): Used for return value only. Represents value unknown in this version.
+ CAMPAIGN_BUDGET (int): Budget recommendation for budget constrained campaigns.
+ KEYWORD (int): Keyword recommendation.
+ TEXT_AD (int): Recommendation to add a new text ad.
+ TARGET_CPA_OPT_IN (int): Recommendation to update a campaign to use a Target CPA bidding strategy.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ CAMPAIGN_BUDGET = 2
+ KEYWORD = 3
+ TEXT_AD = 4
+ TARGET_CPA_OPT_IN = 5
+
+
+class AdNetworkTypeEnum(object):
+ class AdNetworkType(enum.IntEnum):
+ """
+ Enumerates AdWords network types.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): The value is unknown in this version.
+ SEARCH (int): Google search.
+ SEARCH_PARTNERS (int): Search partners.
+ CONTENT (int): Display Network.
+ YOUTUBE_SEARCH (int): YouTube Search.
+ YOUTUBE_WATCH (int): YouTube Videos
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ SEARCH = 2
+ SEARCH_PARTNERS = 3
+ CONTENT = 4
+ YOUTUBE_SEARCH = 5
+ YOUTUBE_WATCH = 6
+
+
+class TargetCpaOptInRecommendationGoalEnum(object):
+ class TargetCpaOptInRecommendationGoal(enum.IntEnum):
+ """
+ Goal of TargetCpaOptIn recommendation.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): Used for return value only. Represents value unknown in this version.
+ SAME_COST (int): Recommendation to set Target CPA to maintain the same cost.
+ SAME_CONVERSIONS (int): Recommendation to set Target CPA to maintain the same conversions.
+ SAME_CPA (int): Recommendation to set Target CPA to maintain the same CPA.
+ CLOSEST_CPA (int): Recommendation to set Target CPA to a value that is as close as possible
+ to, yet lower than, the actual CPA (computed for past 28 days).
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ SAME_COST = 2
+ SAME_CONVERSIONS = 3
+ SAME_CPA = 4
+ CLOSEST_CPA = 5
+
+
+class AdGroupCriterionStatusEnum(object):
+ class AdGroupCriterionStatus(enum.IntEnum):
+ """
+ The possible statuses of an AdGroupCriterion.
+
+ Attributes:
+ UNSPECIFIED (int): No value has been specified.
+ UNKNOWN (int): The received value is not known in this version.
+
+ This is a response-only value.
+ ENABLED (int): The ad group criterion is enabled.
+ PAUSED (int): The ad group criterion is paused.
+ REMOVED (int): The ad group criterion is removed.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ ENABLED = 2
+ PAUSED = 3
+ REMOVED = 4
+
+
+class CampaignServingStatusEnum(object):
+ class CampaignServingStatus(enum.IntEnum):
+ """
+ Possible serving statuses of a campaign.
+
+ Attributes:
+ UNSPECIFIED (int): No value has been specified.
+ UNKNOWN (int): The received value is not known in this version.
+
+ This is a response-only value.
+ SERVING (int): Serving.
+ NONE (int): None.
+ ENDED (int): Ended.
+ PENDING (int): Pending.
+ SUSPENDED (int): Suspended.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ SERVING = 2
+ NONE = 3
+ ENDED = 4
+ PENDING = 5
+ SUSPENDED = 6
+
+
+class CampaignStatusEnum(object):
+ class CampaignStatus(enum.IntEnum):
+ """
+ Possible statuses of a campaign.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): Used for return value only. Represents value unknown in this version.
+ ENABLED (int): Campaign is currently serving ads depending on budget information.
+ PAUSED (int): Campaign has been paused by the user.
+ REMOVED (int): Campaign has been removed.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ ENABLED = 2
+ PAUSED = 3
+ REMOVED = 4
+
+
+class AdServingOptimizationStatusEnum(object):
+ class AdServingOptimizationStatus(enum.IntEnum):
+ """
+ Enum describing possible serving statuses.
+
+ Attributes:
+ UNSPECIFIED (int): No value has been specified.
+ UNKNOWN (int): The received value is not known in this version.
+
+ This is a response-only value.
+ OPTIMIZE (int): Ad serving is optimized based on CTR for the campaign.
+ CONVERSION_OPTIMIZE (int): Ad serving is optimized based on CTR * Conversion for the campaign. If
+ the campaign is not in the conversion optimizer bidding strategy, it will
+ default to OPTIMIZED.
+ ROTATE (int): Ads are rotated evenly for 90 days, then optimized for clicks.
+ ROTATE_INDEFINITELY (int): Show lower performing ads more evenly with higher performing ads, and do
+ not optimize.
+ UNAVAILABLE (int): Ad serving optimization status is not available.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ OPTIMIZE = 2
+ CONVERSION_OPTIMIZE = 3
+ ROTATE = 4
+ ROTATE_INDEFINITELY = 5
+ UNAVAILABLE = 6
+
+
+class AdvertisingChannelSubTypeEnum(object):
+ class AdvertisingChannelSubType(enum.IntEnum):
+ """
+ Enum describing the different channel subtypes.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): Used as a return value only. Represents value unknown in this version.
+ SEARCH_MOBILE_APP (int): Mobile app campaigns for Search.
+ SEARCH_EXPRESS (int): AdWords express campaigns for search.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ SEARCH_MOBILE_APP = 2
+ SEARCH_EXPRESS = 4
+
+
+class BiddingStrategyTypeEnum(object):
+ class BiddingStrategyType(enum.IntEnum):
+ """
+ Enum describing possible bidding strategy types.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): Used for return value only. Represents value unknown in this version.
+ ENHANCED_CPC (int): Enhanced CPC is a bidding strategy that raises bids for clicks
+ that seem more likely to lead to a conversion and lowers
+ them for clicks where they seem less likely.
+ MANUAL_CPC (int): Manual click based bidding where user pays per click.
+ MANUAL_CPM (int): Manual impression based bidding
+ where user pays per thousand impressions.
+ MAXIMIZE_CONVERSIONS (int): A bidding strategy that automatically maximizes number of conversions
+ given a daily budget.
+ MAXIMIZE_CONVERSION_VALUE (int): An automated bidding strategy that automatically sets bids to maximize
+ revenue while spending your budget.
+ PAGE_ONE_PROMOTED (int): Page-One Promoted bidding scheme, which sets max cpc bids to
+ target impressions on page one or page one promoted slots on google.com.
+ PERCENT_CPC (int): Percent Cpc is bidding strategy where bids are a fraction of the
+ advertised price for some good or service.
+ TARGET_CPA (int): Target CPA is an automated bid strategy that sets bids
+ to help get as many conversions as possible
+ at the target cost-per-acquisition (CPA) you set.
+ TARGET_OUTRANK_SHARE (int): Target Outrank Share is an automated bidding strategy that sets bids
+ based on the target fraction of auctions where the advertiser
+ should outrank a specific competitor.
+ TARGET_ROAS (int): Target ROAS is an automated bidding strategy
+ that helps you maximize revenue while averaging
+ a specific target Return On Average Spend (ROAS).
+ TARGET_SPEND (int): Target Spend is an automated bid strategy that sets your bids
+ to help get as many clicks as possible within your budget.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ ENHANCED_CPC = 2
+ MANUAL_CPC = 3
+ MANUAL_CPM = 4
+ MAXIMIZE_CONVERSIONS = 10
+ MAXIMIZE_CONVERSION_VALUE = 11
+ PAGE_ONE_PROMOTED = 5
+ PERCENT_CPC = 12
+ TARGET_CPA = 6
+ TARGET_OUTRANK_SHARE = 7
+ TARGET_ROAS = 8
+ TARGET_SPEND = 9
+
+
+class BudgetStatusEnum(object):
+ class BudgetStatus(enum.IntEnum):
+ """
+ Possible statuses of a Budget.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): Used for return value only. Represents value unknown in this version.
+ ENABLED (int): Budget is enabled.
+ REMOVED (int): Budget is removed.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ ENABLED = 2
+ REMOVED = 3
+
+
+class BiddingSourceEnum(object):
+ class BiddingSource(enum.IntEnum):
+ """
+ Enum describing possible bidding sources.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): Used for return value only. Represents value unknown in this version.
+ ADGROUP (int): Bidding entity is defined on the ad group.
+ CRITERION (int): Bidding entity is defined on the ad group criterion.
+ CAMPAIGN_BIDDING_STRATEGY (int): Effective bidding entity is inherited from campaign bidding strategy.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ ADGROUP = 2
+ CRITERION = 3
+ CAMPAIGN_BIDDING_STRATEGY = 5
+
+
+class DayOfWeekEnum(object):
+ class DayOfWeek(enum.IntEnum):
+ """
+ Enumerates days of the week, e.g., \"Monday\".
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): The value is unknown in this version.
+ MONDAY (int): Monday.
+ TUESDAY (int): Tuesday.
+ WEDNESDAY (int): Wednesday.
+ THURSDAY (int): Thursday.
+ FRIDAY (int): Friday.
+ SATURDAY (int): Saturday.
+ SUNDAY (int): Sunday.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ MONDAY = 2
+ TUESDAY = 3
+ WEDNESDAY = 4
+ THURSDAY = 5
+ FRIDAY = 6
+ SATURDAY = 7
+ SUNDAY = 8
+
+
+class GoogleAdsFieldCategoryEnum(object):
+ class GoogleAdsFieldCategory(enum.IntEnum):
+ """
+ The category of the artifact.
+
+ Attributes:
+ UNSPECIFIED (int): Unspecified
+ UNKNOWN (int): Unknown
+ RESOURCE (int): The described artifact is a resource.
+ ATTRIBUTE (int): The described artifact is a field and is an attribute of a resource.
+ Including a resource attribute field in a query may segment the query if
+ the resource to which it is attributed segments the resource found in
+ the FROM clause.
+ SEGMENT (int): The described artifact is a field and always segments search queries.
+ METRIC (int): The described artifact is a field and is a metric. It never segments
+ search queries.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ RESOURCE = 2
+ ATTRIBUTE = 3
+ SEGMENT = 5
+ METRIC = 6
+
+
+class AdvertisingChannelTypeEnum(object):
+ class AdvertisingChannelType(enum.IntEnum):
+ """
+ Enum describing the various advertising channel types.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): Used for return value only. Represents value unknown in this version.
+ SEARCH (int): Search Network. Includes display bundled, and Search+ campaigns.
+ HOTEL (int): Hotel Ads campaigns.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ SEARCH = 2
+ HOTEL = 5
+
+
+class AdTypeEnum(object):
+ class AdType(enum.IntEnum):
+ """
+ The possible types of an ad.
+
+ Attributes:
+ UNSPECIFIED (int): No value has been specified.
+ UNKNOWN (int): The received value is not known in this version.
+
+ This is a response-only value.
+ TEXT_AD (int): The ad is a text ad.
+ EXPANDED_TEXT_AD (int): The ad is an expanded text ad.
+ DYNAMIC_SEARCH_AD (int): The ad is a dynamic search ad.
+ RESPONSIVE_DISPLAY_AD (int): The ad is a responsive display ad.
+ CALL_ONLY_AD (int): The ad is a call only ad.
+ EXPANDED_DYNAMIC_SEARCH_AD (int): The ad is an expanded dynamic search ad.
+ HOTEL_AD (int): The ad is a hotel ad.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ TEXT_AD = 2
+ EXPANDED_TEXT_AD = 3
+ DYNAMIC_SEARCH_AD = 4
+ RESPONSIVE_DISPLAY_AD = 5
+ CALL_ONLY_AD = 6
+ EXPANDED_DYNAMIC_SEARCH_AD = 7
+ HOTEL_AD = 8
+
+
+class SlotEnum(object):
+ class Slot(enum.IntEnum):
+ """
+ Enumerates possible positions of the Ad.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): The value is unknown in this version.
+ SEARCH_SIDE (int): Google search: Side.
+ SEARCH_TOP (int): Google search: Top.
+ SEARCH_OTHER (int): Google search: Other.
+ CONTENT (int): Google Display Network.
+ SEARCH_PARTNER_TOP (int): Search partners: Top.
+ SEARCH_PARTNER_OTHER (int): Search partners: Other.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ SEARCH_SIDE = 2
+ SEARCH_TOP = 3
+ SEARCH_OTHER = 4
+ CONTENT = 5
+ SEARCH_PARTNER_TOP = 6
+ SEARCH_PARTNER_OTHER = 7
+
+
+class BudgetDeliveryMethodEnum(object):
+ class BudgetDeliveryMethod(enum.IntEnum):
+ """
+ Possible delivery methods of a Budget.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): Used for return value only. Represents value unknown in this version.
+ STANDARD (int): The budget server will throttle serving evenly across
+ the entire time period.
+ ACCELERATED (int): The budget server will not throttle serving,
+ and ads will serve as fast as possible.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ STANDARD = 2
+ ACCELERATED = 3
+
+
+class GoogleAdsFieldDataTypeEnum(object):
+ class GoogleAdsFieldDataType(enum.IntEnum):
+ """
+ These are the various types a GoogleAdsService artifact may take on.
+
+ Attributes:
+ UNSPECIFIED (int): Unspecified
+ UNKNOWN (int): Unknown
+ BOOLEAN (int): Maps to google.protobuf.BoolValue
+
+ Applicable operators: =, !=
+ DATE (int): Maps to google.protobuf.StringValue. It can be compared using the set of
+ operators specific to dates however.
+
+ Applicable operators: =, <, >, <=, >=, BETWEEN, DURING, and IN
+ DOUBLE (int): Maps to google.protobuf.DoubleValue
+
+ Applicable operators: =, !=, <, >, IN, NOT IN
+ ENUM (int): Maps to an enum. It's specific definition can be found at type_url.
+
+ Applicable operators: =, !=, IN, NOT IN
+ FLOAT (int): Maps to google.protobuf.FloatValue
+
+ Applicable operators: =, !=, <, >, IN, NOT IN
+ INT32 (int): Maps to google.protobuf.Int32Value
+
+ Applicable operators: =, !=, <, >, <=, >=, BETWEEN, IN, NOT IN
+ INT64 (int): Maps to google.protobuf.Int64Value
+
+ Applicable operators: =, !=, <, >, <=, >=, BETWEEN, IN, NOT IN
+ MESSAGE (int): Maps to a protocol buffer message type. The data type's details can be
+ found in type_url.
+
+ No operators work with MESSAGE fields.
+ RESOURCE_NAME (int): Maps to google.protobuf.StringValue. Represents the resource name
+ (unique id) of a resource or one of its foreign keys.
+
+ No operators work with RESOURCE_NAME fields.
+ STRING (int): Maps to google.protobuf.StringValue.
+
+ Applicable operators: =, !=, LIKE, NOT LIKE, IN, NOT IN
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ BOOLEAN = 2
+ DATE = 3
+ DOUBLE = 4
+ ENUM = 5
+ FLOAT = 6
+ INT32 = 7
+ INT64 = 8
+ MESSAGE = 9
+ RESOURCE_NAME = 10
+ STRING = 11
+
+
+class AdGroupTypeEnum(object):
+ class AdGroupType(enum.IntEnum):
+ """
+ Enum listing the possible types of an ad group.
+
+ Attributes:
+ UNSPECIFIED (int): The type has not been specified.
+ UNKNOWN (int): The received value is not known in this version.
+
+ This is a response-only value.
+ SEARCH_STANDARD (int): The default ad group type for Search campaigns.
+ HOTEL_ADS (int): The default ad group type for Hotel campaigns.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ SEARCH_STANDARD = 2
+ HOTEL_ADS = 6
+
+
+class CriterionTypeEnum(object):
+ class CriterionType(enum.IntEnum):
+ """
+ Enum describing possible criterion types.
+
+ Attributes:
+ UNSPECIFIED (int): Not specified.
+ UNKNOWN (int): Used for return value only. Represents value unknown in this version.
+ KEYWORD (int): Keyword. e.g. 'mars cruise'.
+ PLATFORM (int): Platforms to target.
+ LOCATION (int): Locations to target.
+ LISTING_GROUP (int): Listing groups to target.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ KEYWORD = 2
+ PLATFORM = 6
+ LOCATION = 7
+ LISTING_GROUP = 8
+
+
+class AdGroupAdErrorEnum(object):
+ class AdGroupAdError(enum.IntEnum):
+ """
+ Enum describing possible ad group ad errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ AD_GROUP_AD_LABEL_DOES_NOT_EXIST (int): No link found between the adgroup ad and the label.
+ AD_GROUP_AD_LABEL_ALREADY_EXISTS (int): The label has already been attached to the adgroup ad.
+ AD_NOT_UNDER_ADGROUP (int): The specified ad was not found in the adgroup
+ CANNOT_OPERATE_ON_REMOVED_ADGROUPAD (int): Removed ads may not be modified
+ CANNOT_CREATE_DEPRECATED_ADS (int): An ad of this type is deprecated and cannot be created. Only deletions
+ are permitted.
+ CANNOT_CREATE_TEXT_ADS (int): Text ads are deprecated and cannot be created. Use expanded text ads
+ instead.
+ EMPTY_FIELD (int): A required field was not specified or is an empty string.
+ RESOURCE_REFERENCED_IN_MULTIPLE_OPS (int): An ad may only be modified once per call
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ AD_GROUP_AD_LABEL_DOES_NOT_EXIST = 2
+ AD_GROUP_AD_LABEL_ALREADY_EXISTS = 3
+ AD_NOT_UNDER_ADGROUP = 4
+ CANNOT_OPERATE_ON_REMOVED_ADGROUPAD = 5
+ CANNOT_CREATE_DEPRECATED_ADS = 6
+ CANNOT_CREATE_TEXT_ADS = 7
+ EMPTY_FIELD = 8
+ RESOURCE_REFERENCED_IN_MULTIPLE_OPS = 9
+
+
+class CampaignCriterionErrorEnum(object):
+ class CampaignCriterionError(enum.IntEnum):
+ """
+ Enum describing possible campaign criterion errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ CONCRETE_TYPE_REQUIRED (int): Concrete type of criterion (keyword v.s. placement) is required for
+ CREATE and UPDATE operations.
+ INVALID_PLACEMENT_URL (int): Invalid placement URL.
+ CANNOT_EXCLUDE_CRITERIA_TYPE (int): Criteria type can not be excluded for the campaign by the customer. like
+ AOL account type cannot target site type criteria
+ CANNOT_SET_STATUS_FOR_CRITERIA_TYPE (int): Cannot set the campaign criterion status for this criteria type.
+ CANNOT_SET_STATUS_FOR_EXCLUDED_CRITERIA (int): Cannot set the campaign criterion status for an excluded criteria.
+ CANNOT_TARGET_AND_EXCLUDE (int): Cannot target and exclude the same criterion.
+ TOO_MANY_OPERATIONS (int): The mutate contained too many operations.
+ OPERATOR_NOT_SUPPORTED_FOR_CRITERION_TYPE (int): This operator cannot be applied to a criterion of this type.
+ SHOPPING_CAMPAIGN_SALES_COUNTRY_NOT_SUPPORTED_FOR_SALES_CHANNEL (int): The Shopping campaign sales country is not supported for
+ ProductSalesChannel targeting.
+ CANNOT_ADD_EXISTING_FIELD (int): The existing field can't be updated with CREATE operation. It can be
+ updated with UPDATE operation only.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ CONCRETE_TYPE_REQUIRED = 2
+ INVALID_PLACEMENT_URL = 3
+ CANNOT_EXCLUDE_CRITERIA_TYPE = 4
+ CANNOT_SET_STATUS_FOR_CRITERIA_TYPE = 5
+ CANNOT_SET_STATUS_FOR_EXCLUDED_CRITERIA = 6
+ CANNOT_TARGET_AND_EXCLUDE = 7
+ TOO_MANY_OPERATIONS = 8
+ OPERATOR_NOT_SUPPORTED_FOR_CRITERION_TYPE = 9
+ SHOPPING_CAMPAIGN_SALES_COUNTRY_NOT_SUPPORTED_FOR_SALES_CHANNEL = 10
+ CANNOT_ADD_EXISTING_FIELD = 11
+
+
+class QueryErrorEnum(object):
+ class QueryError(enum.IntEnum):
+ """
+ Enum describing possible query errors.
+
+ Attributes:
+ UNSPECIFIED (int): Name unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ QUERY_ERROR (int): Returned if all other query error reasons are not applicable.
+ BAD_ENUM_CONSTANT (int): A condition used in the query references an invalid enum constant.
+ BAD_ESCAPE_SEQUENCE (int): Query contains an invalid escape sequence.
+ BAD_FIELD_NAME (int): Field name is invalid.
+ BAD_LIMIT_VALUE (int): Limit value is invalid (i.e. not a number)
+ BAD_NUMBER (int): Encountered number can not be parsed.
+ BAD_OPERATOR (int): Invalid operator encountered.
+ BAD_RESOURCE_TYPE_IN_FROM_CLAUSE (int): Invalid resource type was specified in the FROM clause.
+ BAD_SYMBOL (int): Non-ASCII symbol encountered outside of strings.
+ BAD_VALUE (int): Value is invalid.
+ DATE_RANGE_TOO_WIDE (int): Date filters fail to restrict date to a range smaller than 31 days.
+ Applicable if the query is segmented by date.
+ EXPECTED_AND (int): Expected AND between values with BETWEEN operator.
+ EXPECTED_BY (int): Expecting ORDER BY to have BY.
+ EXPECTED_DIMENSION_FIELD_IN_SELECT_CLAUSE (int): There was no dimension field selected.
+ EXPECTED_FILTERS_ON_DATE_RANGE (int): Missing filters on date related fields.
+ EXPECTED_FROM (int): Missing FROM clause.
+ EXPECTED_LIST (int): The operator used in the conditions requires the value to be a list.
+ EXPECTED_REFERENCED_FIELD_IN_SELECT_CLAUSE (int): Fields used in WHERE or ORDER BY clauses are missing from the SELECT
+ clause.
+ EXPECTED_SELECT (int): SELECT is missing at the beginning of query.
+ EXPECTED_SINGLE_VALUE (int): A list was passed as a value to a condition whose operator expects a
+ single value.
+ EXPECTED_VALUE_WITH_BETWEEN_OPERATOR (int): Missing one or both values with BETWEEN operator.
+ INVALID_DATE_FORMAT (int): Invalid date format. Expected 'YYYY-MM-DD'.
+ INVALID_STRING_VALUE (int): Value passed was not a string when it should have been. I.e., it was a
+ number or unquoted literal.
+ INVALID_VALUE_WITH_BETWEEN_OPERATOR (int): A String value passed to the BETWEEN operator does not parse as a date.
+ INVALID_VALUE_WITH_DURING_OPERATOR (int): The value passed to the DURING operator is not a Date range literal
+ INVALID_VALUE_WITH_LIKE_OPERATOR (int): A non-string value was passed to the LIKE operator.
+ OPERATOR_FIELD_MISMATCH (int): An operator was provided that is inapplicable to the field being
+ filtered.
+ PROHIBITED_EMPTY_LIST_IN_CONDITION (int): A Condition was found with an empty list.
+ PROHIBITED_ENUM_CONSTANT (int): A condition used in the query references an unsupported enum constant.
+ PROHIBITED_FIELD_COMBINATION_IN_SELECT_CLAUSE (int): Fields that are not allowed to be selected together were included in
+ the SELECT clause.
+ PROHIBITED_FIELD_IN_ORDER_BY_CLAUSE (int): A field that is not orderable was included in the ORDER BY clause.
+ PROHIBITED_FIELD_IN_SELECT_CLAUSE (int): A field that is not selectable was included in the SELECT clause.
+ PROHIBITED_FIELD_IN_WHERE_CLAUSE (int): A field that is not filterable was included in the WHERE clause.
+ PROHIBITED_RESOURCE_TYPE_IN_FROM_CLAUSE (int): Resource type specified in the FROM clause is not supported by this
+ service.
+ PROHIBITED_RESOURCE_TYPE_IN_SELECT_CLAUSE (int): A field that comes from an incompatible resource was included in the
+ SELECT clause.
+ PROHIBITED_RESOURCE_TYPE_IN_WHERE_CLAUSE (int): A field that comes from an incompatible resource was included in the
+ WHERE clause.
+ PROHIBITED_METRIC_IN_SELECT_OR_WHERE_CLAUSE (int): A metric incompatible with the main resource or other selected
+ segmenting resources was included in the SELECT or WHERE clause.
+ PROHIBITED_SEGMENT_IN_SELECT_OR_WHERE_CLAUSE (int): A segment incompatible with the main resource or other selected
+ segmenting resources was included in the SELECT or WHERE clause.
+ PROHIBITED_SEGMENT_WITH_METRIC_IN_SELECT_OR_WHERE_CLAUSE (int): A segment in the SELECT clause is incompatible with a metric in the
+ SELECT or WHERE clause.
+ LIMIT_VALUE_TOO_LOW (int): The value passed to the limit clause is too low.
+ PROHIBITED_NEWLINE_IN_STRING (int): Query has a string containing a newline character.
+ PROHIBITED_VALUE_COMBINATION_IN_LIST (int): List contains values of different types.
+ PROHIBITED_VALUE_COMBINATION_WITH_BETWEEN_OPERATOR (int): The values passed to the BETWEEN operator are not of the same type.
+ STRING_NOT_TERMINATED (int): Query contains unterminated string.
+ TOO_MANY_SEGMENTS (int): Too many segments are specified in SELECT clause.
+ UNEXPECTED_END_OF_QUERY (int): Query is incomplete and cannot be parsed.
+ UNEXPECTED_FROM_CLAUSE (int): FROM clause cannot be specified in this query.
+ UNRECOGNIZED_FIELD (int): Query contains one or more unrecognized fields.
+ UNEXPECTED_INPUT (int): Query has an unexpected extra part.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ QUERY_ERROR = 50
+ BAD_ENUM_CONSTANT = 18
+ BAD_ESCAPE_SEQUENCE = 7
+ BAD_FIELD_NAME = 12
+ BAD_LIMIT_VALUE = 15
+ BAD_NUMBER = 5
+ BAD_OPERATOR = 3
+ BAD_RESOURCE_TYPE_IN_FROM_CLAUSE = 45
+ BAD_SYMBOL = 2
+ BAD_VALUE = 4
+ DATE_RANGE_TOO_WIDE = 36
+ EXPECTED_AND = 30
+ EXPECTED_BY = 14
+ EXPECTED_DIMENSION_FIELD_IN_SELECT_CLAUSE = 37
+ EXPECTED_FILTERS_ON_DATE_RANGE = 55
+ EXPECTED_FROM = 44
+ EXPECTED_LIST = 41
+ EXPECTED_REFERENCED_FIELD_IN_SELECT_CLAUSE = 16
+ EXPECTED_SELECT = 13
+ EXPECTED_SINGLE_VALUE = 42
+ EXPECTED_VALUE_WITH_BETWEEN_OPERATOR = 29
+ INVALID_DATE_FORMAT = 38
+ INVALID_STRING_VALUE = 57
+ INVALID_VALUE_WITH_BETWEEN_OPERATOR = 26
+ INVALID_VALUE_WITH_DURING_OPERATOR = 22
+ INVALID_VALUE_WITH_LIKE_OPERATOR = 56
+ OPERATOR_FIELD_MISMATCH = 35
+ PROHIBITED_EMPTY_LIST_IN_CONDITION = 28
+ PROHIBITED_ENUM_CONSTANT = 54
+ PROHIBITED_FIELD_COMBINATION_IN_SELECT_CLAUSE = 31
+ PROHIBITED_FIELD_IN_ORDER_BY_CLAUSE = 40
+ PROHIBITED_FIELD_IN_SELECT_CLAUSE = 23
+ PROHIBITED_FIELD_IN_WHERE_CLAUSE = 24
+ PROHIBITED_RESOURCE_TYPE_IN_FROM_CLAUSE = 43
+ PROHIBITED_RESOURCE_TYPE_IN_SELECT_CLAUSE = 48
+ PROHIBITED_RESOURCE_TYPE_IN_WHERE_CLAUSE = 58
+ PROHIBITED_METRIC_IN_SELECT_OR_WHERE_CLAUSE = 49
+ PROHIBITED_SEGMENT_IN_SELECT_OR_WHERE_CLAUSE = 51
+ PROHIBITED_SEGMENT_WITH_METRIC_IN_SELECT_OR_WHERE_CLAUSE = 53
+ LIMIT_VALUE_TOO_LOW = 25
+ PROHIBITED_NEWLINE_IN_STRING = 8
+ PROHIBITED_VALUE_COMBINATION_IN_LIST = 10
+ PROHIBITED_VALUE_COMBINATION_WITH_BETWEEN_OPERATOR = 21
+ STRING_NOT_TERMINATED = 6
+ TOO_MANY_SEGMENTS = 34
+ UNEXPECTED_END_OF_QUERY = 9
+ UNEXPECTED_FROM_CLAUSE = 47
+ UNRECOGNIZED_FIELD = 32
+ UNEXPECTED_INPUT = 11
+
+
+class RequestErrorEnum(object):
+ class RequestError(enum.IntEnum):
+ """
+ Enum describing possible request errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ RESOURCE_NAME_MISSING (int): Resource name is required for this request.
+ RESOURCE_NAME_MALFORMED (int): Resource name provided is malformed.
+ BAD_RESOURCE_ID (int): Resource name provided is malformed.
+ INVALID_CUSTOMER_ID (int): Customer ID is invalid.
+ OPERATION_REQUIRED (int): Mutate operation should have either create, update, or remove specified.
+ RESOURCE_NOT_FOUND (int): Requested resource not found.
+ INVALID_PAGE_TOKEN (int): Next page token specified in user request is invalid.
+ EXPIRED_PAGE_TOKEN (int): Next page token specified in user request has expired.
+ REQUIRED_FIELD_MISSING (int): Required field is missing.
+ IMMUTABLE_FIELD (int): The field cannot be modified because it's immutable. It's also possible
+ that the field can be modified using 'create' operation but not 'update'.
+ TOO_MANY_MUTATE_OPERATIONS (int): Received too many entries in request.
+ CANNOT_BE_EXECUTED_BY_MANAGER_ACCOUNT (int): Request cannot be executed by a manager account.
+ CANNOT_MODIFY_FOREIGN_FIELD (int): Mutate request was attempting to modify a readonly field.
+ For instance, Budget fields can be requested for Ad Group,
+ but are read-only for adGroups:mutate.
+ INVALID_ENUM_VALUE (int): Enum value is not permitted.
+ DEVELOPER_TOKEN_PARAMETER_MISSING (int): The developer-token parameter is required for all requests.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ RESOURCE_NAME_MISSING = 3
+ RESOURCE_NAME_MALFORMED = 4
+ BAD_RESOURCE_ID = 17
+ INVALID_CUSTOMER_ID = 16
+ OPERATION_REQUIRED = 5
+ RESOURCE_NOT_FOUND = 6
+ INVALID_PAGE_TOKEN = 7
+ EXPIRED_PAGE_TOKEN = 8
+ REQUIRED_FIELD_MISSING = 9
+ IMMUTABLE_FIELD = 11
+ TOO_MANY_MUTATE_OPERATIONS = 13
+ CANNOT_BE_EXECUTED_BY_MANAGER_ACCOUNT = 14
+ CANNOT_MODIFY_FOREIGN_FIELD = 15
+ INVALID_ENUM_VALUE = 18
+ DEVELOPER_TOKEN_PARAMETER_MISSING = 19
+
+
+class ResourceAccessDeniedErrorEnum(object):
+ class ResourceAccessDeniedError(enum.IntEnum):
+ """
+ Enum describing possible resource access denied errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ WRITE_ACCESS_DENIED (int): User did not have write access.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ WRITE_ACCESS_DENIED = 3
+
+
+class DateErrorEnum(object):
+ class DateError(enum.IntEnum):
+ """
+ Enum describing possible date errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ INVALID_FIELD_VALUES_IN_DATE (int): Given field values do not correspond to a valid date.
+ INVALID_FIELD_VALUES_IN_DATE_TIME (int): Given field values do not correspond to a valid date time.
+ INVALID_STRING_DATE (int): The string date's format should be yyyymmdd.
+ INVALID_STRING_DATE_TIME (int): The string date time's format should be yyyymmdd hhmmss [tz].
+ EARLIER_THAN_MINIMUM_DATE (int): Date is before allowed minimum.
+ LATER_THAN_MAXIMUM_DATE (int): Date is after allowed maximum.
+ DATE_RANGE_MINIMUM_DATE_LATER_THAN_MAXIMUM_DATE (int): Date range bounds are not in order.
+ DATE_RANGE_MINIMUM_AND_MAXIMUM_DATES_BOTH_NULL (int): Both dates in range are null.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ INVALID_FIELD_VALUES_IN_DATE = 2
+ INVALID_FIELD_VALUES_IN_DATE_TIME = 3
+ INVALID_STRING_DATE = 4
+ INVALID_STRING_DATE_TIME = 6
+ EARLIER_THAN_MINIMUM_DATE = 7
+ LATER_THAN_MAXIMUM_DATE = 8
+ DATE_RANGE_MINIMUM_DATE_LATER_THAN_MAXIMUM_DATE = 9
+ DATE_RANGE_MINIMUM_AND_MAXIMUM_DATES_BOTH_NULL = 10
+
+
+class MultiplierErrorEnum(object):
+ class MultiplierError(enum.IntEnum):
+ """
+ Enum describing possible multiplier errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ MULTIPLIER_TOO_HIGH (int): Multiplier value is too high
+ MULTIPLIER_TOO_LOW (int): Multiplier value is too low
+ TOO_MANY_FRACTIONAL_DIGITS (int): Too many fractional digits
+ MULTIPLIER_NOT_ALLOWED_FOR_BIDDING_STRATEGY (int): A multiplier cannot be set for this bidding strategy
+ MULTIPLIER_NOT_ALLOWED_WHEN_BASE_BID_IS_MISSING (int): A multiplier cannot be set when there is no base bid (e.g., content max
+ cpc)
+ NO_MULTIPLIER_SPECIFIED (int): A bid multiplier must be specified
+ MULTIPLIER_CAUSES_BID_TO_EXCEED_DAILY_BUDGET (int): Multiplier causes bid to exceed daily budget
+ MULTIPLIER_CAUSES_BID_TO_EXCEED_MONTHLY_BUDGET (int): Multiplier causes bid to exceed monthly budget
+ MULTIPLIER_CAUSES_BID_TO_EXCEED_CUSTOM_BUDGET (int): Multiplier causes bid to exceed custom budget
+ MULTIPLIER_CAUSES_BID_TO_EXCEED_MAX_ALLOWED_BID (int): Multiplier causes bid to exceed maximum allowed bid
+ BID_LESS_THAN_MIN_ALLOWED_BID_WITH_MULTIPLIER (int): Multiplier causes bid to become less than the minimum bid allowed
+ MULTIPLIER_AND_BIDDING_STRATEGY_TYPE_MISMATCH (int): Multiplier type (cpc vs. cpm) needs to match campaign's bidding strategy
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ MULTIPLIER_TOO_HIGH = 2
+ MULTIPLIER_TOO_LOW = 3
+ TOO_MANY_FRACTIONAL_DIGITS = 4
+ MULTIPLIER_NOT_ALLOWED_FOR_BIDDING_STRATEGY = 5
+ MULTIPLIER_NOT_ALLOWED_WHEN_BASE_BID_IS_MISSING = 6
+ NO_MULTIPLIER_SPECIFIED = 7
+ MULTIPLIER_CAUSES_BID_TO_EXCEED_DAILY_BUDGET = 8
+ MULTIPLIER_CAUSES_BID_TO_EXCEED_MONTHLY_BUDGET = 9
+ MULTIPLIER_CAUSES_BID_TO_EXCEED_CUSTOM_BUDGET = 10
+ MULTIPLIER_CAUSES_BID_TO_EXCEED_MAX_ALLOWED_BID = 11
+ BID_LESS_THAN_MIN_ALLOWED_BID_WITH_MULTIPLIER = 12
+ MULTIPLIER_AND_BIDDING_STRATEGY_TYPE_MISMATCH = 13
+
+
+class FieldErrorEnum(object):
+ class FieldError(enum.IntEnum):
+ """
+ Enum describing possible field errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ REQUIRED (int): The required field was not present in the resource.
+ IMMUTABLE_FIELD (int): The field attempted to be mutated is immutable.
+ INVALID_VALUE (int): The field's value is invalid.
+ VALUE_MUST_BE_UNSET (int): The field cannot be set.
+ REQUIRED_NONEMPTY_LIST (int): The required repeated field was empty.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ REQUIRED = 2
+ IMMUTABLE_FIELD = 3
+ INVALID_VALUE = 4
+ VALUE_MUST_BE_UNSET = 5
+ REQUIRED_NONEMPTY_LIST = 6
+
+
+class NullErrorEnum(object):
+ class NullError(enum.IntEnum):
+ """
+ Enum describing possible null errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ NULL_CONTENT (int): Specified list/container must not contain any null elements
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ NULL_CONTENT = 2
+
+
+class AdErrorEnum(object):
+ class AdError(enum.IntEnum):
+ """
+ Enum describing possible ad errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ AD_CUSTOMIZERS_NOT_SUPPORTED_FOR_AD_TYPE (int): Ad customizers are not supported for ad type.
+ APPROXIMATELY_TOO_LONG (int): Estimating character sizes the string is too long.
+ APPROXIMATELY_TOO_SHORT (int): Estimating character sizes the string is too short.
+ BAD_SNIPPET (int): There is a problem with the snippet.
+ CANNOT_MODIFY_AD (int): Cannot modify an ad.
+ CANNOT_SET_BUSINESS_NAME_IF_URL_SET (int): business name and url cannot be set at the same time
+ CANNOT_SET_FIELD (int): The specified field is incompatible with this ad's type or settings.
+ CANNOT_SET_FIELD_WITH_ORIGIN_AD_ID_SET (int): Cannot set field when originAdId is set.
+ CANNOT_SET_FIELD_WITH_AD_ID_SET_FOR_SHARING (int): Cannot set field when an existing ad id is set for sharing.
+ CANNOT_SET_ALLOW_FLEXIBLE_COLOR_FALSE (int): Cannot set allowFlexibleColor false if no color is provided by user.
+ CANNOT_SET_COLOR_CONTROL_WHEN_NATIVE_FORMAT_SETTING (int): When user select native, no color control is allowed because we will
+ always respect publisher color for native format serving.
+ CANNOT_SET_URL (int): Cannot specify a url for the ad type
+ CANNOT_SET_WITHOUT_FINAL_URLS (int): Cannot specify a tracking or mobile url without also setting final urls
+ CANNOT_SET_WITH_FINAL_URLS (int): Cannot specify a legacy url and a final url simultaneously
+ CANNOT_SET_WITH_TRACKING_URL_TEMPLATE (int): Cannot specify a legacy url and a tracking url template simultaneously in
+ a DSA.
+ CANNOT_SET_WITH_URL_DATA (int): Cannot specify a urls in UrlData and in template fields simultaneously.
+ CANNOT_USE_AD_SUBCLASS_FOR_OPERATOR (int): This operator cannot be used with a subclass of Ad.
+ CUSTOMER_NOT_APPROVED_MOBILEADS (int): Customer is not approved for mobile ads.
+ CUSTOMER_NOT_APPROVED_THIRDPARTY_ADS (int): Customer is not approved for 3PAS richmedia ads.
+ CUSTOMER_NOT_APPROVED_THIRDPARTY_REDIRECT_ADS (int): Customer is not approved for 3PAS redirect richmedia (Ad Exchange) ads.
+ CUSTOMER_NOT_ELIGIBLE (int): Not an eligible customer
+ CUSTOMER_NOT_ELIGIBLE_FOR_UPDATING_BEACON_URL (int): Customer is not eligible for updating beacon url
+ DIMENSION_ALREADY_IN_UNION (int): There already exists an ad with the same dimensions in the union.
+ DIMENSION_MUST_BE_SET (int): Ad's dimension must be set before setting union dimension.
+ DIMENSION_NOT_IN_UNION (int): Ad's dimension must be included in the union dimensions.
+ DISPLAY_URL_CANNOT_BE_SPECIFIED (int): Display Url cannot be specified (applies to Ad Exchange Ads)
+ DOMESTIC_PHONE_NUMBER_FORMAT (int): Telephone number contains invalid characters or invalid format. Please
+ re-enter your number using digits (0-9), dashes (-), and parentheses
+ only.
+ EMERGENCY_PHONE_NUMBER (int): Emergency telephone numbers are not allowed. Please enter a valid
+ domestic phone number to connect customers to your business.
+ EMPTY_FIELD (int): A required field was not specified or is an empty string.
+ FEED_ATTRIBUTE_MUST_HAVE_MAPPING_FOR_TYPE_ID (int): A feed attribute referenced in an ad customizer tag is not in the ad
+ customizer mapping for the feed.
+ FEED_ATTRIBUTE_MAPPING_TYPE_MISMATCH (int): The ad customizer field mapping for the feed attribute does not match the
+ expected field type.
+ ILLEGAL_AD_CUSTOMIZER_TAG_USE (int): The use of ad customizer tags in the ad text is disallowed. Details in
+ trigger.
+ ILLEGAL_TAG_USE (int): Tags of the form {PH_x}, where x is a number, are disallowed in ad text.
+ INCONSISTENT_DIMENSIONS (int): The dimensions of the ad are specified or derived in multiple ways and
+ are not consistent.
+ INCONSISTENT_STATUS_IN_TEMPLATE_UNION (int): The status cannot differ among template ads of the same union.
+ INCORRECT_LENGTH (int): The length of the string is not valid.
+ INELIGIBLE_FOR_UPGRADE (int): The ad is ineligible for upgrade.
+ INVALID_AD_ADDRESS_CAMPAIGN_TARGET (int): User cannot create mobile ad for countries targeted in specified
+ campaign.
+ INVALID_AD_TYPE (int): Invalid Ad type. A specific type of Ad is required.
+ INVALID_ATTRIBUTES_FOR_MOBILE_IMAGE (int): Headline, description or phone cannot be present when creating mobile
+ image ad.
+ INVALID_ATTRIBUTES_FOR_MOBILE_TEXT (int): Image cannot be present when creating mobile text ad.
+ INVALID_CALL_TO_ACTION_TEXT (int): Invalid call to action text.
+ INVALID_CHARACTER_FOR_URL (int): Invalid character in URL.
+ INVALID_COUNTRY_CODE (int): Creative's country code is not valid.
+ INVALID_DSA_URL_TAG (int): Invalid use of Dynamic Search Ads tags ({lpurl} etc.)
+ INVALID_EXPANDED_DYNAMIC_SEARCH_AD_TAG (int): Invalid use of Expanded Dynamic Search Ads tags ({lpurl} etc.)
+ INVALID_INPUT (int): An input error whose real reason was not properly mapped (should not
+ happen).
+ INVALID_MARKUP_LANGUAGE (int): An invalid markup language was entered.
+ INVALID_MOBILE_CARRIER (int): An invalid mobile carrier was entered.
+ INVALID_MOBILE_CARRIER_TARGET (int): Specified mobile carriers target a country not targeted by the campaign.
+ INVALID_NUMBER_OF_ELEMENTS (int): Wrong number of elements for given element type
+ INVALID_PHONE_NUMBER_FORMAT (int): The format of the telephone number is incorrect. Please re-enter the
+ number using the correct format.
+ INVALID_RICH_MEDIA_CERTIFIED_VENDOR_FORMAT_ID (int): The certified vendor format id is incorrect.
+ INVALID_TEMPLATE_DATA (int): The template ad data contains validation errors.
+ INVALID_TEMPLATE_ELEMENT_FIELD_TYPE (int): The template field doesn't have have the correct type.
+ INVALID_TEMPLATE_ID (int): Invalid template id.
+ LINE_TOO_WIDE (int): After substituting replacement strings, the line is too wide.
+ MISSING_AD_CUSTOMIZER_MAPPING (int): The feed referenced must have ad customizer mapping to be used in a
+ customizer tag.
+ MISSING_ADDRESS_COMPONENT (int): Missing address component in template element address field.
+ MISSING_ADVERTISEMENT_NAME (int): An ad name must be entered.
+ MISSING_BUSINESS_NAME (int): Business name must be entered.
+ MISSING_DESCRIPTION1 (int): Description (line 2) must be entered.
+ MISSING_DESCRIPTION2 (int): Description (line 3) must be entered.
+ MISSING_DESTINATION_URL_TAG (int): The destination url must contain at least one tag (e.g. {lpurl})
+ MISSING_LANDING_PAGE_URL_TAG (int): The tracking url template of ExpandedDynamicSearchAd must contain at
+ least one tag. (e.g. {lpurl})
+ MISSING_DIMENSION (int): A valid dimension must be specified for this ad.
+ MISSING_DISPLAY_URL (int): A display URL must be entered.
+ MISSING_HEADLINE (int): Headline must be entered.
+ MISSING_HEIGHT (int): A height must be entered.
+ MISSING_IMAGE (int): An image must be entered.
+ MISSING_MARKETING_IMAGE_OR_PRODUCT_VIDEOS (int): Marketing image or product videos are required.
+ MISSING_MARKUP_LANGUAGES (int): The markup language in which your site is written must be entered.
+ MISSING_MOBILE_CARRIER (int): A mobile carrier must be entered.
+ MISSING_PHONE (int): Phone number must be entered.
+ MISSING_REQUIRED_TEMPLATE_FIELDS (int): Missing required template fields
+ MISSING_TEMPLATE_FIELD_VALUE (int): Missing a required field value
+ MISSING_TEXT (int): The ad must have text.
+ MISSING_VISIBLE_URL (int): A visible URL must be entered.
+ MISSING_WIDTH (int): A width must be entered.
+ MULTIPLE_DISTINCT_FEEDS_UNSUPPORTED (int): Only 1 feed can be used as the source of ad customizer substitutions in a
+ single ad.
+ MUST_USE_TEMP_AD_UNION_ID_ON_ADD (int): TempAdUnionId must be use when adding template ads.
+ TOO_LONG (int): The string has too many characters.
+ TOO_SHORT (int): The string has too few characters.
+ UNION_DIMENSIONS_CANNOT_CHANGE (int): Ad union dimensions cannot change for saved ads.
+ UNKNOWN_ADDRESS_COMPONENT (int): Address component is not {country, lat, lng}.
+ UNKNOWN_FIELD_NAME (int): Unknown unique field name
+ UNKNOWN_UNIQUE_NAME (int): Unknown unique name (template element type specifier)
+ UNSUPPORTED_DIMENSIONS (int): Unsupported ad dimension
+ URL_INVALID_SCHEME (int): URL starts with an invalid scheme.
+ URL_INVALID_TOP_LEVEL_DOMAIN (int): URL ends with an invalid top-level domain name.
+ URL_MALFORMED (int): URL contains illegal characters.
+ URL_NO_HOST (int): URL must contain a host name.
+ URL_NOT_EQUIVALENT (int): URL not equivalent during upgrade.
+ URL_HOST_NAME_TOO_LONG (int): URL host name too long to be stored as visible URL (applies to Ad
+ Exchange ads)
+ URL_NO_SCHEME (int): URL must start with a scheme.
+ URL_NO_TOP_LEVEL_DOMAIN (int): URL should end in a valid domain extension, such as .com or .net.
+ URL_PATH_NOT_ALLOWED (int): URL must not end with a path.
+ URL_PORT_NOT_ALLOWED (int): URL must not specify a port.
+ URL_QUERY_NOT_ALLOWED (int): URL must not contain a query.
+ URL_SCHEME_BEFORE_DSA_TAG (int): A url scheme is not allowed in front of tag in dest url (e.g.
+ http://{lpurl})
+ URL_SCHEME_BEFORE_EXPANDED_DYNAMIC_SEARCH_AD_TAG (int): A url scheme is not allowed in front of tag in tracking url template
+ (e.g. http://{lpurl})
+ USER_DOES_NOT_HAVE_ACCESS_TO_TEMPLATE (int): The user does not have permissions to create a template ad for the given
+ template.
+ INCONSISTENT_EXPANDABLE_SETTINGS (int): Expandable setting is inconsistent/wrong. For example, an AdX ad is
+ invalid if it has a expandable vendor format but no expanding directions
+ specified, or expanding directions is specified, but the vendor format is
+ not expandable.
+ INVALID_FORMAT (int): Format is invalid
+ INVALID_FIELD_TEXT (int): The text of this field did not match a pattern of allowed values.
+ ELEMENT_NOT_PRESENT (int): Template element is mising
+ IMAGE_ERROR (int): Error occurred during image processing
+ VALUE_NOT_IN_RANGE (int): The value is not within the valid range
+ FIELD_NOT_PRESENT (int): Template element field is not present
+ ADDRESS_NOT_COMPLETE (int): Address is incomplete
+ ADDRESS_INVALID (int): Invalid address
+ VIDEO_RETRIEVAL_ERROR (int): Error retrieving specified video
+ AUDIO_ERROR (int): Error processing audio
+ INVALID_YOUTUBE_DISPLAY_URL (int): Display URL is incorrect for YouTube PYV ads
+ TOO_MANY_PRODUCT_IMAGES (int): Too many product Images in GmailAd
+ TOO_MANY_PRODUCT_VIDEOS (int): Too many product Videos in GmailAd
+ INCOMPATIBLE_AD_TYPE_AND_DEVICE_PREFERENCE (int): The device preference is not compatible with the ad type
+ CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY (int): Call tracking is not supported for specified country.
+ CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED (int): Carrier specific short number is not allowed.
+ DISALLOWED_NUMBER_TYPE (int): Specified phone number type is disallowed.
+ PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY (int): Phone number not supported for country.
+ PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY (int): Phone number not supported with call tracking enabled for country.
+ PREMIUM_RATE_NUMBER_NOT_ALLOWED (int): Premium rate phone number is not allowed.
+ VANITY_PHONE_NUMBER_NOT_ALLOWED (int): Vanity phone number is not allowed.
+ INVALID_CALL_CONVERSION_TYPE_ID (int): Invalid call conversion type id.
+ CANNOT_DISABLE_CALL_CONVERSION_AND_SET_CONVERSION_TYPE_ID (int): Cannot disable call conversion and set conversion type id.
+ CANNOT_SET_PATH2_WITHOUT_PATH1 (int): Cannot set path2 without path1.
+ MISSING_DYNAMIC_SEARCH_ADS_SETTING_DOMAIN_NAME (int): Missing domain name in campaign setting when adding expanded dynamic
+ search ad.
+ INCOMPATIBLE_WITH_RESTRICTION_TYPE (int): The associated ad is not compatible with restriction type.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ AD_CUSTOMIZERS_NOT_SUPPORTED_FOR_AD_TYPE = 2
+ APPROXIMATELY_TOO_LONG = 3
+ APPROXIMATELY_TOO_SHORT = 4
+ BAD_SNIPPET = 5
+ CANNOT_MODIFY_AD = 6
+ CANNOT_SET_BUSINESS_NAME_IF_URL_SET = 7
+ CANNOT_SET_FIELD = 8
+ CANNOT_SET_FIELD_WITH_ORIGIN_AD_ID_SET = 9
+ CANNOT_SET_FIELD_WITH_AD_ID_SET_FOR_SHARING = 10
+ CANNOT_SET_ALLOW_FLEXIBLE_COLOR_FALSE = 11
+ CANNOT_SET_COLOR_CONTROL_WHEN_NATIVE_FORMAT_SETTING = 12
+ CANNOT_SET_URL = 13
+ CANNOT_SET_WITHOUT_FINAL_URLS = 14
+ CANNOT_SET_WITH_FINAL_URLS = 15
+ CANNOT_SET_WITH_TRACKING_URL_TEMPLATE = 16
+ CANNOT_SET_WITH_URL_DATA = 17
+ CANNOT_USE_AD_SUBCLASS_FOR_OPERATOR = 18
+ CUSTOMER_NOT_APPROVED_MOBILEADS = 19
+ CUSTOMER_NOT_APPROVED_THIRDPARTY_ADS = 20
+ CUSTOMER_NOT_APPROVED_THIRDPARTY_REDIRECT_ADS = 21
+ CUSTOMER_NOT_ELIGIBLE = 22
+ CUSTOMER_NOT_ELIGIBLE_FOR_UPDATING_BEACON_URL = 23
+ DIMENSION_ALREADY_IN_UNION = 24
+ DIMENSION_MUST_BE_SET = 25
+ DIMENSION_NOT_IN_UNION = 26
+ DISPLAY_URL_CANNOT_BE_SPECIFIED = 27
+ DOMESTIC_PHONE_NUMBER_FORMAT = 28
+ EMERGENCY_PHONE_NUMBER = 29
+ EMPTY_FIELD = 30
+ FEED_ATTRIBUTE_MUST_HAVE_MAPPING_FOR_TYPE_ID = 31
+ FEED_ATTRIBUTE_MAPPING_TYPE_MISMATCH = 32
+ ILLEGAL_AD_CUSTOMIZER_TAG_USE = 33
+ ILLEGAL_TAG_USE = 34
+ INCONSISTENT_DIMENSIONS = 35
+ INCONSISTENT_STATUS_IN_TEMPLATE_UNION = 36
+ INCORRECT_LENGTH = 37
+ INELIGIBLE_FOR_UPGRADE = 38
+ INVALID_AD_ADDRESS_CAMPAIGN_TARGET = 39
+ INVALID_AD_TYPE = 40
+ INVALID_ATTRIBUTES_FOR_MOBILE_IMAGE = 41
+ INVALID_ATTRIBUTES_FOR_MOBILE_TEXT = 42
+ INVALID_CALL_TO_ACTION_TEXT = 43
+ INVALID_CHARACTER_FOR_URL = 44
+ INVALID_COUNTRY_CODE = 45
+ INVALID_DSA_URL_TAG = 46
+ INVALID_EXPANDED_DYNAMIC_SEARCH_AD_TAG = 47
+ INVALID_INPUT = 48
+ INVALID_MARKUP_LANGUAGE = 49
+ INVALID_MOBILE_CARRIER = 50
+ INVALID_MOBILE_CARRIER_TARGET = 51
+ INVALID_NUMBER_OF_ELEMENTS = 52
+ INVALID_PHONE_NUMBER_FORMAT = 53
+ INVALID_RICH_MEDIA_CERTIFIED_VENDOR_FORMAT_ID = 54
+ INVALID_TEMPLATE_DATA = 55
+ INVALID_TEMPLATE_ELEMENT_FIELD_TYPE = 56
+ INVALID_TEMPLATE_ID = 57
+ LINE_TOO_WIDE = 58
+ MISSING_AD_CUSTOMIZER_MAPPING = 59
+ MISSING_ADDRESS_COMPONENT = 60
+ MISSING_ADVERTISEMENT_NAME = 61
+ MISSING_BUSINESS_NAME = 62
+ MISSING_DESCRIPTION1 = 63
+ MISSING_DESCRIPTION2 = 64
+ MISSING_DESTINATION_URL_TAG = 65
+ MISSING_LANDING_PAGE_URL_TAG = 66
+ MISSING_DIMENSION = 67
+ MISSING_DISPLAY_URL = 68
+ MISSING_HEADLINE = 69
+ MISSING_HEIGHT = 70
+ MISSING_IMAGE = 71
+ MISSING_MARKETING_IMAGE_OR_PRODUCT_VIDEOS = 72
+ MISSING_MARKUP_LANGUAGES = 73
+ MISSING_MOBILE_CARRIER = 74
+ MISSING_PHONE = 75
+ MISSING_REQUIRED_TEMPLATE_FIELDS = 76
+ MISSING_TEMPLATE_FIELD_VALUE = 77
+ MISSING_TEXT = 78
+ MISSING_VISIBLE_URL = 79
+ MISSING_WIDTH = 80
+ MULTIPLE_DISTINCT_FEEDS_UNSUPPORTED = 81
+ MUST_USE_TEMP_AD_UNION_ID_ON_ADD = 82
+ TOO_LONG = 83
+ TOO_SHORT = 84
+ UNION_DIMENSIONS_CANNOT_CHANGE = 85
+ UNKNOWN_ADDRESS_COMPONENT = 86
+ UNKNOWN_FIELD_NAME = 87
+ UNKNOWN_UNIQUE_NAME = 88
+ UNSUPPORTED_DIMENSIONS = 89
+ URL_INVALID_SCHEME = 90
+ URL_INVALID_TOP_LEVEL_DOMAIN = 91
+ URL_MALFORMED = 92
+ URL_NO_HOST = 93
+ URL_NOT_EQUIVALENT = 94
+ URL_HOST_NAME_TOO_LONG = 95
+ URL_NO_SCHEME = 96
+ URL_NO_TOP_LEVEL_DOMAIN = 97
+ URL_PATH_NOT_ALLOWED = 98
+ URL_PORT_NOT_ALLOWED = 99
+ URL_QUERY_NOT_ALLOWED = 100
+ URL_SCHEME_BEFORE_DSA_TAG = 101
+ URL_SCHEME_BEFORE_EXPANDED_DYNAMIC_SEARCH_AD_TAG = 102
+ USER_DOES_NOT_HAVE_ACCESS_TO_TEMPLATE = 103
+ INCONSISTENT_EXPANDABLE_SETTINGS = 104
+ INVALID_FORMAT = 105
+ INVALID_FIELD_TEXT = 106
+ ELEMENT_NOT_PRESENT = 107
+ IMAGE_ERROR = 108
+ VALUE_NOT_IN_RANGE = 109
+ FIELD_NOT_PRESENT = 110
+ ADDRESS_NOT_COMPLETE = 111
+ ADDRESS_INVALID = 112
+ VIDEO_RETRIEVAL_ERROR = 113
+ AUDIO_ERROR = 114
+ INVALID_YOUTUBE_DISPLAY_URL = 115
+ TOO_MANY_PRODUCT_IMAGES = 116
+ TOO_MANY_PRODUCT_VIDEOS = 117
+ INCOMPATIBLE_AD_TYPE_AND_DEVICE_PREFERENCE = 118
+ CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY = 119
+ CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED = 120
+ DISALLOWED_NUMBER_TYPE = 121
+ PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY = 122
+ PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY = 123
+ PREMIUM_RATE_NUMBER_NOT_ALLOWED = 124
+ VANITY_PHONE_NUMBER_NOT_ALLOWED = 125
+ INVALID_CALL_CONVERSION_TYPE_ID = 126
+ CANNOT_DISABLE_CALL_CONVERSION_AND_SET_CONVERSION_TYPE_ID = 127
+ CANNOT_SET_PATH2_WITHOUT_PATH1 = 128
+ MISSING_DYNAMIC_SEARCH_ADS_SETTING_DOMAIN_NAME = 129
+ INCOMPATIBLE_WITH_RESTRICTION_TYPE = 130
+
+
+class AuthenticationErrorEnum(object):
+ class AuthenticationError(enum.IntEnum):
+ """
+ Enum describing possible authentication errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ AUTHENTICATION_ERROR (int): Authentication of the request failed.
+ CLIENT_CUSTOMER_ID_INVALID (int): Client customer Id is not a number.
+ CUSTOMER_NOT_FOUND (int): No customer found for the provided customer id.
+ GOOGLE_ACCOUNT_DELETED (int): Client's Google Account is deleted.
+ GOOGLE_ACCOUNT_COOKIE_INVALID (int): Google account login token in the cookie is invalid.
+ FAILED_TO_AUTHENTICATE_GOOGLE_ACCOUNT (int): A problem occurred during Google account authentication.
+ GOOGLE_ACCOUNT_USER_AND_ADS_USER_MISMATCH (int): The user in the google account login token does not match the UserId in
+ the cookie.
+ LOGIN_COOKIE_REQUIRED (int): Login cookie is required for authentication.
+ NOT_ADS_USER (int): User in the cookie is not a valid Ads user.
+ OAUTH_TOKEN_INVALID (int): Oauth token in the header is not valid.
+ OAUTH_TOKEN_EXPIRED (int): Oauth token in the header has expired.
+ OAUTH_TOKEN_DISABLED (int): Oauth token in the header has been disabled.
+ OAUTH_TOKEN_REVOKED (int): Oauth token in the header has been revoked.
+ OAUTH_TOKEN_HEADER_INVALID (int): Oauth token HTTP header is malformed.
+ LOGIN_COOKIE_INVALID (int): Login cookie is not valid.
+ FAILED_TO_RETRIEVE_LOGIN_COOKIE (int): Failed to decrypt the login cookie.
+ USER_ID_INVALID (int): User Id in the header is not a valid id.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ AUTHENTICATION_ERROR = 2
+ CLIENT_CUSTOMER_ID_INVALID = 5
+ CUSTOMER_NOT_FOUND = 8
+ GOOGLE_ACCOUNT_DELETED = 9
+ GOOGLE_ACCOUNT_COOKIE_INVALID = 10
+ FAILED_TO_AUTHENTICATE_GOOGLE_ACCOUNT = 11
+ GOOGLE_ACCOUNT_USER_AND_ADS_USER_MISMATCH = 12
+ LOGIN_COOKIE_REQUIRED = 13
+ NOT_ADS_USER = 14
+ OAUTH_TOKEN_INVALID = 15
+ OAUTH_TOKEN_EXPIRED = 16
+ OAUTH_TOKEN_DISABLED = 17
+ OAUTH_TOKEN_REVOKED = 18
+ OAUTH_TOKEN_HEADER_INVALID = 19
+ LOGIN_COOKIE_INVALID = 20
+ FAILED_TO_RETRIEVE_LOGIN_COOKIE = 21
+ USER_ID_INVALID = 22
+
+
+class CampaignBudgetErrorEnum(object):
+ class CampaignBudgetError(enum.IntEnum):
+ """
+ Enum describing possible campaign budget errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ CAMPAIGN_BUDGET_REMOVED (int): The requested campaign budget no longer exists.
+ CAMPAIGN_BUDGET_IN_USE (int): The campaign budget is associated with at least one campaign, and so the
+ campaign budget cannot be removed.
+ CAMPAIGN_BUDGET_PERIOD_NOT_AVAILABLE (int): Customer is not whitelisted for this campaign budget period.
+ CANNOT_MODIFY_FIELD_OF_IMPLICITLY_SHARED_CAMPAIGN_BUDGET (int): This field is not mutable on implicitly shared campaign budgets
+ CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_IMPLICITLY_SHARED (int): Cannot change explicitly shared campaign budgets back to implicitly
+ shared ones.
+ CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED_WITHOUT_NAME (int): An implicit campaign budget without a name cannot be changed to
+ explicitly shared campaign budget.
+ CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED (int): Cannot change an implicitly shared campaign budget to an explicitly
+ shared one.
+ CANNOT_USE_IMPLICITLY_SHARED_CAMPAIGN_BUDGET_WITH_MULTIPLE_CAMPAIGNS (int): Only explicitly shared campaign budgets can be used with multiple
+ campaigns.
+ DUPLICATE_NAME (int): A campaign budget with this name already exists.
+ MONEY_AMOUNT_IN_WRONG_CURRENCY (int): A money amount was not in the expected currency.
+ MONEY_AMOUNT_LESS_THAN_CURRENCY_MINIMUM_CPC (int): A money amount was less than the minimum CPC for currency.
+ MONEY_AMOUNT_TOO_LARGE (int): A money amount was greater than the maximum allowed.
+ NEGATIVE_MONEY_AMOUNT (int): A money amount was negative.
+ NON_MULTIPLE_OF_MINIMUM_CURRENCY_UNIT (int): A money amount was not a multiple of a minimum unit.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ CAMPAIGN_BUDGET_REMOVED = 2
+ CAMPAIGN_BUDGET_IN_USE = 3
+ CAMPAIGN_BUDGET_PERIOD_NOT_AVAILABLE = 4
+ CANNOT_MODIFY_FIELD_OF_IMPLICITLY_SHARED_CAMPAIGN_BUDGET = 6
+ CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_IMPLICITLY_SHARED = 7
+ CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED_WITHOUT_NAME = 8
+ CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED = 9
+ CANNOT_USE_IMPLICITLY_SHARED_CAMPAIGN_BUDGET_WITH_MULTIPLE_CAMPAIGNS = 10
+ DUPLICATE_NAME = 11
+ MONEY_AMOUNT_IN_WRONG_CURRENCY = 12
+ MONEY_AMOUNT_LESS_THAN_CURRENCY_MINIMUM_CPC = 13
+ MONEY_AMOUNT_TOO_LARGE = 14
+ NEGATIVE_MONEY_AMOUNT = 15
+ NON_MULTIPLE_OF_MINIMUM_CURRENCY_UNIT = 16
+
+
+class RecommendationErrorEnum(object):
+ class RecommendationError(enum.IntEnum):
+ """
+ Enum describing possible errors from applying a recommendation.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ BUDGET_AMOUNT_TOO_SMALL (int): The specified budget amount is too low e.g. lower than minimum currency
+ unit or lower than ad group minimum cost-per-click.
+ BUDGET_AMOUNT_TOO_LARGE (int): The specified budget amount is too large.
+ INVALID_BUDGET_AMOUNT (int): The specified budget amount is not a valid amount. e.g. not a multiple
+ of minimum currency unit.
+ POLICY_ERROR (int): The specified keyword or ad violates ad policy.
+ INVALID_BID_AMOUNT (int): The specified bid amount is not valid. e.g. too many fractional digits,
+ or negative amount.
+ ADGROUP_KEYWORD_LIMIT (int): The number of keywords in ad group have reached the maximum allowed.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ BUDGET_AMOUNT_TOO_SMALL = 2
+ BUDGET_AMOUNT_TOO_LARGE = 3
+ INVALID_BUDGET_AMOUNT = 4
+ POLICY_ERROR = 5
+ INVALID_BID_AMOUNT = 6
+ ADGROUP_KEYWORD_LIMIT = 7
+
+
+class NotEmptyErrorEnum(object):
+ class NotEmptyError(enum.IntEnum):
+ """
+ Enum describing possible not empty errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ EMPTY_LIST (int): Empty list.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ EMPTY_LIST = 2
+
+
+class QuotaErrorEnum(object):
+ class QuotaError(enum.IntEnum):
+ """
+ Enum describing possible quota errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ RESOURCE_EXHAUSTED (int): Too many requests.
+ ACCESS_PROHIBITED (int): Access is prohibited.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ RESOURCE_EXHAUSTED = 2
+ ACCESS_PROHIBITED = 3
+
+
+class AuthorizationErrorEnum(object):
+ class AuthorizationError(enum.IntEnum):
+ """
+ Enum describing possible authorization errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ USER_PERMISSION_DENIED (int): User doesn't have permission to access customer.
+ DEVELOPER_TOKEN_NOT_WHITELISTED (int): The developer token is not whitelisted.
+ DEVELOPER_TOKEN_PROHIBITED (int): The developer token is not allowed with the project sent in the request.
+ PROJECT_DISABLED (int): The Google Cloud project sent in the request does not have permission to
+ access the api.
+ AUTHORIZATION_ERROR (int): Authorization of the client failed.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ USER_PERMISSION_DENIED = 2
+ DEVELOPER_TOKEN_NOT_WHITELISTED = 3
+ DEVELOPER_TOKEN_PROHIBITED = 4
+ PROJECT_DISABLED = 5
+ AUTHORIZATION_ERROR = 6
+
+
+class NewResourceCreationErrorEnum(object):
+ class NewResourceCreationError(enum.IntEnum):
+ """
+ Enum describing possible new resource creation errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ CANNOT_SET_ID_FOR_ADD (int): Do not set the id field while creating new entities.
+ DUPLICATE_TEMP_IDS (int): Creating more than one resource with the same temp ID is not allowed.
+ TEMP_ID_RESOURCE_HAD_ERRORS (int): Parent object with specified temp id failed validation, so no deep
+ validation will be done for this child resource.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ CANNOT_SET_ID_FOR_ADD = 2
+ DUPLICATE_TEMP_IDS = 3
+ TEMP_ID_RESOURCE_HAD_ERRORS = 4
+
+
+class ResourceCountLimitExceededErrorEnum(object):
+ class ResourceCountLimitExceededError(enum.IntEnum):
+ """
+ Enum describing possible resource count limit exceeded errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ ACCOUNT_LIMIT (int): Indicates that this request would exceed the number of allowed resources
+ for the AdWords account. The exact resource type and limit being checked
+ can be inferred from accountLimitType.
+ CAMPAIGN_LIMIT (int): Indicates that this request would exceed the number of allowed resources
+ in a Campaign. The exact resource type and limit being checked can be
+ inferred from accountLimitType, and the numeric id of the
+ Campaign involved is given by enclosingId.
+ ADGROUP_LIMIT (int): Indicates that this request would exceed the number of allowed resources
+ in an ad group. The exact resource type and limit being checked can be
+ inferred from accountLimitType, and the numeric id of the
+ ad group involved is given by enclosingId.
+ AD_GROUP_AD_LIMIT (int): Indicates that this request would exceed the number of allowed resources
+ in an ad group ad. The exact resource type and limit being checked can
+ be inferred from accountLimitType, and the enclosingId
+ contains the ad group id followed by the ad id, separated by a single
+ comma (,).
+ AD_GROUP_CRITERION_LIMIT (int): Indicates that this request would exceed the number of allowed resources
+ in an ad group criterion. The exact resource type and limit being checked
+ can be inferred from accountLimitType, and the
+ enclosingId contains the ad group id followed by the
+ criterion id, separated by a single comma (,).
+ SHARED_SET_LIMIT (int): Indicates that this request would exceed the number of allowed resources
+ in this shared set. The exact resource type and limit being checked can
+ be inferred from accountLimitType, and the numeric id of the
+ shared set involved is given by enclosingId.
+ MATCHING_FUNCTION_LIMIT (int): Exceeds a limit related to a matching function.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ ACCOUNT_LIMIT = 2
+ CAMPAIGN_LIMIT = 3
+ ADGROUP_LIMIT = 4
+ AD_GROUP_AD_LIMIT = 5
+ AD_GROUP_CRITERION_LIMIT = 6
+ SHARED_SET_LIMIT = 7
+ MATCHING_FUNCTION_LIMIT = 8
+
+
+class BiddingErrorEnum(object):
+ class BiddingError(enum.IntEnum):
+ """
+ Enum describing possible bidding errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ BIDDING_STRATEGY_TRANSITION_NOT_ALLOWED (int): Cannot transition to new bidding strategy.
+ CANNOT_ATTACH_BIDDING_STRATEGY_TO_CAMPAIGN (int): Cannot attach bidding strategy to campaign.
+ INVALID_ANONYMOUS_BIDDING_STRATEGY_TYPE (int): Bidding strategy is not supported or cannot be used as anonymous.
+ INVALID_BIDDING_STRATEGY_TYPE (int): The type does not match the named strategy's type.
+ INVALID_BID (int): The bid is invalid.
+ BIDDING_STRATEGY_NOT_AVAILABLE_FOR_ACCOUNT_TYPE (int): Bidding strategy is not available for the account type.
+ CONVERSION_TRACKING_NOT_ENABLED (int): Conversion tracking is not enabled for the campaign for VBB transition.
+ NOT_ENOUGH_CONVERSIONS (int): Not enough conversions tracked for VBB transitions.
+ CANNOT_CREATE_CAMPAIGN_WITH_BIDDING_STRATEGY (int): Campaign can not be created with given bidding strategy. It can be
+ transitioned to the strategy, once eligible.
+ CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CAMPAIGN_LEVEL_POP_BIDDING_STRATEGY (int): Cannot target content network only as campaign uses Page One Promoted
+ bidding strategy.
+ BIDDING_STRATEGY_NOT_SUPPORTED_WITH_AD_SCHEDULE (int): Budget Optimizer and Target Spend bidding strategies are not supported
+ for campaigns with AdSchedule targeting.
+ PAY_PER_CONVERSION_NOT_AVAILABLE_FOR_CUSTOMER (int): Pay per conversion is not available to all the customer, only few
+ whitelisted customers can use this.
+ PAY_PER_CONVERSION_NOT_ALLOWED_WITH_TARGET_CPA (int): Pay per conversion is not allowed with Target CPA.
+ BIDDING_STRATEGY_NOT_ALLOWED_FOR_SEARCH_ONLY_CAMPAIGNS (int): Cannot set bidding strategy to Manual CPM for search network only
+ campaigns.
+ BIDDING_STRATEGY_NOT_SUPPORTED_IN_DRAFTS_OR_EXPERIMENTS (int): The bidding strategy is not supported for use in drafts or experiments.
+ BIDDING_STRATEGY_TYPE_DOES_NOT_SUPPORT_PRODUCT_TYPE_ADGROUP_CRITERION (int): Bidding strategy type does not support product type ad group criterion.
+ BID_TOO_SMALL (int): Bid amount is too small.
+ BID_TOO_BIG (int): Bid amount is too big.
+ BID_TOO_MANY_FRACTIONAL_DIGITS (int): Bid has too many fractional digit precision.
+ INVALID_DOMAIN_NAME (int): Invalid domain name specified.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ BIDDING_STRATEGY_TRANSITION_NOT_ALLOWED = 2
+ CANNOT_ATTACH_BIDDING_STRATEGY_TO_CAMPAIGN = 7
+ INVALID_ANONYMOUS_BIDDING_STRATEGY_TYPE = 10
+ INVALID_BIDDING_STRATEGY_TYPE = 14
+ INVALID_BID = 17
+ BIDDING_STRATEGY_NOT_AVAILABLE_FOR_ACCOUNT_TYPE = 18
+ CONVERSION_TRACKING_NOT_ENABLED = 19
+ NOT_ENOUGH_CONVERSIONS = 20
+ CANNOT_CREATE_CAMPAIGN_WITH_BIDDING_STRATEGY = 21
+ CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CAMPAIGN_LEVEL_POP_BIDDING_STRATEGY = 23
+ BIDDING_STRATEGY_NOT_SUPPORTED_WITH_AD_SCHEDULE = 24
+ PAY_PER_CONVERSION_NOT_AVAILABLE_FOR_CUSTOMER = 25
+ PAY_PER_CONVERSION_NOT_ALLOWED_WITH_TARGET_CPA = 26
+ BIDDING_STRATEGY_NOT_ALLOWED_FOR_SEARCH_ONLY_CAMPAIGNS = 27
+ BIDDING_STRATEGY_NOT_SUPPORTED_IN_DRAFTS_OR_EXPERIMENTS = 28
+ BIDDING_STRATEGY_TYPE_DOES_NOT_SUPPORT_PRODUCT_TYPE_ADGROUP_CRITERION = 29
+ BID_TOO_SMALL = 30
+ BID_TOO_BIG = 31
+ BID_TOO_MANY_FRACTIONAL_DIGITS = 32
+ INVALID_DOMAIN_NAME = 33
+
+
+class StringFormatErrorEnum(object):
+ class StringFormatError(enum.IntEnum):
+ """
+ Enum describing possible string format errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ ILLEGAL_CHARS (int): The input string value contains disallowed characters.
+ INVALID_FORMAT (int): The input string value is invalid for the associated field.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ ILLEGAL_CHARS = 2
+ INVALID_FORMAT = 3
+
+
+class AdxErrorEnum(object):
+ class AdxError(enum.IntEnum):
+ """
+ Enum describing possible adx errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ UNSUPPORTED_FEATURE (int): Attempt to use non-AdX feature by AdX customer.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ UNSUPPORTED_FEATURE = 2
+
+
+class DistinctErrorEnum(object):
+ class DistinctError(enum.IntEnum):
+ """
+ Enum describing possible distinct errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ DUPLICATE_ELEMENT (int): Duplicate element.
+ DUPLICATE_TYPE (int): Duplicate type.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ DUPLICATE_ELEMENT = 2
+ DUPLICATE_TYPE = 3
+
+
+class UrlFieldErrorEnum(object):
+ class UrlFieldError(enum.IntEnum):
+ """
+ Enum describing possible url field errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ INVALID_TRACKING_URL_TEMPLATE (int): The tracking url template is invalid.
+ INVALID_TAG_IN_TRACKING_URL_TEMPLATE (int): The tracking url template contains invalid tag.
+ MISSING_TRACKING_URL_TEMPLATE_TAG (int): The tracking url template must contain at least one tag (e.g. {lpurl}),
+ This applies only to tracking url template associated with website ads or
+ product ads.
+ MISSING_PROTOCOL_IN_TRACKING_URL_TEMPLATE (int): The tracking url template must start with a valid protocol (or lpurl
+ tag).
+ INVALID_PROTOCOL_IN_TRACKING_URL_TEMPLATE (int): The tracking url template starts with an invalid protocol.
+ MALFORMED_TRACKING_URL_TEMPLATE (int): The tracking url template contains illegal characters.
+ MISSING_HOST_IN_TRACKING_URL_TEMPLATE (int): The tracking url template must contain a host name (or lpurl tag).
+ INVALID_TLD_IN_TRACKING_URL_TEMPLATE (int): The tracking url template has an invalid or missing top level domain
+ extension.
+ REDUNDANT_NESTED_TRACKING_URL_TEMPLATE_TAG (int): The tracking url template contains nested occurrences of the same
+ conditional tag (i.e. {ifmobile:{ifmobile:x}}).
+ INVALID_FINAL_URL (int): The final url is invalid.
+ INVALID_TAG_IN_FINAL_URL (int): The final url contains invalid tag.
+ REDUNDANT_NESTED_FINAL_URL_TAG (int): The final url contains nested occurrences of the same conditional tag
+ (i.e. {ifmobile:{ifmobile:x}}).
+ MISSING_PROTOCOL_IN_FINAL_URL (int): The final url must start with a valid protocol.
+ INVALID_PROTOCOL_IN_FINAL_URL (int): The final url starts with an invalid protocol.
+ MALFORMED_FINAL_URL (int): The final url contains illegal characters.
+ MISSING_HOST_IN_FINAL_URL (int): The final url must contain a host name.
+ INVALID_TLD_IN_FINAL_URL (int): The tracking url template has an invalid or missing top level domain
+ extension.
+ INVALID_FINAL_MOBILE_URL (int): The final mobile url is invalid.
+ INVALID_TAG_IN_FINAL_MOBILE_URL (int): The final mobile url contains invalid tag.
+ REDUNDANT_NESTED_FINAL_MOBILE_URL_TAG (int): The final mobile url contains nested occurrences of the same conditional
+ tag (i.e. {ifmobile:{ifmobile:x}}).
+ MISSING_PROTOCOL_IN_FINAL_MOBILE_URL (int): The final mobile url must start with a valid protocol.
+ INVALID_PROTOCOL_IN_FINAL_MOBILE_URL (int): The final mobile url starts with an invalid protocol.
+ MALFORMED_FINAL_MOBILE_URL (int): The final mobile url contains illegal characters.
+ MISSING_HOST_IN_FINAL_MOBILE_URL (int): The final mobile url must contain a host name.
+ INVALID_TLD_IN_FINAL_MOBILE_URL (int): The tracking url template has an invalid or missing top level domain
+ extension.
+ INVALID_FINAL_APP_URL (int): The final app url is invalid.
+ INVALID_TAG_IN_FINAL_APP_URL (int): The final app url contains invalid tag.
+ REDUNDANT_NESTED_FINAL_APP_URL_TAG (int): The final app url contains nested occurrences of the same conditional tag
+ (i.e. {ifmobile:{ifmobile:x}}).
+ MULTIPLE_APP_URLS_FOR_OSTYPE (int): More than one app url found for the same OS type.
+ INVALID_OSTYPE (int): The OS type given for an app url is not valid.
+ INVALID_PROTOCOL_FOR_APP_URL (int): The protocol given for an app url is not valid. (E.g. \"android-app://\")
+ INVALID_PACKAGE_ID_FOR_APP_URL (int): The package id (app id) given for an app url is not valid.
+ URL_CUSTOM_PARAMETERS_COUNT_EXCEEDS_LIMIT (int): The number of url custom parameters for an resource exceeds the maximum
+ limit allowed.
+ INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_KEY (int): An invalid character appears in the parameter key.
+ INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_VALUE (int): An invalid character appears in the parameter value.
+ INVALID_TAG_IN_URL_CUSTOM_PARAMETER_VALUE (int): The url custom parameter value fails url tag validation.
+ REDUNDANT_NESTED_URL_CUSTOM_PARAMETER_TAG (int): The custom parameter contains nested occurrences of the same conditional
+ tag (i.e. {ifmobile:{ifmobile:x}}).
+ MISSING_PROTOCOL (int): The protocol (http:// or https://) is missing.
+ INVALID_URL (int): The url is invalid.
+ DESTINATION_URL_DEPRECATED (int): Destination Url is deprecated.
+ INVALID_TAG_IN_URL (int): The url contains invalid tag.
+ MISSING_URL_TAG (int): The url must contain at least one tag (e.g. {lpurl}), This applies only
+ to urls associated with website ads or product ads.
+ DUPLICATE_URL_ID (int): Duplicate url id.
+ INVALID_URL_ID (int): Invalid url id.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ INVALID_TRACKING_URL_TEMPLATE = 2
+ INVALID_TAG_IN_TRACKING_URL_TEMPLATE = 3
+ MISSING_TRACKING_URL_TEMPLATE_TAG = 4
+ MISSING_PROTOCOL_IN_TRACKING_URL_TEMPLATE = 5
+ INVALID_PROTOCOL_IN_TRACKING_URL_TEMPLATE = 6
+ MALFORMED_TRACKING_URL_TEMPLATE = 7
+ MISSING_HOST_IN_TRACKING_URL_TEMPLATE = 8
+ INVALID_TLD_IN_TRACKING_URL_TEMPLATE = 9
+ REDUNDANT_NESTED_TRACKING_URL_TEMPLATE_TAG = 10
+ INVALID_FINAL_URL = 11
+ INVALID_TAG_IN_FINAL_URL = 12
+ REDUNDANT_NESTED_FINAL_URL_TAG = 13
+ MISSING_PROTOCOL_IN_FINAL_URL = 14
+ INVALID_PROTOCOL_IN_FINAL_URL = 15
+ MALFORMED_FINAL_URL = 16
+ MISSING_HOST_IN_FINAL_URL = 17
+ INVALID_TLD_IN_FINAL_URL = 18
+ INVALID_FINAL_MOBILE_URL = 19
+ INVALID_TAG_IN_FINAL_MOBILE_URL = 20
+ REDUNDANT_NESTED_FINAL_MOBILE_URL_TAG = 21
+ MISSING_PROTOCOL_IN_FINAL_MOBILE_URL = 22
+ INVALID_PROTOCOL_IN_FINAL_MOBILE_URL = 23
+ MALFORMED_FINAL_MOBILE_URL = 24
+ MISSING_HOST_IN_FINAL_MOBILE_URL = 25
+ INVALID_TLD_IN_FINAL_MOBILE_URL = 26
+ INVALID_FINAL_APP_URL = 27
+ INVALID_TAG_IN_FINAL_APP_URL = 28
+ REDUNDANT_NESTED_FINAL_APP_URL_TAG = 29
+ MULTIPLE_APP_URLS_FOR_OSTYPE = 30
+ INVALID_OSTYPE = 31
+ INVALID_PROTOCOL_FOR_APP_URL = 32
+ INVALID_PACKAGE_ID_FOR_APP_URL = 33
+ URL_CUSTOM_PARAMETERS_COUNT_EXCEEDS_LIMIT = 34
+ INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_KEY = 39
+ INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_VALUE = 40
+ INVALID_TAG_IN_URL_CUSTOM_PARAMETER_VALUE = 41
+ REDUNDANT_NESTED_URL_CUSTOM_PARAMETER_TAG = 42
+ MISSING_PROTOCOL = 43
+ INVALID_URL = 44
+ DESTINATION_URL_DEPRECATED = 45
+ INVALID_TAG_IN_URL = 46
+ MISSING_URL_TAG = 47
+ DUPLICATE_URL_ID = 48
+ INVALID_URL_ID = 49
+
+
+class AdGroupBidModifierErrorEnum(object):
+ class AdGroupBidModifierError(enum.IntEnum):
+ """
+ Enum describing possible ad group bid modifier errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ CRITERION_ID_NOT_SUPPORTED (int): The criterion ID does not support bid modification.
+ CANNOT_OVERRIDE_OPTED_OUT_CAMPAIGN_CRITERION_BID_MODIFIER (int): Cannot override the bid modifier for the given criterion ID if the parent
+ campaign is opted out of the same criterion.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ CRITERION_ID_NOT_SUPPORTED = 2
+ CANNOT_OVERRIDE_OPTED_OUT_CAMPAIGN_CRITERION_BID_MODIFIER = 3
+
+
+class StringLengthErrorEnum(object):
+ class StringLengthError(enum.IntEnum):
+ """
+ Enum describing possible string length errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ TOO_SHORT (int): Too short.
+ TOO_LONG (int): Too long.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ TOO_SHORT = 2
+ TOO_LONG = 3
+
+
+class AdCustomizerErrorEnum(object):
+ class AdCustomizerError(enum.IntEnum):
+ """
+ Enum describing possible ad customizer errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ COUNTDOWN_INVALID_DATE_FORMAT (int): Invalid date argument in countdown function.
+ COUNTDOWN_DATE_IN_PAST (int): Countdown end date is in the past.
+ COUNTDOWN_INVALID_LOCALE (int): Invalid locale string in countdown function.
+ COUNTDOWN_INVALID_START_DAYS_BEFORE (int): Days-before argument to countdown function is not positive.
+ UNKNOWN_USER_LIST (int): A user list referenced in an IF function does not exist.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ COUNTDOWN_INVALID_DATE_FORMAT = 2
+ COUNTDOWN_DATE_IN_PAST = 3
+ COUNTDOWN_INVALID_LOCALE = 4
+ COUNTDOWN_INVALID_START_DAYS_BEFORE = 5
+ UNKNOWN_USER_LIST = 6
+
+
+class DateRangeErrorEnum(object):
+ class DateRangeError(enum.IntEnum):
+ """
+ Enum describing possible date range errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ INVALID_DATE (int): Invalid date.
+ START_DATE_AFTER_END_DATE (int): The start date was after the end date.
+ CANNOT_SET_DATE_TO_PAST (int): Cannot set date to past time
+ AFTER_MAXIMUM_ALLOWABLE_DATE (int): A date was used that is past the system \"last\" date.
+ CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED (int): Trying to change start date on a campaign that has started.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ INVALID_DATE = 2
+ START_DATE_AFTER_END_DATE = 3
+ CANNOT_SET_DATE_TO_PAST = 4
+ AFTER_MAXIMUM_ALLOWABLE_DATE = 5
+ CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED = 6
+
+
+class ImageErrorEnum(object):
+ class ImageError(enum.IntEnum):
+ """
+ Enum describing possible image errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ INVALID_IMAGE (int): The image is not valid.
+ STORAGE_ERROR (int): The image could not be stored.
+ BAD_REQUEST (int): There was a problem with the request.
+ UNEXPECTED_SIZE (int): The image is not of legal dimensions.
+ ANIMATED_NOT_ALLOWED (int): Animated image are not permitted.
+ ANIMATION_TOO_LONG (int): Animation is too long.
+ SERVER_ERROR (int): There was an error on the server.
+ CMYK_JPEG_NOT_ALLOWED (int): Image cannot be in CMYK color format.
+ FLASH_NOT_ALLOWED (int): Flash images are not permitted.
+ FLASH_WITHOUT_CLICKTAG (int): Flash images must support clickTag.
+ FLASH_ERROR_AFTER_FIXING_CLICK_TAG (int): A flash error has occurred after fixing the click tag.
+ ANIMATED_VISUAL_EFFECT (int): Unacceptable visual effects.
+ FLASH_ERROR (int): There was a problem with the flash image.
+ LAYOUT_PROBLEM (int): Incorrect image layout.
+ PROBLEM_READING_IMAGE_FILE (int): There was a problem reading the image file.
+ ERROR_STORING_IMAGE (int): There was an error storing the image.
+ ASPECT_RATIO_NOT_ALLOWED (int): The aspect ratio of the image is not allowed.
+ FLASH_HAS_NETWORK_OBJECTS (int): Flash cannot have network objects.
+ FLASH_HAS_NETWORK_METHODS (int): Flash cannot have network methods.
+ FLASH_HAS_URL (int): Flash cannot have a Url.
+ FLASH_HAS_MOUSE_TRACKING (int): Flash cannot use mouse tracking.
+ FLASH_HAS_RANDOM_NUM (int): Flash cannot have a random number.
+ FLASH_SELF_TARGETS (int): Ad click target cannot be '_self'.
+ FLASH_BAD_GETURL_TARGET (int): GetUrl method should only use '_blank'.
+ FLASH_VERSION_NOT_SUPPORTED (int): Flash version is not supported.
+ FLASH_WITHOUT_HARD_CODED_CLICK_URL (int): Flash movies need to have hard coded click URL or clickTAG
+ INVALID_FLASH_FILE (int): Uploaded flash file is corrupted.
+ FAILED_TO_FIX_CLICK_TAG_IN_FLASH (int): Uploaded flash file can be parsed, but the click tag can not be fixed
+ properly.
+ FLASH_ACCESSES_NETWORK_RESOURCES (int): Flash movie accesses network resources
+ FLASH_EXTERNAL_JS_CALL (int): Flash movie attempts to call external javascript code
+ FLASH_EXTERNAL_FS_CALL (int): Flash movie attempts to call flash system commands
+ FILE_TOO_LARGE (int): Image file is too large.
+ IMAGE_DATA_TOO_LARGE (int): Image data is too large.
+ IMAGE_PROCESSING_ERROR (int): Error while processing the image.
+ IMAGE_TOO_SMALL (int): Image is too small.
+ INVALID_INPUT (int): Input was invalid.
+ PROBLEM_READING_FILE (int): There was a problem reading the image file.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ INVALID_IMAGE = 2
+ STORAGE_ERROR = 3
+ BAD_REQUEST = 4
+ UNEXPECTED_SIZE = 5
+ ANIMATED_NOT_ALLOWED = 6
+ ANIMATION_TOO_LONG = 7
+ SERVER_ERROR = 8
+ CMYK_JPEG_NOT_ALLOWED = 9
+ FLASH_NOT_ALLOWED = 10
+ FLASH_WITHOUT_CLICKTAG = 11
+ FLASH_ERROR_AFTER_FIXING_CLICK_TAG = 12
+ ANIMATED_VISUAL_EFFECT = 13
+ FLASH_ERROR = 14
+ LAYOUT_PROBLEM = 15
+ PROBLEM_READING_IMAGE_FILE = 16
+ ERROR_STORING_IMAGE = 17
+ ASPECT_RATIO_NOT_ALLOWED = 18
+ FLASH_HAS_NETWORK_OBJECTS = 19
+ FLASH_HAS_NETWORK_METHODS = 20
+ FLASH_HAS_URL = 21
+ FLASH_HAS_MOUSE_TRACKING = 22
+ FLASH_HAS_RANDOM_NUM = 23
+ FLASH_SELF_TARGETS = 24
+ FLASH_BAD_GETURL_TARGET = 25
+ FLASH_VERSION_NOT_SUPPORTED = 26
+ FLASH_WITHOUT_HARD_CODED_CLICK_URL = 27
+ INVALID_FLASH_FILE = 28
+ FAILED_TO_FIX_CLICK_TAG_IN_FLASH = 29
+ FLASH_ACCESSES_NETWORK_RESOURCES = 30
+ FLASH_EXTERNAL_JS_CALL = 31
+ FLASH_EXTERNAL_FS_CALL = 32
+ FILE_TOO_LARGE = 33
+ IMAGE_DATA_TOO_LARGE = 34
+ IMAGE_PROCESSING_ERROR = 35
+ IMAGE_TOO_SMALL = 36
+ INVALID_INPUT = 37
+ PROBLEM_READING_FILE = 38
+
+
+class CollectionSizeErrorEnum(object):
+ class CollectionSizeError(enum.IntEnum):
+ """
+ Enum describing possible collection size errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ TOO_FEW (int): Too few.
+ TOO_MANY (int): Too many.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ TOO_FEW = 2
+ TOO_MANY = 3
+
+
+class MediaErrorEnum(object):
+ class MediaError(enum.IntEnum):
+ """
+ Enum describing possible media errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ CANNOT_ADD_STANDARD_ICON (int): Cannot add a standard icon type
+ CANNOT_SELECT_STANDARD_ICON_WITH_OTHER_TYPES (int): May only select Standard Icons alone
+ CANNOT_SPECIFY_MEDIA_ID_AND_DATA (int): Image contains both a media ID and media data.
+ DUPLICATE_MEDIA (int): A media with given type and reference id already exists
+ EMPTY_FIELD (int): A required field was not specified or is an empty string.
+ RESOURCE_REFERENCED_IN_MULTIPLE_OPS (int): A media may only be modified once per call
+ FIELD_NOT_SUPPORTED_FOR_MEDIA_SUB_TYPE (int): Field is not supported for the media sub type.
+ INVALID_MEDIA_ID (int): The media id is invalid
+ INVALID_MEDIA_SUB_TYPE (int): The media subtype is invalid
+ INVALID_MEDIA_TYPE (int): The media type is invalid
+ INVALID_MIME_TYPE (int): The mimetype is invalid
+ INVALID_REFERENCE_ID (int): The media reference id is invalid
+ INVALID_YOU_TUBE_ID (int): The YouTube video id is invalid
+ MEDIA_FAILED_TRANSCODING (int): Media has failed transcoding
+ MEDIA_NOT_TRANSCODED (int): Media has not been transcoded
+ MEDIA_TYPE_DOES_NOT_MATCH_OBJECT_TYPE (int): The MediaType does not match the actual media object's type
+ NO_FIELDS_SPECIFIED (int): None of the fields have been specified.
+ NULL_REFERENCE_ID_AND_MEDIA_ID (int): One of reference Id or media Id must be specified
+ TOO_LONG (int): The string has too many characters.
+ UNSUPPORTED_OPERATION (int): The specified operation is not supported. Only ADD, SET, and REMOVE are
+ supported
+ UNSUPPORTED_TYPE (int): The specified type is not supported.
+ YOU_TUBE_SERVICE_UNAVAILABLE (int): YouTube is unavailable for requesting video data.
+ YOU_TUBE_VIDEO_HAS_NON_POSITIVE_DURATION (int): The YouTube video has a non positive duration.
+ YOU_TUBE_VIDEO_NOT_FOUND (int): The YouTube video id is syntactically valid but the video was not found.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ CANNOT_ADD_STANDARD_ICON = 2
+ CANNOT_SELECT_STANDARD_ICON_WITH_OTHER_TYPES = 3
+ CANNOT_SPECIFY_MEDIA_ID_AND_DATA = 4
+ DUPLICATE_MEDIA = 5
+ EMPTY_FIELD = 6
+ RESOURCE_REFERENCED_IN_MULTIPLE_OPS = 7
+ FIELD_NOT_SUPPORTED_FOR_MEDIA_SUB_TYPE = 8
+ INVALID_MEDIA_ID = 9
+ INVALID_MEDIA_SUB_TYPE = 10
+ INVALID_MEDIA_TYPE = 11
+ INVALID_MIME_TYPE = 12
+ INVALID_REFERENCE_ID = 13
+ INVALID_YOU_TUBE_ID = 14
+ MEDIA_FAILED_TRANSCODING = 15
+ MEDIA_NOT_TRANSCODED = 16
+ MEDIA_TYPE_DOES_NOT_MATCH_OBJECT_TYPE = 17
+ NO_FIELDS_SPECIFIED = 18
+ NULL_REFERENCE_ID_AND_MEDIA_ID = 19
+ TOO_LONG = 20
+ UNSUPPORTED_OPERATION = 21
+ UNSUPPORTED_TYPE = 22
+ YOU_TUBE_SERVICE_UNAVAILABLE = 23
+ YOU_TUBE_VIDEO_HAS_NON_POSITIVE_DURATION = 24
+ YOU_TUBE_VIDEO_NOT_FOUND = 25
+
+
+class AdSharingErrorEnum(object):
+ class AdSharingError(enum.IntEnum):
+ """
+ Enum describing possible ad sharing errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ AD_GROUP_ALREADY_CONTAINS_AD (int): Error resulting in attempting to add an Ad to an AdGroup that already
+ contains the Ad.
+ INCOMPATIBLE_AD_UNDER_AD_GROUP (int): Ad is not compatible with the AdGroup it is being shared with.
+ CANNOT_SHARE_INACTIVE_AD (int): Cannot add AdGroupAd on inactive Ad.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ AD_GROUP_ALREADY_CONTAINS_AD = 2
+ INCOMPATIBLE_AD_UNDER_AD_GROUP = 3
+ CANNOT_SHARE_INACTIVE_AD = 4
+
+
+class AdGroupCriterionErrorEnum(object):
+ class AdGroupCriterionError(enum.IntEnum):
+ """
+ Enum describing possible ad group criterion errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ AD_GROUP_CRITERION_LABEL_DOES_NOT_EXIST (int): No link found between the AdGroupCriterion and the label.
+ AD_GROUP_CRITERION_LABEL_ALREADY_EXISTS (int): The label has already been attached to the AdGroupCriterion.
+ CANNOT_ADD_LABEL_TO_NEGATIVE_CRITERION (int): Negative AdGroupCriterion cannot have labels.
+ TOO_MANY_OPERATIONS (int): Too many operations for a single call.
+ CANT_UPDATE_NEGATIVE (int): Negative ad group criteria are not updateable.
+ CONCRETE_TYPE_REQUIRED (int): Concrete type of criterion (keyword v.s. placement) is required for ADD
+ and SET operations.
+ BID_INCOMPATIBLE_WITH_ADGROUP (int): Bid is incompatible with ad group's bidding settings.
+ CANNOT_TARGET_AND_EXCLUDE (int): Cannot target and exclude the same criterion at once.
+ ILLEGAL_URL (int): The URL of a placement is invalid.
+ INVALID_KEYWORD_TEXT (int): Keyword text was invalid.
+ INVALID_DESTINATION_URL (int): Destination URL was invalid.
+ MISSING_DESTINATION_URL_TAG (int): The destination url must contain at least one tag (e.g. {lpurl})
+ KEYWORD_LEVEL_BID_NOT_SUPPORTED_FOR_MANUALCPM (int): Keyword-level cpm bid is not supported
+ INVALID_USER_STATUS (int): For example, cannot add a biddable ad group criterion that had been
+ removed.
+ CANNOT_ADD_CRITERIA_TYPE (int): Criteria type cannot be targeted for the ad group. Either the account is
+ restricted to keywords only, the criteria type is incompatible with the
+ campaign's bidding strategy, or the criteria type can only be applied to
+ campaigns.
+ CANNOT_EXCLUDE_CRITERIA_TYPE (int): Criteria type cannot be excluded for the ad group. Refer to the
+ documentation for a specific criterion to check if it is excludable.
+ CAMPAIGN_TYPE_NOT_COMPATIBLE_WITH_PARTIAL_FAILURE (int): Partial failure is not supported for shopping campaign mutate operations.
+ OPERATIONS_FOR_TOO_MANY_SHOPPING_ADGROUPS (int): Operations in the mutate request changes too many shopping ad groups.
+ Please split requests for multiple shopping ad groups across multiple
+ requests.
+ CANNOT_MODIFY_URL_FIELDS_WITH_DUPLICATE_ELEMENTS (int): Not allowed to modify url fields of an ad group criterion if there are
+ duplicate elements for that ad group criterion in the request.
+ CANNOT_SET_WITHOUT_FINAL_URLS (int): Cannot set url fields without also setting final urls.
+ CANNOT_CLEAR_FINAL_URLS_IF_FINAL_MOBILE_URLS_EXIST (int): Cannot clear final urls if final mobile urls exist.
+ CANNOT_CLEAR_FINAL_URLS_IF_FINAL_APP_URLS_EXIST (int): Cannot clear final urls if final app urls exist.
+ CANNOT_CLEAR_FINAL_URLS_IF_TRACKING_URL_TEMPLATE_EXISTS (int): Cannot clear final urls if tracking url template exists.
+ CANNOT_CLEAR_FINAL_URLS_IF_URL_CUSTOM_PARAMETERS_EXIST (int): Cannot clear final urls if url custom parameters exist.
+ CANNOT_SET_BOTH_DESTINATION_URL_AND_FINAL_URLS (int): Cannot set both destination url and final urls.
+ CANNOT_SET_BOTH_DESTINATION_URL_AND_TRACKING_URL_TEMPLATE (int): Cannot set both destination url and tracking url template.
+ FINAL_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE (int): Final urls are not supported for this criterion type.
+ FINAL_MOBILE_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE (int): Final mobile urls are not supported for this criterion type.
+ INVALID_LISTING_GROUP_HIERARCHY (int): Ad group is invalid due to the listing groups it contains.
+ LISTING_GROUP_UNIT_CANNOT_HAVE_CHILDREN (int): Listing group unit cannot have children.
+ LISTING_GROUP_SUBDIVISION_REQUIRES_OTHERS_CASE (int): Subdivided listing groups must have an \"others\" case.
+ LISTING_GROUP_REQUIRES_SAME_DIMENSION_TYPE_AS_SIBLINGS (int): Dimension type of listing group must be the same as that of its siblings.
+ LISTING_GROUP_ALREADY_EXISTS (int): Listing group cannot be added to the ad group because it already exists.
+ LISTING_GROUP_DOES_NOT_EXIST (int): Listing group referenced in the operation was not found in the ad group.
+ LISTING_GROUP_CANNOT_BE_REMOVED (int): Recursive removal failed because listing group subdivision is being
+ created or modified in this request.
+ INVALID_LISTING_GROUP_TYPE (int): Listing group type is not allowed for specified ad group criterion type.
+ LISTING_GROUP_ADD_MAY_ONLY_USE_TEMP_ID (int): Listing group in an ADD operation specifies a non temporary criterion id.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ AD_GROUP_CRITERION_LABEL_DOES_NOT_EXIST = 2
+ AD_GROUP_CRITERION_LABEL_ALREADY_EXISTS = 3
+ CANNOT_ADD_LABEL_TO_NEGATIVE_CRITERION = 4
+ TOO_MANY_OPERATIONS = 5
+ CANT_UPDATE_NEGATIVE = 6
+ CONCRETE_TYPE_REQUIRED = 7
+ BID_INCOMPATIBLE_WITH_ADGROUP = 8
+ CANNOT_TARGET_AND_EXCLUDE = 9
+ ILLEGAL_URL = 10
+ INVALID_KEYWORD_TEXT = 11
+ INVALID_DESTINATION_URL = 12
+ MISSING_DESTINATION_URL_TAG = 13
+ KEYWORD_LEVEL_BID_NOT_SUPPORTED_FOR_MANUALCPM = 14
+ INVALID_USER_STATUS = 15
+ CANNOT_ADD_CRITERIA_TYPE = 16
+ CANNOT_EXCLUDE_CRITERIA_TYPE = 17
+ CAMPAIGN_TYPE_NOT_COMPATIBLE_WITH_PARTIAL_FAILURE = 27
+ OPERATIONS_FOR_TOO_MANY_SHOPPING_ADGROUPS = 28
+ CANNOT_MODIFY_URL_FIELDS_WITH_DUPLICATE_ELEMENTS = 29
+ CANNOT_SET_WITHOUT_FINAL_URLS = 30
+ CANNOT_CLEAR_FINAL_URLS_IF_FINAL_MOBILE_URLS_EXIST = 31
+ CANNOT_CLEAR_FINAL_URLS_IF_FINAL_APP_URLS_EXIST = 32
+ CANNOT_CLEAR_FINAL_URLS_IF_TRACKING_URL_TEMPLATE_EXISTS = 33
+ CANNOT_CLEAR_FINAL_URLS_IF_URL_CUSTOM_PARAMETERS_EXIST = 34
+ CANNOT_SET_BOTH_DESTINATION_URL_AND_FINAL_URLS = 35
+ CANNOT_SET_BOTH_DESTINATION_URL_AND_TRACKING_URL_TEMPLATE = 36
+ FINAL_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE = 37
+ FINAL_MOBILE_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE = 38
+ INVALID_LISTING_GROUP_HIERARCHY = 39
+ LISTING_GROUP_UNIT_CANNOT_HAVE_CHILDREN = 40
+ LISTING_GROUP_SUBDIVISION_REQUIRES_OTHERS_CASE = 41
+ LISTING_GROUP_REQUIRES_SAME_DIMENSION_TYPE_AS_SIBLINGS = 42
+ LISTING_GROUP_ALREADY_EXISTS = 43
+ LISTING_GROUP_DOES_NOT_EXIST = 44
+ LISTING_GROUP_CANNOT_BE_REMOVED = 45
+ INVALID_LISTING_GROUP_TYPE = 46
+ LISTING_GROUP_ADD_MAY_ONLY_USE_TEMP_ID = 47
+
+
+class RangeErrorEnum(object):
+ class RangeError(enum.IntEnum):
+ """
+ Enum describing possible range errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ TOO_LOW (int): Too low.
+ TOO_HIGH (int): Too high.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ TOO_LOW = 2
+ TOO_HIGH = 3
+
+
+class OperationAccessDeniedErrorEnum(object):
+ class OperationAccessDeniedError(enum.IntEnum):
+ """
+ Enum describing possible operation access denied errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ ACTION_NOT_PERMITTED (int): Unauthorized invocation of a service's method (get, mutate, etc.)
+ CREATE_OPERATION_NOT_PERMITTED (int): Unauthorized CREATE operation in invoking a service's mutate method.
+ REMOVE_OPERATION_NOT_PERMITTED (int): Unauthorized REMOVE operation in invoking a service's mutate method.
+ UPDATE_OPERATION_NOT_PERMITTED (int): Unauthorized UPDATE operation in invoking a service's mutate method.
+ MUTATE_ACTION_NOT_PERMITTED_FOR_CLIENT (int): A mutate action is not allowed on this campaign, from this client.
+ OPERATION_NOT_PERMITTED_FOR_CAMPAIGN_TYPE (int): This operation is not permitted on this campaign type
+ CREATE_AS_REMOVED_NOT_PERMITTED (int): A CREATE operation may not set status to REMOVED.
+ OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE (int): This operation is not allowed because the campaign or adgroup is removed.
+ OPERATION_NOT_PERMITTED_FOR_AD_GROUP_TYPE (int): This operation is not permitted on this ad group type.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ ACTION_NOT_PERMITTED = 2
+ CREATE_OPERATION_NOT_PERMITTED = 3
+ REMOVE_OPERATION_NOT_PERMITTED = 4
+ UPDATE_OPERATION_NOT_PERMITTED = 5
+ MUTATE_ACTION_NOT_PERMITTED_FOR_CLIENT = 6
+ OPERATION_NOT_PERMITTED_FOR_CAMPAIGN_TYPE = 7
+ CREATE_AS_REMOVED_NOT_PERMITTED = 8
+ OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE = 9
+ OPERATION_NOT_PERMITTED_FOR_AD_GROUP_TYPE = 10
+
+
+class RegionCodeErrorEnum(object):
+ class RegionCodeError(enum.IntEnum):
+ """
+ Enum describing possible region code errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ INVALID_REGION_CODE (int): Invalid region code.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ INVALID_REGION_CODE = 2
+
+
+class SettingErrorEnum(object):
+ class SettingError(enum.IntEnum):
+ """
+ Enum describing possible setting errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ SETTING_TYPE_IS_NOT_AVAILABLE (int): The campaign setting is not available for this AdWords account.
+ SETTING_TYPE_IS_NOT_COMPATIBLE_WITH_CAMPAIGN (int): The setting is not compatible with the campaign.
+ TARGETING_SETTING_CONTAINS_INVALID_CRITERION_TYPE_GROUP (int): The supplied TargetingSetting contains an invalid CriterionTypeGroup. See
+ CriterionTypeGroup documentation for CriterionTypeGroups allowed
+ in Campaign or AdGroup TargetingSettings.
+ TARGETING_SETTING_DEMOGRAPHIC_CRITERION_TYPE_GROUPS_MUST_BE_SET_TO_TARGET_ALL (int): TargetingSetting must not explicitly
+ set any of the Demographic CriterionTypeGroups (AGE_RANGE, GENDER,
+ PARENT, INCOME_RANGE) to false (it's okay to not set them at all, in
+ which case the system will set them to true automatically).
+ TARGETING_SETTING_CANNOT_CHANGE_TARGET_ALL_TO_FALSE_FOR_DEMOGRAPHIC_CRITERION_TYPE_GROUP (int): TargetingSetting cannot change any of
+ the Demographic CriterionTypeGroups (AGE_RANGE, GENDER, PARENT,
+ INCOME_RANGE) from true to false.
+ DYNAMIC_SEARCH_ADS_SETTING_AT_LEAST_ONE_FEED_ID_MUST_BE_PRESENT (int): At least one feed id should be present.
+ DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_DOMAIN_NAME (int): The supplied DynamicSearchAdsSetting contains an invalid domain name.
+ DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_SUBDOMAIN_NAME (int): The supplied DynamicSearchAdsSetting contains a subdomain name.
+ DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_LANGUAGE_CODE (int): The supplied DynamicSearchAdsSetting contains an invalid language code.
+ TARGET_ALL_IS_NOT_ALLOWED_FOR_PLACEMENT_IN_SEARCH_CAMPAIGN (int): TargetingSettings in search campaigns should not have
+ CriterionTypeGroup.PLACEMENT set to targetAll.
+ UNIVERSAL_APP_CAMPAIGN_SETTING_DUPLICATE_DESCRIPTION (int): Duplicate description in universal app setting description field.
+ UNIVERSAL_APP_CAMPAIGN_SETTING_DESCRIPTION_LINE_WIDTH_TOO_LONG (int): Description line width is too long in universal app setting description
+ field.
+ UNIVERSAL_APP_CAMPAIGN_SETTING_APP_ID_CANNOT_BE_MODIFIED (int): Universal app setting appId field cannot be modified for COMPLETE
+ campaigns.
+ TOO_MANY_YOUTUBE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN (int): YoutubeVideoMediaIds in universal app setting cannot exceed size limit.
+ TOO_MANY_IMAGE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN (int): ImageMediaIds in universal app setting cannot exceed size limit.
+ MEDIA_INCOMPATIBLE_FOR_UNIVERSAL_APP_CAMPAIGN (int): Media is incompatible for universal app campaign.
+ TOO_MANY_EXCLAMATION_MARKS (int): Too many exclamation marks in universal app campaign ad text ideas.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ SETTING_TYPE_IS_NOT_AVAILABLE = 3
+ SETTING_TYPE_IS_NOT_COMPATIBLE_WITH_CAMPAIGN = 4
+ TARGETING_SETTING_CONTAINS_INVALID_CRITERION_TYPE_GROUP = 5
+ TARGETING_SETTING_DEMOGRAPHIC_CRITERION_TYPE_GROUPS_MUST_BE_SET_TO_TARGET_ALL = 6
+ TARGETING_SETTING_CANNOT_CHANGE_TARGET_ALL_TO_FALSE_FOR_DEMOGRAPHIC_CRITERION_TYPE_GROUP = 7
+ DYNAMIC_SEARCH_ADS_SETTING_AT_LEAST_ONE_FEED_ID_MUST_BE_PRESENT = 8
+ DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_DOMAIN_NAME = 9
+ DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_SUBDOMAIN_NAME = 10
+ DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_LANGUAGE_CODE = 11
+ TARGET_ALL_IS_NOT_ALLOWED_FOR_PLACEMENT_IN_SEARCH_CAMPAIGN = 12
+ UNIVERSAL_APP_CAMPAIGN_SETTING_DUPLICATE_DESCRIPTION = 13
+ UNIVERSAL_APP_CAMPAIGN_SETTING_DESCRIPTION_LINE_WIDTH_TOO_LONG = 14
+ UNIVERSAL_APP_CAMPAIGN_SETTING_APP_ID_CANNOT_BE_MODIFIED = 15
+ TOO_MANY_YOUTUBE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN = 16
+ TOO_MANY_IMAGE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN = 17
+ MEDIA_INCOMPATIBLE_FOR_UNIVERSAL_APP_CAMPAIGN = 18
+ TOO_MANY_EXCLAMATION_MARKS = 19
+
+
+class CriterionErrorEnum(object):
+ class CriterionError(enum.IntEnum):
+ """
+ Enum describing possible criterion errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ CONCRETE_TYPE_REQUIRED (int): Concrete type of criterion is required for CREATE and UPDATE operations.
+ INVALID_EXCLUDED_CATEGORY (int): The category requested for exclusion is invalid.
+ INVALID_KEYWORD_TEXT (int): Invalid keyword criteria text.
+ KEYWORD_TEXT_TOO_LONG (int): Keyword text should be less than 80 chars.
+ KEYWORD_HAS_TOO_MANY_WORDS (int): Keyword text has too many words.
+ KEYWORD_HAS_INVALID_CHARS (int): Keyword text has invalid characters or symbols.
+ INVALID_PLACEMENT_URL (int): Invalid placement URL.
+ INVALID_USER_LIST (int): Invalid user list criterion.
+ INVALID_USER_INTEREST (int): Invalid user interest criterion.
+ INVALID_FORMAT_FOR_PLACEMENT_URL (int): Placement URL has wrong format.
+ PLACEMENT_URL_IS_TOO_LONG (int): Placement URL is too long.
+ PLACEMENT_URL_HAS_ILLEGAL_CHAR (int): Indicates the URL contains an illegal character.
+ PLACEMENT_URL_HAS_MULTIPLE_SITES_IN_LINE (int): Indicates the URL contains multiple comma separated URLs.
+ PLACEMENT_IS_NOT_AVAILABLE_FOR_TARGETING_OR_EXCLUSION (int): Indicates the domain is blacklisted.
+ INVALID_VERTICAL_PATH (int): Invalid vertical path.
+ INVALID_YOUTUBE_CHANNEL_ID (int): The YouTube Channel Id is invalid.
+ INVALID_YOUTUBE_VIDEO_ID (int): The YouTube Video Id is invalid.
+ YOUTUBE_VERTICAL_CHANNEL_DEPRECATED (int): Indicates the placement is a YouTube vertical channel, which is no longer
+ supported.
+ YOUTUBE_DEMOGRAPHIC_CHANNEL_DEPRECATED (int): Indicates the placement is a YouTube demographic channel, which is no
+ longer supported.
+ YOUTUBE_URL_UNSUPPORTED (int): YouTube urls are not supported in Placement criterion. Use YouTubeChannel
+ and YouTubeVideo criterion instead.
+ CANNOT_EXCLUDE_CRITERIA_TYPE (int): Criteria type can not be excluded by the customer, like AOL account type
+ cannot target site type criteria.
+ CANNOT_ADD_CRITERIA_TYPE (int): Criteria type can not be targeted.
+ INVALID_PRODUCT_FILTER (int): Product filter in the product criteria has invalid characters. Operand
+ and the argument in the filter can not have \"==\" or \"&+\".
+ PRODUCT_FILTER_TOO_LONG (int): Product filter in the product criteria is translated to a string as
+ operand1==argument1&+operand2==argument2, maximum allowed length for the
+ string is 255 chars.
+ CANNOT_EXCLUDE_SIMILAR_USER_LIST (int): Not allowed to exclude similar user list.
+ CANNOT_ADD_CLOSED_USER_LIST (int): Not allowed to target a closed user list.
+ CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_ONLY_CAMPAIGNS (int): Not allowed to add display only UserLists to search only campaigns.
+ CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_CAMPAIGNS (int): Not allowed to add display only UserLists to search plus campaigns.
+ CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SHOPPING_CAMPAIGNS (int): Not allowed to add display only UserLists to shopping campaigns.
+ CANNOT_ADD_USER_INTERESTS_TO_SEARCH_CAMPAIGNS (int): Not allowed to add User interests to search only campaigns.
+ CANNOT_SET_BIDS_ON_CRITERION_TYPE_IN_SEARCH_CAMPAIGNS (int): Not allowed to set bids for this criterion type in search campaigns
+ CANNOT_ADD_URLS_TO_CRITERION_TYPE_FOR_CAMPAIGN_TYPE (int): Final URLs, URL Templates and CustomParameters cannot be set for the
+ criterion types of Gender, AgeRange, UserList, Placement, MobileApp, and
+ MobileAppCategory in search campaigns and shopping campaigns.
+ INVALID_IP_ADDRESS (int): IP address is not valid.
+ INVALID_IP_FORMAT (int): IP format is not valid.
+ INVALID_MOBILE_APP (int): Mobile application is not valid.
+ INVALID_MOBILE_APP_CATEGORY (int): Mobile application category is not valid.
+ INVALID_CRITERION_ID (int): The CriterionId does not exist or is of the incorrect type.
+ CANNOT_TARGET_CRITERION (int): The Criterion is not allowed to be targeted.
+ CANNOT_TARGET_OBSOLETE_CRITERION (int): The criterion is not allowed to be targeted as it is deprecated.
+ CRITERION_ID_AND_TYPE_MISMATCH (int): The CriterionId is not valid for the type.
+ INVALID_PROXIMITY_RADIUS (int): Distance for the radius for the proximity criterion is invalid.
+ INVALID_PROXIMITY_RADIUS_UNITS (int): Units for the distance for the radius for the proximity criterion is
+ invalid.
+ INVALID_STREETADDRESS_LENGTH (int): Street address is too short.
+ INVALID_CITYNAME_LENGTH (int): City name in the address is too short.
+ INVALID_REGIONCODE_LENGTH (int): Region code in the address is too short.
+ INVALID_REGIONNAME_LENGTH (int): Region name in the address is not valid.
+ INVALID_POSTALCODE_LENGTH (int): Postal code in the address is not valid.
+ INVALID_COUNTRY_CODE (int): Country code in the address is not valid.
+ INVALID_LATITUDE (int): Latitude for the GeoPoint is not valid.
+ INVALID_LONGITUDE (int): Longitude for the GeoPoint is not valid.
+ PROXIMITY_GEOPOINT_AND_ADDRESS_BOTH_CANNOT_BE_NULL (int): The Proximity input is not valid. Both address and geoPoint cannot be
+ null.
+ INVALID_PROXIMITY_ADDRESS (int): The Proximity address cannot be geocoded to a valid lat/long.
+ INVALID_USER_DOMAIN_NAME (int): User domain name is not valid.
+ CRITERION_PARAMETER_TOO_LONG (int): Length of serialized criterion parameter exceeded size limit.
+ AD_SCHEDULE_TIME_INTERVALS_OVERLAP (int): Time interval in the AdSchedule overlaps with another AdSchedule.
+ AD_SCHEDULE_INTERVAL_CANNOT_SPAN_MULTIPLE_DAYS (int): AdSchedule time interval cannot span multiple days.
+ AD_SCHEDULE_INVALID_TIME_INTERVAL (int): AdSchedule time interval specified is invalid, endTime cannot be earlier
+ than startTime.
+ AD_SCHEDULE_EXCEEDED_INTERVALS_PER_DAY_LIMIT (int): The number of AdSchedule entries in a day exceeds the limit.
+ AD_SCHEDULE_CRITERION_ID_MISMATCHING_FIELDS (int): CriteriaId does not match the interval of the AdSchedule specified.
+ CANNOT_BID_MODIFY_CRITERION_TYPE (int): Cannot set bid modifier for this criterion type.
+ CANNOT_BID_MODIFY_CRITERION_CAMPAIGN_OPTED_OUT (int): Cannot bid modify criterion, since it is opted out of the campaign.
+ CANNOT_BID_MODIFY_NEGATIVE_CRITERION (int): Cannot set bid modifier for a negative criterion.
+ BID_MODIFIER_ALREADY_EXISTS (int): Bid Modifier already exists. Use SET operation to update.
+ FEED_ID_NOT_ALLOWED (int): Feed Id is not allowed in these Location Groups.
+ ACCOUNT_INELIGIBLE_FOR_CRITERIA_TYPE (int): The account may not use the requested criteria type. For example, some
+ accounts are restricted to keywords only.
+ CRITERIA_TYPE_INVALID_FOR_BIDDING_STRATEGY (int): The requested criteria type cannot be used with campaign or ad group
+ bidding strategy.
+ CANNOT_EXCLUDE_CRITERION (int): The Criterion is not allowed to be excluded.
+ CANNOT_REMOVE_CRITERION (int): The criterion is not allowed to be removed. For example, we cannot remove
+ any of the platform criterion.
+ PRODUCT_SCOPE_TOO_LONG (int): The combined length of product dimension values of the product scope
+ criterion is too long.
+ PRODUCT_SCOPE_TOO_MANY_DIMENSIONS (int): Product scope contains too many dimensions.
+ PRODUCT_PARTITION_TOO_LONG (int): The combined length of product dimension values of the product partition
+ criterion is too long.
+ PRODUCT_PARTITION_TOO_MANY_DIMENSIONS (int): Product partition contains too many dimensions.
+ INVALID_PRODUCT_DIMENSION (int): The product dimension is invalid (e.g. dimension contains illegal value,
+ dimension type is represented with wrong class, etc). Product dimension
+ value can not contain \"==\" or \"&+\".
+ INVALID_PRODUCT_DIMENSION_TYPE (int): Product dimension type is either invalid for campaigns of this type or
+ cannot be used in the current context. BIDDING_CATEGORY_Lx and
+ PRODUCT_TYPE_Lx product dimensions must be used in ascending order of
+ their levels: L1, L2, L3, L4, L5... The levels must be specified
+ sequentially and start from L1. Furthermore, an \"others\" product
+ partition cannot be subdivided with a dimension of the same type but of a
+ higher level (\"others\" BIDDING_CATEGORY_L3 can be subdivided with BRAND
+ but not with BIDDING_CATEGORY_L4).
+ INVALID_PRODUCT_BIDDING_CATEGORY (int): Bidding categories do not form a valid path in the Shopping bidding
+ category taxonomy.
+ MISSING_SHOPPING_SETTING (int): ShoppingSetting must be added to the campaign before ProductScope
+ criteria can be added.
+ INVALID_MATCHING_FUNCTION (int): Matching function is invalid.
+ LOCATION_FILTER_NOT_ALLOWED (int): Filter parameters not allowed for location groups targeting.
+ LOCATION_FILTER_INVALID (int): Given location filter parameter is invalid for location groups targeting.
+ CANNOT_ATTACH_CRITERIA_AT_CAMPAIGN_AND_ADGROUP (int): Criteria type cannot be associated with a campaign and its ad group(s)
+ simultaneously.
+ HOTEL_LENGTH_OF_STAY_OVERLAPS_WITH_EXISTING_CRITERION (int): Range represented by hotel length of stay's min nights and max nights
+ overlaps with an existing criterion.
+ HOTEL_ADVANCE_BOOKING_WINDOW_OVERLAPS_WITH_EXISTING_CRITERION (int): Range represented by hotel advance booking window's min days and max days
+ overlaps with an existing criterion.
+ FIELD_INCOMPATIBLE_WITH_NEGATIVE_TARGETING (int): The field is not allowed to be set when the negative field is set to
+ true, e.g. we don't allow bids in negative ad group or campaign criteria.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ CONCRETE_TYPE_REQUIRED = 2
+ INVALID_EXCLUDED_CATEGORY = 3
+ INVALID_KEYWORD_TEXT = 4
+ KEYWORD_TEXT_TOO_LONG = 5
+ KEYWORD_HAS_TOO_MANY_WORDS = 6
+ KEYWORD_HAS_INVALID_CHARS = 7
+ INVALID_PLACEMENT_URL = 8
+ INVALID_USER_LIST = 9
+ INVALID_USER_INTEREST = 10
+ INVALID_FORMAT_FOR_PLACEMENT_URL = 11
+ PLACEMENT_URL_IS_TOO_LONG = 12
+ PLACEMENT_URL_HAS_ILLEGAL_CHAR = 13
+ PLACEMENT_URL_HAS_MULTIPLE_SITES_IN_LINE = 14
+ PLACEMENT_IS_NOT_AVAILABLE_FOR_TARGETING_OR_EXCLUSION = 15
+ INVALID_VERTICAL_PATH = 16
+ INVALID_YOUTUBE_CHANNEL_ID = 17
+ INVALID_YOUTUBE_VIDEO_ID = 18
+ YOUTUBE_VERTICAL_CHANNEL_DEPRECATED = 19
+ YOUTUBE_DEMOGRAPHIC_CHANNEL_DEPRECATED = 20
+ YOUTUBE_URL_UNSUPPORTED = 21
+ CANNOT_EXCLUDE_CRITERIA_TYPE = 22
+ CANNOT_ADD_CRITERIA_TYPE = 23
+ INVALID_PRODUCT_FILTER = 24
+ PRODUCT_FILTER_TOO_LONG = 25
+ CANNOT_EXCLUDE_SIMILAR_USER_LIST = 26
+ CANNOT_ADD_CLOSED_USER_LIST = 27
+ CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_ONLY_CAMPAIGNS = 28
+ CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_CAMPAIGNS = 29
+ CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SHOPPING_CAMPAIGNS = 30
+ CANNOT_ADD_USER_INTERESTS_TO_SEARCH_CAMPAIGNS = 31
+ CANNOT_SET_BIDS_ON_CRITERION_TYPE_IN_SEARCH_CAMPAIGNS = 32
+ CANNOT_ADD_URLS_TO_CRITERION_TYPE_FOR_CAMPAIGN_TYPE = 33
+ INVALID_IP_ADDRESS = 34
+ INVALID_IP_FORMAT = 35
+ INVALID_MOBILE_APP = 36
+ INVALID_MOBILE_APP_CATEGORY = 37
+ INVALID_CRITERION_ID = 38
+ CANNOT_TARGET_CRITERION = 39
+ CANNOT_TARGET_OBSOLETE_CRITERION = 40
+ CRITERION_ID_AND_TYPE_MISMATCH = 41
+ INVALID_PROXIMITY_RADIUS = 42
+ INVALID_PROXIMITY_RADIUS_UNITS = 43
+ INVALID_STREETADDRESS_LENGTH = 44
+ INVALID_CITYNAME_LENGTH = 45
+ INVALID_REGIONCODE_LENGTH = 46
+ INVALID_REGIONNAME_LENGTH = 47
+ INVALID_POSTALCODE_LENGTH = 48
+ INVALID_COUNTRY_CODE = 49
+ INVALID_LATITUDE = 50
+ INVALID_LONGITUDE = 51
+ PROXIMITY_GEOPOINT_AND_ADDRESS_BOTH_CANNOT_BE_NULL = 52
+ INVALID_PROXIMITY_ADDRESS = 53
+ INVALID_USER_DOMAIN_NAME = 54
+ CRITERION_PARAMETER_TOO_LONG = 55
+ AD_SCHEDULE_TIME_INTERVALS_OVERLAP = 56
+ AD_SCHEDULE_INTERVAL_CANNOT_SPAN_MULTIPLE_DAYS = 57
+ AD_SCHEDULE_INVALID_TIME_INTERVAL = 58
+ AD_SCHEDULE_EXCEEDED_INTERVALS_PER_DAY_LIMIT = 59
+ AD_SCHEDULE_CRITERION_ID_MISMATCHING_FIELDS = 60
+ CANNOT_BID_MODIFY_CRITERION_TYPE = 61
+ CANNOT_BID_MODIFY_CRITERION_CAMPAIGN_OPTED_OUT = 62
+ CANNOT_BID_MODIFY_NEGATIVE_CRITERION = 63
+ BID_MODIFIER_ALREADY_EXISTS = 64
+ FEED_ID_NOT_ALLOWED = 65
+ ACCOUNT_INELIGIBLE_FOR_CRITERIA_TYPE = 66
+ CRITERIA_TYPE_INVALID_FOR_BIDDING_STRATEGY = 67
+ CANNOT_EXCLUDE_CRITERION = 68
+ CANNOT_REMOVE_CRITERION = 69
+ PRODUCT_SCOPE_TOO_LONG = 70
+ PRODUCT_SCOPE_TOO_MANY_DIMENSIONS = 71
+ PRODUCT_PARTITION_TOO_LONG = 72
+ PRODUCT_PARTITION_TOO_MANY_DIMENSIONS = 73
+ INVALID_PRODUCT_DIMENSION = 74
+ INVALID_PRODUCT_DIMENSION_TYPE = 75
+ INVALID_PRODUCT_BIDDING_CATEGORY = 76
+ MISSING_SHOPPING_SETTING = 77
+ INVALID_MATCHING_FUNCTION = 78
+ LOCATION_FILTER_NOT_ALLOWED = 79
+ LOCATION_FILTER_INVALID = 80
+ CANNOT_ATTACH_CRITERIA_AT_CAMPAIGN_AND_ADGROUP = 81
+ HOTEL_LENGTH_OF_STAY_OVERLAPS_WITH_EXISTING_CRITERION = 82
+ HOTEL_ADVANCE_BOOKING_WINDOW_OVERLAPS_WITH_EXISTING_CRITERION = 83
+ FIELD_INCOMPATIBLE_WITH_NEGATIVE_TARGETING = 84
+
+
+class InternalErrorEnum(object):
+ class InternalError(enum.IntEnum):
+ """
+ Enum describing possible internal errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ INTERNAL_ERROR (int): Google Ads API encountered unexpected internal error.
+ ERROR_CODE_NOT_PUBLISHED (int): The intended error code doesn't exist in any API version. This will be
+ fixed by adding a new error code as soon as possible.
+ TRANSIENT_ERROR (int): Google Ads API encountered an unexpected transient error. The user
+ should retry their request in these cases.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ INTERNAL_ERROR = 2
+ ERROR_CODE_NOT_PUBLISHED = 3
+ TRANSIENT_ERROR = 4
+
+
+class MediaBundleErrorEnum(object):
+ class MediaBundleError(enum.IntEnum):
+ """
+ Enum describing possible media bundle errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ BAD_REQUEST (int): There was a problem with the request.
+ DOUBLECLICK_BUNDLE_NOT_ALLOWED (int): HTML5 ads using DoubleClick Studio created ZIP files are not supported.
+ EXTERNAL_URL_NOT_ALLOWED (int): Cannot reference URL external to the media bundle.
+ FILE_TOO_LARGE (int): Media bundle file is too large.
+ GOOGLE_WEB_DESIGNER_ZIP_FILE_NOT_PUBLISHED (int): ZIP file from Google Web Designer is not published.
+ INVALID_INPUT (int): Input was invalid.
+ INVALID_MEDIA_BUNDLE (int): There was a problem with the media bundle.
+ INVALID_MEDIA_BUNDLE_ENTRY (int): There was a problem with one or more of the media bundle entries.
+ INVALID_MIME_TYPE (int): The media bundle contains a file with an unknown mime type
+ INVALID_PATH (int): The media bundle contain an invalid asset path.
+ INVALID_URL_REFERENCE (int): HTML5 ad is trying to reference an asset not in .ZIP file
+ MEDIA_DATA_TOO_LARGE (int): Media data is too large.
+ MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY (int): The media bundle contains no primary entry.
+ SERVER_ERROR (int): There was an error on the server.
+ STORAGE_ERROR (int): The image could not be stored.
+ SWIFFY_BUNDLE_NOT_ALLOWED (int): Media bundle created with the Swiffy tool is not allowed.
+ TOO_MANY_FILES (int): The media bundle contains too many files.
+ UNEXPECTED_SIZE (int): The media bundle is not of legal dimensions.
+ UNSUPPORTED_GOOGLE_WEB_DESIGNER_ENVIRONMENT (int): Google Web Designer not created for \"AdWords\" environment.
+ UNSUPPORTED_HTML5_FEATURE (int): Unsupported HTML5 feature in HTML5 asset.
+ URL_IN_MEDIA_BUNDLE_NOT_SSL_COMPLIANT (int): URL in HTML5 entry is not ssl compliant.
+ CUSTOM_EXIT_NOT_ALLOWED (int): Custom exits not allowed in HTML5 entry.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ BAD_REQUEST = 3
+ DOUBLECLICK_BUNDLE_NOT_ALLOWED = 4
+ EXTERNAL_URL_NOT_ALLOWED = 5
+ FILE_TOO_LARGE = 6
+ GOOGLE_WEB_DESIGNER_ZIP_FILE_NOT_PUBLISHED = 7
+ INVALID_INPUT = 8
+ INVALID_MEDIA_BUNDLE = 9
+ INVALID_MEDIA_BUNDLE_ENTRY = 10
+ INVALID_MIME_TYPE = 11
+ INVALID_PATH = 12
+ INVALID_URL_REFERENCE = 13
+ MEDIA_DATA_TOO_LARGE = 14
+ MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY = 15
+ SERVER_ERROR = 16
+ STORAGE_ERROR = 17
+ SWIFFY_BUNDLE_NOT_ALLOWED = 18
+ TOO_MANY_FILES = 19
+ UNEXPECTED_SIZE = 20
+ UNSUPPORTED_GOOGLE_WEB_DESIGNER_ENVIRONMENT = 21
+ UNSUPPORTED_HTML5_FEATURE = 22
+ URL_IN_MEDIA_BUNDLE_NOT_SSL_COMPLIANT = 23
+ CUSTOM_EXIT_NOT_ALLOWED = 24
+
+
+class IdErrorEnum(object):
+ class IdError(enum.IntEnum):
+ """
+ Enum describing possible id errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ NOT_FOUND (int): Id not found
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ NOT_FOUND = 2
+
+
+class FunctionParsingErrorEnum(object):
+ class FunctionParsingError(enum.IntEnum):
+ """
+ Enum describing possible function parsing errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ NO_MORE_INPUT (int): Unexpected end of function string.
+ EXPECTED_CHARACTER (int): Could not find an expected character.
+ UNEXPECTED_SEPARATOR (int): Unexpected separator character.
+ UNMATCHED_LEFT_BRACKET (int): Unmatched left bracket or parenthesis.
+ UNMATCHED_RIGHT_BRACKET (int): Unmatched right bracket or parenthesis.
+ TOO_MANY_NESTED_FUNCTIONS (int): Functions are nested too deeply.
+ MISSING_RIGHT_HAND_OPERAND (int): Missing right-hand-side operand.
+ INVALID_OPERATOR_NAME (int): Invalid operator/function name.
+ FEED_ATTRIBUTE_OPERAND_ARGUMENT_NOT_INTEGER (int): Feed attribute operand's argument is not an integer.
+ NO_OPERANDS (int): Missing function operands.
+ TOO_MANY_OPERANDS (int): Function had too many operands.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ NO_MORE_INPUT = 2
+ EXPECTED_CHARACTER = 3
+ UNEXPECTED_SEPARATOR = 4
+ UNMATCHED_LEFT_BRACKET = 5
+ UNMATCHED_RIGHT_BRACKET = 6
+ TOO_MANY_NESTED_FUNCTIONS = 7
+ MISSING_RIGHT_HAND_OPERAND = 8
+ INVALID_OPERATOR_NAME = 9
+ FEED_ATTRIBUTE_OPERAND_ARGUMENT_NOT_INTEGER = 10
+ NO_OPERANDS = 11
+ TOO_MANY_OPERANDS = 12
+
+
+class AdGroupErrorEnum(object):
+ class AdGroupError(enum.IntEnum):
+ """
+ Enum describing possible ad group errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ DUPLICATE_ADGROUP_NAME (int): AdGroup with the same name already exists for the campaign.
+ INVALID_ADGROUP_NAME (int): AdGroup name is not valid.
+ ADVERTISER_NOT_ON_CONTENT_NETWORK (int): Advertiser is not allowed to target sites or set site bids that are not
+ on the Google Search Network.
+ BID_TOO_BIG (int): Bid amount is too big.
+ BID_TYPE_AND_BIDDING_STRATEGY_MISMATCH (int): AdGroup bid does not match the campaign's bidding strategy.
+ MISSING_ADGROUP_NAME (int): AdGroup name is required for Add.
+ ADGROUP_LABEL_DOES_NOT_EXIST (int): No link found between the ad group and the label.
+ ADGROUP_LABEL_ALREADY_EXISTS (int): The label has already been attached to the ad group.
+ INVALID_CONTENT_BID_CRITERION_TYPE_GROUP (int): The CriterionTypeGroup is not supported for the content bid dimension.
+ AD_GROUP_TYPE_NOT_VALID_FOR_ADVERTISING_CHANNEL_TYPE (int): The ad group type is not compatible with the campaign channel type.
+ ADGROUP_TYPE_NOT_SUPPORTED_FOR_CAMPAIGN_SALES_COUNTRY (int): The ad group type is not supported in the country of sale of the
+ campaign.
+ CANNOT_ADD_ADGROUP_OF_TYPE_DSA_TO_CAMPAIGN_WITHOUT_DSA_SETTING (int): Ad groups of AdGroupType.SEARCH_DYNAMIC_ADS can only be added to
+ campaigns that have DynamicSearchAdsSetting attached.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ DUPLICATE_ADGROUP_NAME = 2
+ INVALID_ADGROUP_NAME = 3
+ ADVERTISER_NOT_ON_CONTENT_NETWORK = 5
+ BID_TOO_BIG = 6
+ BID_TYPE_AND_BIDDING_STRATEGY_MISMATCH = 7
+ MISSING_ADGROUP_NAME = 8
+ ADGROUP_LABEL_DOES_NOT_EXIST = 9
+ ADGROUP_LABEL_ALREADY_EXISTS = 10
+ INVALID_CONTENT_BID_CRITERION_TYPE_GROUP = 11
+ AD_GROUP_TYPE_NOT_VALID_FOR_ADVERTISING_CHANNEL_TYPE = 12
+ ADGROUP_TYPE_NOT_SUPPORTED_FOR_CAMPAIGN_SALES_COUNTRY = 13
+ CANNOT_ADD_ADGROUP_OF_TYPE_DSA_TO_CAMPAIGN_WITHOUT_DSA_SETTING = 14
+
+
+class MutateErrorEnum(object):
+ class MutateError(enum.IntEnum):
+ """
+ Enum describing possible mutate errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ RESOURCE_NOT_FOUND (int): Requested resource was not found.
+ ID_EXISTS_IN_MULTIPLE_MUTATES (int): Cannot mutate the same resource twice in one request.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ RESOURCE_NOT_FOUND = 3
+ ID_EXISTS_IN_MULTIPLE_MUTATES = 7
+
+
+class BiddingStrategyErrorEnum(object):
+ class BiddingStrategyError(enum.IntEnum):
+ """
+ Enum describing possible bidding strategy errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ DUPLICATE_NAME (int): Each bidding strategy must have a unique name.
+ CANNOT_CHANGE_BIDDING_STRATEGY_TYPE (int): Bidding strategy type is immutable.
+ CANNOT_REMOVE_ASSOCIATED_STRATEGY (int): Only bidding strategies not linked to campaigns, adgroups or adgroup
+ criteria can be removed.
+ BIDDING_STRATEGY_NOT_SUPPORTED (int): The specified bidding strategy is not supported.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ DUPLICATE_NAME = 2
+ CANNOT_CHANGE_BIDDING_STRATEGY_TYPE = 3
+ CANNOT_REMOVE_ASSOCIATED_STRATEGY = 4
+ BIDDING_STRATEGY_NOT_SUPPORTED = 5
+
+
+class CampaignErrorEnum(object):
+ class CampaignError(enum.IntEnum):
+ """
+ Enum describing possible campaign errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ CANNOT_TARGET_CONTENT_NETWORK (int): Cannot target content network.
+ CANNOT_TARGET_SEARCH_NETWORK (int): Cannot target search network.
+ CANNOT_TARGET_SEARCH_NETWORK_WITHOUT_GOOGLE_SEARCH (int): Cannot cover search network without google search network.
+ CANNOT_TARGET_GOOGLE_SEARCH_FOR_CPM_CAMPAIGN (int): Cannot target Google Search network for a CPM campaign.
+ CAMPAIGN_MUST_TARGET_AT_LEAST_ONE_NETWORK (int): Must target at least one network.
+ CANNOT_TARGET_PARTNER_SEARCH_NETWORK (int): Only some Google partners are allowed to target partner search network.
+ CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CRITERIA_LEVEL_BIDDING_STRATEGY (int): Cannot target content network only as campaign has criteria-level bidding
+ strategy.
+ CAMPAIGN_DURATION_MUST_CONTAIN_ALL_RUNNABLE_TRIALS (int): Cannot modify the start or end date such that the campaign duration would
+ not contain the durations of all runnable trials.
+ CANNOT_MODIFY_FOR_TRIAL_CAMPAIGN (int): Cannot modify dates, budget or campaign name of a trial campaign.
+ DUPLICATE_CAMPAIGN_NAME (int): Trying to modify the name of an active or paused campaign, where the name
+ is already assigned to another active or paused campaign.
+ INCOMPATIBLE_CAMPAIGN_FIELD (int): Two fields are in conflicting modes.
+ INVALID_CAMPAIGN_NAME (int): Campaign name cannot be used.
+ INVALID_AD_SERVING_OPTIMIZATION_STATUS (int): Given status is invalid.
+ INVALID_TRACKING_URL (int): Error in the campaign level tracking url.
+ CANNOT_SET_BOTH_TRACKING_URL_TEMPLATE_AND_TRACKING_SETTING (int): Cannot set both tracking url template and tracking setting. An user has
+ to clear legacy tracking setting in order to add tracking url template.
+ MAX_IMPRESSIONS_NOT_IN_RANGE (int): The maximum number of impressions for Frequency Cap should be an integer
+ greater than 0.
+ TIME_UNIT_NOT_SUPPORTED (int): Only the Day, Week and Month time units are supported.
+ INVALID_OPERATION_IF_SERVING_STATUS_HAS_ENDED (int): Operation not allowed on a campaign whose serving status has ended
+ BUDGET_CANNOT_BE_SHARED (int): This budget is exclusively linked to a Campaign that is using experiments
+ so it cannot be shared.
+ CAMPAIGN_CANNOT_USE_SHARED_BUDGET (int): Campaigns using experiments cannot use a shared budget.
+ CANNOT_CHANGE_BUDGET_ON_CAMPAIGN_WITH_TRIALS (int): A different budget cannot be assigned to a campaign when there are
+ running or scheduled trials.
+ CAMPAIGN_LABEL_DOES_NOT_EXIST (int): No link found between the campaign and the label.
+ CAMPAIGN_LABEL_ALREADY_EXISTS (int): The label has already been attached to the campaign.
+ MISSING_SHOPPING_SETTING (int): A ShoppingSetting was not found when creating a shopping campaign.
+ INVALID_SHOPPING_SALES_COUNTRY (int): The country in shopping setting is not an allowed country.
+ SHOPPING_MERCHANT_NOT_ALLOWED_FOR_PURCHASES_ON_GOOGLE (int): Shopping merchant is not enabled for Purchases on Google.
+ PURCHASES_ON_GOOGLE_NOT_SUPPORTED_FOR_SHOPPING_SALES_COUNTRY (int): Purchases on Google not enabled for the shopping campaign's sales
+ country.
+ MISSING_UNIVERSAL_APP_CAMPAIGN_SETTING (int): A Campaign with channel sub type UNIVERSAL_APP_CAMPAIGN must have a
+ UniversalAppCampaignSetting specified.
+ ADVERTISING_CHANNEL_TYPE_NOT_AVAILABLE_FOR_ACCOUNT_TYPE (int): The requested channel type is not available according to the customer's
+ account setting.
+ INVALID_ADVERTISING_CHANNEL_SUB_TYPE (int): The AdvertisingChannelSubType is not a valid subtype of the primary
+ channel type.
+ AT_LEAST_ONE_CONVERSION_MUST_BE_SELECTED (int): At least one conversion must be selected.
+ CANNOT_SET_AD_ROTATION_MODE (int): Setting ad rotation mode for a campaign is not allowed. Ad rotation mode
+ at campaign is deprecated.
+ CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED (int): Trying to change start date on a campaign that has started.
+ CANNOT_SET_DATE_TO_PAST (int): Trying to modify a date into the past.
+ MISSING_HOTEL_CUSTOMER_LINK (int): Hotel center id in the hotel setting does not match any customer links.
+ INVALID_HOTEL_CUSTOMER_LINK (int): Hotel center id in the hotel setting must match an active customer link.
+ MISSING_HOTEL_SETTING (int): Hotel setting was not found when creating a hotel ads campaign.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ CANNOT_TARGET_CONTENT_NETWORK = 3
+ CANNOT_TARGET_SEARCH_NETWORK = 4
+ CANNOT_TARGET_SEARCH_NETWORK_WITHOUT_GOOGLE_SEARCH = 5
+ CANNOT_TARGET_GOOGLE_SEARCH_FOR_CPM_CAMPAIGN = 6
+ CAMPAIGN_MUST_TARGET_AT_LEAST_ONE_NETWORK = 7
+ CANNOT_TARGET_PARTNER_SEARCH_NETWORK = 8
+ CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CRITERIA_LEVEL_BIDDING_STRATEGY = 9
+ CAMPAIGN_DURATION_MUST_CONTAIN_ALL_RUNNABLE_TRIALS = 10
+ CANNOT_MODIFY_FOR_TRIAL_CAMPAIGN = 11
+ DUPLICATE_CAMPAIGN_NAME = 12
+ INCOMPATIBLE_CAMPAIGN_FIELD = 13
+ INVALID_CAMPAIGN_NAME = 14
+ INVALID_AD_SERVING_OPTIMIZATION_STATUS = 15
+ INVALID_TRACKING_URL = 16
+ CANNOT_SET_BOTH_TRACKING_URL_TEMPLATE_AND_TRACKING_SETTING = 17
+ MAX_IMPRESSIONS_NOT_IN_RANGE = 18
+ TIME_UNIT_NOT_SUPPORTED = 19
+ INVALID_OPERATION_IF_SERVING_STATUS_HAS_ENDED = 20
+ BUDGET_CANNOT_BE_SHARED = 21
+ CAMPAIGN_CANNOT_USE_SHARED_BUDGET = 22
+ CANNOT_CHANGE_BUDGET_ON_CAMPAIGN_WITH_TRIALS = 23
+ CAMPAIGN_LABEL_DOES_NOT_EXIST = 24
+ CAMPAIGN_LABEL_ALREADY_EXISTS = 25
+ MISSING_SHOPPING_SETTING = 26
+ INVALID_SHOPPING_SALES_COUNTRY = 27
+ SHOPPING_MERCHANT_NOT_ALLOWED_FOR_PURCHASES_ON_GOOGLE = 28
+ PURCHASES_ON_GOOGLE_NOT_SUPPORTED_FOR_SHOPPING_SALES_COUNTRY = 29
+ MISSING_UNIVERSAL_APP_CAMPAIGN_SETTING = 30
+ ADVERTISING_CHANNEL_TYPE_NOT_AVAILABLE_FOR_ACCOUNT_TYPE = 31
+ INVALID_ADVERTISING_CHANNEL_SUB_TYPE = 32
+ AT_LEAST_ONE_CONVERSION_MUST_BE_SELECTED = 33
+ CANNOT_SET_AD_ROTATION_MODE = 34
+ CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED = 35
+ CANNOT_SET_DATE_TO_PAST = 36
+ MISSING_HOTEL_CUSTOMER_LINK = 37
+ INVALID_HOTEL_CUSTOMER_LINK = 38
+ MISSING_HOTEL_SETTING = 39
+
+
+class ContextErrorEnum(object):
+ class ContextError(enum.IntEnum):
+ """
+ Enum describing possible context errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ OPERATION_NOT_PERMITTED_FOR_CONTEXT (int): The operation is not allowed for the given context.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ OPERATION_NOT_PERMITTED_FOR_CONTEXT = 2
+
+
+class FeedAttributeReferenceErrorEnum(object):
+ class FeedAttributeReferenceError(enum.IntEnum):
+ """
+ Enum describing possible feed attribute reference errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ CANNOT_REFERENCE_DELETED_FEED (int): A feed referenced by ID has been deleted.
+ INVALID_FEED_NAME (int): There is no active feed with the given name.
+ INVALID_FEED_ATTRIBUTE_NAME (int): There is no feed attribute in an active feed with the given name.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ CANNOT_REFERENCE_DELETED_FEED = 2
+ INVALID_FEED_NAME = 3
+ INVALID_FEED_ATTRIBUTE_NAME = 4
+
+
+class FieldMaskErrorEnum(object):
+ class FieldMaskError(enum.IntEnum):
+ """
+ Enum describing possible field mask errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ FIELD_MASK_MISSING (int): The field mask must be provided for update operations.
+ FIELD_MASK_NOT_ALLOWED (int): The field mask must be empty for create and remove operations.
+ FIELD_NOT_FOUND (int): The field mask contained an invalid field.
+ FIELD_HAS_SUBFIELDS (int): The field mask updated a field with subfields. Fields with subfields may
+ be cleared, but not updated. To fix this, the field mask should select
+ all the subfields of the invalid field.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ FIELD_MASK_MISSING = 5
+ FIELD_MASK_NOT_ALLOWED = 4
+ FIELD_NOT_FOUND = 2
+ FIELD_HAS_SUBFIELDS = 3
+
+
+class FunctionErrorEnum(object):
+ class FunctionError(enum.IntEnum):
+ """
+ Enum describing possible function errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ INVALID_FUNCTION_FORMAT (int): The format of the function is not recognized as a supported function
+ format.
+ DATA_TYPE_MISMATCH (int): Operand data types do not match.
+ INVALID_CONJUNCTION_OPERANDS (int): The operands cannot be used together in a conjunction.
+ INVALID_NUMBER_OF_OPERANDS (int): Invalid numer of Operands.
+ INVALID_OPERAND_TYPE (int): Operand Type not supported.
+ INVALID_OPERATOR (int): Operator not supported.
+ INVALID_REQUEST_CONTEXT_TYPE (int): Request context type not supported.
+ INVALID_FUNCTION_FOR_CALL_PLACEHOLDER (int): The matching function is not allowed for call placeholders
+ INVALID_FUNCTION_FOR_PLACEHOLDER (int): The matching function is not allowed for the specified placeholder
+ INVALID_OPERAND (int): Invalid operand.
+ MISSING_CONSTANT_OPERAND_VALUE (int): Missing value for the constant operand.
+ INVALID_CONSTANT_OPERAND_VALUE (int): The value of the constant operand is invalid.
+ INVALID_NESTING (int): Invalid function nesting.
+ MULTIPLE_FEED_IDS_NOT_SUPPORTED (int): The Feed ID was different from another Feed ID in the same function.
+ INVALID_FUNCTION_FOR_FEED_WITH_FIXED_SCHEMA (int): The matching function is invalid for use with a feed with a fixed schema.
+ INVALID_ATTRIBUTE_NAME (int): Invalid attribute name.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ INVALID_FUNCTION_FORMAT = 2
+ DATA_TYPE_MISMATCH = 3
+ INVALID_CONJUNCTION_OPERANDS = 4
+ INVALID_NUMBER_OF_OPERANDS = 5
+ INVALID_OPERAND_TYPE = 6
+ INVALID_OPERATOR = 7
+ INVALID_REQUEST_CONTEXT_TYPE = 8
+ INVALID_FUNCTION_FOR_CALL_PLACEHOLDER = 9
+ INVALID_FUNCTION_FOR_PLACEHOLDER = 10
+ INVALID_OPERAND = 11
+ MISSING_CONSTANT_OPERAND_VALUE = 12
+ INVALID_CONSTANT_OPERAND_VALUE = 13
+ INVALID_NESTING = 14
+ MULTIPLE_FEED_IDS_NOT_SUPPORTED = 15
+ INVALID_FUNCTION_FOR_FEED_WITH_FIXED_SCHEMA = 16
+ INVALID_ATTRIBUTE_NAME = 17
+
+
+class ListOperationErrorEnum(object):
+ class ListOperationError(enum.IntEnum):
+ """
+ Enum describing possible list operation errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ REQUIRED_FIELD_MISSING (int): Field required in value is missing.
+ DUPLICATE_VALUES (int): Duplicate or identical value is sent in multiple list operations.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ REQUIRED_FIELD_MISSING = 7
+ DUPLICATE_VALUES = 8
+
+
+class OperatorErrorEnum(object):
+ class OperatorError(enum.IntEnum):
+ """
+ Enum describing possible operator errors.
+
+ Attributes:
+ UNSPECIFIED (int): Enum unspecified.
+ UNKNOWN (int): The received error code is not known in this version.
+ OPERATOR_NOT_SUPPORTED (int): Operator not supported.
+ """
+ UNSPECIFIED = 0
+ UNKNOWN = 1
+ OPERATOR_NOT_SUPPORTED = 2
diff --git a/google/ads/google_ads/v0/services/geo_target_constant_service_client.py b/google/ads/google_ads/v0/services/geo_target_constant_service_client.py
new file mode 100644
index 000000000..a4e4acdf2
--- /dev/null
+++ b/google/ads/google_ads/v0/services/geo_target_constant_service_client.py
@@ -0,0 +1,216 @@
+# Copyright 2018 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.
+"""Accesses the google.ads.googleads.v0.services GeoTargetConstantService API."""
+
+import pkg_resources
+import warnings
+
+from google.oauth2 import service_account
+import google.api_core.gapic_v1.client_info
+import google.api_core.gapic_v1.config
+import google.api_core.gapic_v1.method
+import google.api_core.grpc_helpers
+import google.api_core.path_template
+
+from google.ads.google_ads.v0.services import geo_target_constant_service_client_config
+from google.ads.google_ads.v0.services.transports import geo_target_constant_service_grpc_transport
+from google.ads.google_ads.v0.proto.services import geo_target_constant_service_pb2
+
+_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution(
+ 'google-ads', ).version
+
+
+class GeoTargetConstantServiceClient(object):
+ """Service to fetch geo target constants."""
+
+ SERVICE_ADDRESS = 'googleads.googleapis.com:443'
+ """The default address of the service."""
+
+ # The name of the interface for this client. This is the key used to
+ # find the method configuration in the client_config dictionary.
+ _INTERFACE_NAME = 'google.ads.googleads.v0.services.GeoTargetConstantService'
+
+ @classmethod
+ def from_service_account_file(cls, filename, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ GeoTargetConstantServiceClient: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_file(
+ filename)
+ kwargs['credentials'] = credentials
+ return cls(*args, **kwargs)
+
+ from_service_account_json = from_service_account_file
+
+ @classmethod
+ def geo_target_constant_path(cls, geo_target_constant):
+ """Return a fully-qualified geo_target_constant string."""
+ return google.api_core.path_template.expand(
+ 'geoTargetConstants/{geo_target_constant}',
+ geo_target_constant=geo_target_constant,
+ )
+
+ def __init__(
+ self,
+ transport=None,
+ channel=None,
+ credentials=None,
+ client_config=geo_target_constant_service_client_config.config,
+ client_info=None):
+ """Constructor.
+
+ Args:
+ transport (Union[~.GeoTargetConstantServiceGrpcTransport,
+ Callable[[~.Credentials, type], ~.GeoTargetConstantServiceGrpcTransport]): A transport
+ instance, responsible for actually making the API calls.
+ The default transport uses the gRPC protocol.
+ This argument may also be a callable which returns a
+ transport instance. Callables will be sent the credentials
+ as the first argument and the default transport class as
+ the second argument.
+ channel (grpc.Channel): DEPRECATED. A ``Channel`` instance
+ through which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is mutually exclusive with providing a
+ transport instance to ``transport``; doing so will raise
+ an exception.
+ client_config (dict): DEPRECATED. A dictionary of call options for
+ each method. If not specified, the default configuration is used.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ """
+ # Raise deprecation warnings for things we want to go away.
+ if client_config:
+ warnings.warn('The `client_config` argument is deprecated.',
+ PendingDeprecationWarning)
+ if channel:
+ warnings.warn(
+ 'The `channel` argument is deprecated; use '
+ '`transport` instead.', PendingDeprecationWarning)
+
+ # Instantiate the transport.
+ # The transport is responsible for handling serialization and
+ # deserialization and actually sending data to the service.
+ if transport:
+ if callable(transport):
+ self.transport = transport(
+ credentials=credentials,
+ default_class=geo_target_constant_service_grpc_transport.
+ GeoTargetConstantServiceGrpcTransport,
+ )
+ else:
+ if credentials:
+ raise ValueError(
+ 'Received both a transport instance and '
+ 'credentials; these are mutually exclusive.')
+ self.transport = transport
+ else:
+ self.transport = geo_target_constant_service_grpc_transport.GeoTargetConstantServiceGrpcTransport(
+ address=self.SERVICE_ADDRESS,
+ channel=channel,
+ credentials=credentials,
+ )
+
+ if client_info is None:
+ client_info = (
+ google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO)
+ client_info.gapic_version = _GAPIC_LIBRARY_VERSION
+ self._client_info = client_info
+
+ # Parse out the default settings for retry and timeout for each RPC
+ # from the client configuration.
+ # (Ordinarily, these are the defaults specified in the `*_config.py`
+ # file next to this one.)
+ self._method_configs = google.api_core.gapic_v1.config.parse_method_configs(
+ client_config['interfaces'][self._INTERFACE_NAME], )
+
+ # Save a dictionary of cached API call functions.
+ # These are the actual callables which invoke the proper
+ # transport methods, wrapped with `wrap_method` to add retry,
+ # timeout, and the like.
+ self._inner_api_calls = {}
+
+ # Service calls
+ def get_geo_target_constant(
+ self,
+ resource_name,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Returns the requested geo target constant in full detail.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.GeoTargetConstantServiceClient()
+ >>>
+ >>> resource_name = client.geo_target_constant_path('[GEO_TARGET_CONSTANT]')
+ >>>
+ >>> response = client.get_geo_target_constant(resource_name)
+
+ Args:
+ resource_name (str): The resource name of the geo target constant to fetch.
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.GeoTargetConstant` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'get_geo_target_constant' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'get_geo_target_constant'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.get_geo_target_constant,
+ default_retry=self._method_configs['GetGeoTargetConstant']
+ .retry,
+ default_timeout=self._method_configs[
+ 'GetGeoTargetConstant'].timeout,
+ client_info=self._client_info,
+ )
+
+ request = geo_target_constant_service_pb2.GetGeoTargetConstantRequest(
+ resource_name=resource_name, )
+ return self._inner_api_calls['get_geo_target_constant'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
diff --git a/google/ads/google_ads/v0/services/geo_target_constant_service_client_config.py b/google/ads/google_ads/v0/services/geo_target_constant_service_client_config.py
new file mode 100644
index 000000000..4b6aa5fef
--- /dev/null
+++ b/google/ads/google_ads/v0/services/geo_target_constant_service_client_config.py
@@ -0,0 +1,28 @@
+config = {
+ "interfaces": {
+ "google.ads.googleads.v0.services.GeoTargetConstantService": {
+ "retry_codes": {
+ "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetGeoTargetConstant": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/google/ads/google_ads/v0/services/google_ads_field_service_client.py b/google/ads/google_ads/v0/services/google_ads_field_service_client.py
new file mode 100644
index 000000000..8ee54fccf
--- /dev/null
+++ b/google/ads/google_ads/v0/services/google_ads_field_service_client.py
@@ -0,0 +1,307 @@
+# Copyright 2018 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.
+"""Accesses the google.ads.googleads.v0.services GoogleAdsFieldService API."""
+
+import functools
+import pkg_resources
+import warnings
+
+from google.oauth2 import service_account
+import google.api_core.gapic_v1.client_info
+import google.api_core.gapic_v1.config
+import google.api_core.gapic_v1.method
+import google.api_core.grpc_helpers
+import google.api_core.page_iterator
+import google.api_core.path_template
+
+from google.ads.google_ads.v0.services import google_ads_field_service_client_config
+from google.ads.google_ads.v0.services.transports import google_ads_field_service_grpc_transport
+from google.ads.google_ads.v0.proto.services import google_ads_field_service_pb2
+
+_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution(
+ 'google-ads', ).version
+
+
+class GoogleAdsFieldServiceClient(object):
+ """Service to fetch Google Ads API fields."""
+
+ SERVICE_ADDRESS = 'googleads.googleapis.com:443'
+ """The default address of the service."""
+
+ # The name of the interface for this client. This is the key used to
+ # find the method configuration in the client_config dictionary.
+ _INTERFACE_NAME = 'google.ads.googleads.v0.services.GoogleAdsFieldService'
+
+ @classmethod
+ def from_service_account_file(cls, filename, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ GoogleAdsFieldServiceClient: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_file(
+ filename)
+ kwargs['credentials'] = credentials
+ return cls(*args, **kwargs)
+
+ from_service_account_json = from_service_account_file
+
+ @classmethod
+ def google_ads_field_path(cls, google_ads_field):
+ """Return a fully-qualified google_ads_field string."""
+ return google.api_core.path_template.expand(
+ 'googleAdsFields/{google_ads_field}',
+ google_ads_field=google_ads_field,
+ )
+
+ def __init__(self,
+ transport=None,
+ channel=None,
+ credentials=None,
+ client_config=google_ads_field_service_client_config.config,
+ client_info=None):
+ """Constructor.
+
+ Args:
+ transport (Union[~.GoogleAdsFieldServiceGrpcTransport,
+ Callable[[~.Credentials, type], ~.GoogleAdsFieldServiceGrpcTransport]): A transport
+ instance, responsible for actually making the API calls.
+ The default transport uses the gRPC protocol.
+ This argument may also be a callable which returns a
+ transport instance. Callables will be sent the credentials
+ as the first argument and the default transport class as
+ the second argument.
+ channel (grpc.Channel): DEPRECATED. A ``Channel`` instance
+ through which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is mutually exclusive with providing a
+ transport instance to ``transport``; doing so will raise
+ an exception.
+ client_config (dict): DEPRECATED. A dictionary of call options for
+ each method. If not specified, the default configuration is used.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ """
+ # Raise deprecation warnings for things we want to go away.
+ if client_config:
+ warnings.warn('The `client_config` argument is deprecated.',
+ PendingDeprecationWarning)
+ if channel:
+ warnings.warn(
+ 'The `channel` argument is deprecated; use '
+ '`transport` instead.', PendingDeprecationWarning)
+
+ # Instantiate the transport.
+ # The transport is responsible for handling serialization and
+ # deserialization and actually sending data to the service.
+ if transport:
+ if callable(transport):
+ self.transport = transport(
+ credentials=credentials,
+ default_class=google_ads_field_service_grpc_transport.
+ GoogleAdsFieldServiceGrpcTransport,
+ )
+ else:
+ if credentials:
+ raise ValueError(
+ 'Received both a transport instance and '
+ 'credentials; these are mutually exclusive.')
+ self.transport = transport
+ else:
+ self.transport = google_ads_field_service_grpc_transport.GoogleAdsFieldServiceGrpcTransport(
+ address=self.SERVICE_ADDRESS,
+ channel=channel,
+ credentials=credentials,
+ )
+
+ if client_info is None:
+ client_info = (
+ google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO)
+ client_info.gapic_version = _GAPIC_LIBRARY_VERSION
+ self._client_info = client_info
+
+ # Parse out the default settings for retry and timeout for each RPC
+ # from the client configuration.
+ # (Ordinarily, these are the defaults specified in the `*_config.py`
+ # file next to this one.)
+ self._method_configs = google.api_core.gapic_v1.config.parse_method_configs(
+ client_config['interfaces'][self._INTERFACE_NAME], )
+
+ # Save a dictionary of cached API call functions.
+ # These are the actual callables which invoke the proper
+ # transport methods, wrapped with `wrap_method` to add retry,
+ # timeout, and the like.
+ self._inner_api_calls = {}
+
+ # Service calls
+ def get_google_ads_field(self,
+ resource_name,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Returns just the requested field.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.GoogleAdsFieldServiceClient()
+ >>>
+ >>> resource_name = client.google_ads_field_path('[GOOGLE_ADS_FIELD]')
+ >>>
+ >>> response = client.get_google_ads_field(resource_name)
+
+ Args:
+ resource_name (str): The resource name of the field to get.
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.GoogleAdsField` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'get_google_ads_field' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'get_google_ads_field'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.get_google_ads_field,
+ default_retry=self._method_configs[
+ 'GetGoogleAdsField'].retry,
+ default_timeout=self._method_configs['GetGoogleAdsField']
+ .timeout,
+ client_info=self._client_info,
+ )
+
+ request = google_ads_field_service_pb2.GetGoogleAdsFieldRequest(
+ resource_name=resource_name, )
+ return self._inner_api_calls['get_google_ads_field'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
+
+ def search_google_ads_fields(
+ self,
+ query,
+ page_size=None,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Returns all fields that match the search query.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.GoogleAdsFieldServiceClient()
+ >>>
+ >>> # TODO: Initialize ``query``:
+ >>> query = ''
+ >>>
+ >>> # Iterate over all results
+ >>> for element in client.search_google_ads_fields(query):
+ ... # process element
+ ... pass
+ >>>
+ >>>
+ >>> # Alternatively:
+ >>>
+ >>> # Iterate over results one page at a time
+ >>> for page in client.search_google_ads_fields(query, options=CallOptions(page_token=INITIAL_PAGE)):
+ ... for element in page:
+ ... # process element
+ ... pass
+
+ Args:
+ query (str): The query string.
+ page_size (int): The maximum number of resources contained in the
+ underlying API response. If page streaming is performed per-
+ resource, this parameter does not affect the return value. If page
+ streaming is performed per-page, this determines the maximum number
+ of resources in a page.
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.gax.PageIterator` instance. By default, this
+ is an iterable of :class:`~google.cloud.ads.googleads_v0.types.GoogleAdsField` instances.
+ This object can also be configured to iterate over the pages
+ of the response through the `options` parameter.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'search_google_ads_fields' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'search_google_ads_fields'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.search_google_ads_fields,
+ default_retry=self._method_configs['SearchGoogleAdsFields']
+ .retry,
+ default_timeout=self._method_configs[
+ 'SearchGoogleAdsFields'].timeout,
+ client_info=self._client_info,
+ )
+
+ request = google_ads_field_service_pb2.SearchGoogleAdsFieldsRequest(
+ query=query,
+ page_size=page_size,
+ )
+ iterator = google.api_core.page_iterator.GRPCIterator(
+ client=None,
+ method=functools.partial(
+ self._inner_api_calls['search_google_ads_fields'],
+ retry=retry,
+ timeout=timeout,
+ metadata=metadata),
+ request=request,
+ items_field='results',
+ request_token_field='page_token',
+ response_token_field='next_page_token',
+ )
+ return iterator
diff --git a/google/ads/google_ads/v0/services/google_ads_field_service_client_config.py b/google/ads/google_ads/v0/services/google_ads_field_service_client_config.py
new file mode 100644
index 000000000..da89d34bc
--- /dev/null
+++ b/google/ads/google_ads/v0/services/google_ads_field_service_client_config.py
@@ -0,0 +1,33 @@
+config = {
+ "interfaces": {
+ "google.ads.googleads.v0.services.GoogleAdsFieldService": {
+ "retry_codes": {
+ "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetGoogleAdsField": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "SearchGoogleAdsFields": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/google/ads/google_ads/v0/services/google_ads_service_client.py b/google/ads/google_ads/v0/services/google_ads_service_client.py
new file mode 100644
index 000000000..ae3fa3832
--- /dev/null
+++ b/google/ads/google_ads/v0/services/google_ads_service_client.py
@@ -0,0 +1,246 @@
+# Copyright 2018 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.
+"""Accesses the google.ads.googleads.v0.services GoogleAdsService API."""
+
+import functools
+import pkg_resources
+import warnings
+
+from google.oauth2 import service_account
+import google.api_core.gapic_v1.client_info
+import google.api_core.gapic_v1.config
+import google.api_core.gapic_v1.method
+import google.api_core.grpc_helpers
+import google.api_core.page_iterator
+
+from google.ads.google_ads.v0.services import google_ads_service_client_config
+from google.ads.google_ads.v0.services.transports import google_ads_service_grpc_transport
+from google.ads.google_ads.v0.proto.services import google_ads_service_pb2
+
+_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution(
+ 'google-ads', ).version
+
+
+class GoogleAdsServiceClient(object):
+ """Service to fetch data and metrics across resources."""
+
+ SERVICE_ADDRESS = 'googleads.googleapis.com:443'
+ """The default address of the service."""
+
+ # The name of the interface for this client. This is the key used to
+ # find the method configuration in the client_config dictionary.
+ _INTERFACE_NAME = 'google.ads.googleads.v0.services.GoogleAdsService'
+
+ @classmethod
+ def from_service_account_file(cls, filename, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ GoogleAdsServiceClient: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_file(
+ filename)
+ kwargs['credentials'] = credentials
+ return cls(*args, **kwargs)
+
+ from_service_account_json = from_service_account_file
+
+ def __init__(self,
+ transport=None,
+ channel=None,
+ credentials=None,
+ client_config=google_ads_service_client_config.config,
+ client_info=None):
+ """Constructor.
+
+ Args:
+ transport (Union[~.GoogleAdsServiceGrpcTransport,
+ Callable[[~.Credentials, type], ~.GoogleAdsServiceGrpcTransport]): A transport
+ instance, responsible for actually making the API calls.
+ The default transport uses the gRPC protocol.
+ This argument may also be a callable which returns a
+ transport instance. Callables will be sent the credentials
+ as the first argument and the default transport class as
+ the second argument.
+ channel (grpc.Channel): DEPRECATED. A ``Channel`` instance
+ through which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is mutually exclusive with providing a
+ transport instance to ``transport``; doing so will raise
+ an exception.
+ client_config (dict): DEPRECATED. A dictionary of call options for
+ each method. If not specified, the default configuration is used.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ """
+ # Raise deprecation warnings for things we want to go away.
+ if client_config:
+ warnings.warn('The `client_config` argument is deprecated.',
+ PendingDeprecationWarning)
+ if channel:
+ warnings.warn(
+ 'The `channel` argument is deprecated; use '
+ '`transport` instead.', PendingDeprecationWarning)
+
+ # Instantiate the transport.
+ # The transport is responsible for handling serialization and
+ # deserialization and actually sending data to the service.
+ if transport:
+ if callable(transport):
+ self.transport = transport(
+ credentials=credentials,
+ default_class=google_ads_service_grpc_transport.
+ GoogleAdsServiceGrpcTransport,
+ )
+ else:
+ if credentials:
+ raise ValueError(
+ 'Received both a transport instance and '
+ 'credentials; these are mutually exclusive.')
+ self.transport = transport
+ else:
+ self.transport = google_ads_service_grpc_transport.GoogleAdsServiceGrpcTransport(
+ address=self.SERVICE_ADDRESS,
+ channel=channel,
+ credentials=credentials,
+ )
+
+ if client_info is None:
+ client_info = (
+ google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO)
+ client_info.gapic_version = _GAPIC_LIBRARY_VERSION
+ self._client_info = client_info
+
+ # Parse out the default settings for retry and timeout for each RPC
+ # from the client configuration.
+ # (Ordinarily, these are the defaults specified in the `*_config.py`
+ # file next to this one.)
+ self._method_configs = google.api_core.gapic_v1.config.parse_method_configs(
+ client_config['interfaces'][self._INTERFACE_NAME], )
+
+ # Save a dictionary of cached API call functions.
+ # These are the actual callables which invoke the proper
+ # transport methods, wrapped with `wrap_method` to add retry,
+ # timeout, and the like.
+ self._inner_api_calls = {}
+
+ # Service calls
+ def search(self,
+ customer_id,
+ query,
+ page_size=None,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Returns all rows that match the search query.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.GoogleAdsServiceClient()
+ >>>
+ >>> # TODO: Initialize ``customer_id``:
+ >>> customer_id = ''
+ >>>
+ >>> # TODO: Initialize ``query``:
+ >>> query = ''
+ >>>
+ >>> # Iterate over all results
+ >>> for element in client.search(customer_id, query):
+ ... # process element
+ ... pass
+ >>>
+ >>>
+ >>> # Alternatively:
+ >>>
+ >>> # Iterate over results one page at a time
+ >>> for page in client.search(customer_id, query, options=CallOptions(page_token=INITIAL_PAGE)):
+ ... for element in page:
+ ... # process element
+ ... pass
+
+ Args:
+ customer_id (str): The ID of the customer being queried.
+ query (str): The query string.
+ page_size (int): The maximum number of resources contained in the
+ underlying API response. If page streaming is performed per-
+ resource, this parameter does not affect the return value. If page
+ streaming is performed per-page, this determines the maximum number
+ of resources in a page.
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.gax.PageIterator` instance. By default, this
+ is an iterable of :class:`~google.cloud.ads.googleads_v0.types.GoogleAdsRow` instances.
+ This object can also be configured to iterate over the pages
+ of the response through the `options` parameter.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'search' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'search'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.search,
+ default_retry=self._method_configs['Search'].retry,
+ default_timeout=self._method_configs['Search'].timeout,
+ client_info=self._client_info,
+ )
+
+ request = google_ads_service_pb2.SearchGoogleAdsRequest(
+ customer_id=customer_id,
+ query=query,
+ page_size=page_size,
+ )
+ iterator = google.api_core.page_iterator.GRPCIterator(
+ client=None,
+ method=functools.partial(
+ self._inner_api_calls['search'],
+ retry=retry,
+ timeout=timeout,
+ metadata=metadata),
+ request=request,
+ items_field='results',
+ request_token_field='page_token',
+ response_token_field='next_page_token',
+ )
+ return iterator
diff --git a/google/ads/google_ads/v0/services/google_ads_service_client_config.py b/google/ads/google_ads/v0/services/google_ads_service_client_config.py
new file mode 100644
index 000000000..cb5b4883d
--- /dev/null
+++ b/google/ads/google_ads/v0/services/google_ads_service_client_config.py
@@ -0,0 +1,28 @@
+config = {
+ "interfaces": {
+ "google.ads.googleads.v0.services.GoogleAdsService": {
+ "retry_codes": {
+ "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "Search": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/google/ads/google_ads/v0/services/keyword_view_service_client.py b/google/ads/google_ads/v0/services/keyword_view_service_client.py
new file mode 100644
index 000000000..335cd4e86
--- /dev/null
+++ b/google/ads/google_ads/v0/services/keyword_view_service_client.py
@@ -0,0 +1,214 @@
+# Copyright 2018 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.
+"""Accesses the google.ads.googleads.v0.services KeywordViewService API."""
+
+import pkg_resources
+import warnings
+
+from google.oauth2 import service_account
+import google.api_core.gapic_v1.client_info
+import google.api_core.gapic_v1.config
+import google.api_core.gapic_v1.method
+import google.api_core.grpc_helpers
+import google.api_core.path_template
+
+from google.ads.google_ads.v0.services import keyword_view_service_client_config
+from google.ads.google_ads.v0.services.transports import keyword_view_service_grpc_transport
+from google.ads.google_ads.v0.proto.services import keyword_view_service_pb2
+
+_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution(
+ 'google-ads', ).version
+
+
+class KeywordViewServiceClient(object):
+ """Service to manage keyword views."""
+
+ SERVICE_ADDRESS = 'googleads.googleapis.com:443'
+ """The default address of the service."""
+
+ # The name of the interface for this client. This is the key used to
+ # find the method configuration in the client_config dictionary.
+ _INTERFACE_NAME = 'google.ads.googleads.v0.services.KeywordViewService'
+
+ @classmethod
+ def from_service_account_file(cls, filename, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ KeywordViewServiceClient: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_file(
+ filename)
+ kwargs['credentials'] = credentials
+ return cls(*args, **kwargs)
+
+ from_service_account_json = from_service_account_file
+
+ @classmethod
+ def keyword_view_path(cls, customer, keyword_view):
+ """Return a fully-qualified keyword_view string."""
+ return google.api_core.path_template.expand(
+ 'customers/{customer}/keywordViews/{keyword_view}',
+ customer=customer,
+ keyword_view=keyword_view,
+ )
+
+ def __init__(self,
+ transport=None,
+ channel=None,
+ credentials=None,
+ client_config=keyword_view_service_client_config.config,
+ client_info=None):
+ """Constructor.
+
+ Args:
+ transport (Union[~.KeywordViewServiceGrpcTransport,
+ Callable[[~.Credentials, type], ~.KeywordViewServiceGrpcTransport]): A transport
+ instance, responsible for actually making the API calls.
+ The default transport uses the gRPC protocol.
+ This argument may also be a callable which returns a
+ transport instance. Callables will be sent the credentials
+ as the first argument and the default transport class as
+ the second argument.
+ channel (grpc.Channel): DEPRECATED. A ``Channel`` instance
+ through which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is mutually exclusive with providing a
+ transport instance to ``transport``; doing so will raise
+ an exception.
+ client_config (dict): DEPRECATED. A dictionary of call options for
+ each method. If not specified, the default configuration is used.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ """
+ # Raise deprecation warnings for things we want to go away.
+ if client_config:
+ warnings.warn('The `client_config` argument is deprecated.',
+ PendingDeprecationWarning)
+ if channel:
+ warnings.warn(
+ 'The `channel` argument is deprecated; use '
+ '`transport` instead.', PendingDeprecationWarning)
+
+ # Instantiate the transport.
+ # The transport is responsible for handling serialization and
+ # deserialization and actually sending data to the service.
+ if transport:
+ if callable(transport):
+ self.transport = transport(
+ credentials=credentials,
+ default_class=keyword_view_service_grpc_transport.
+ KeywordViewServiceGrpcTransport,
+ )
+ else:
+ if credentials:
+ raise ValueError(
+ 'Received both a transport instance and '
+ 'credentials; these are mutually exclusive.')
+ self.transport = transport
+ else:
+ self.transport = keyword_view_service_grpc_transport.KeywordViewServiceGrpcTransport(
+ address=self.SERVICE_ADDRESS,
+ channel=channel,
+ credentials=credentials,
+ )
+
+ if client_info is None:
+ client_info = (
+ google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO)
+ client_info.gapic_version = _GAPIC_LIBRARY_VERSION
+ self._client_info = client_info
+
+ # Parse out the default settings for retry and timeout for each RPC
+ # from the client configuration.
+ # (Ordinarily, these are the defaults specified in the `*_config.py`
+ # file next to this one.)
+ self._method_configs = google.api_core.gapic_v1.config.parse_method_configs(
+ client_config['interfaces'][self._INTERFACE_NAME], )
+
+ # Save a dictionary of cached API call functions.
+ # These are the actual callables which invoke the proper
+ # transport methods, wrapped with `wrap_method` to add retry,
+ # timeout, and the like.
+ self._inner_api_calls = {}
+
+ # Service calls
+ def get_keyword_view(self,
+ resource_name,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Returns the requested keyword view in full detail.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.KeywordViewServiceClient()
+ >>>
+ >>> resource_name = client.keyword_view_path('[CUSTOMER]', '[KEYWORD_VIEW]')
+ >>>
+ >>> response = client.get_keyword_view(resource_name)
+
+ Args:
+ resource_name (str): The resource name of the keyword view to fetch.
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.KeywordView` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'get_keyword_view' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'get_keyword_view'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.get_keyword_view,
+ default_retry=self._method_configs['GetKeywordView'].retry,
+ default_timeout=self._method_configs['GetKeywordView']
+ .timeout,
+ client_info=self._client_info,
+ )
+
+ request = keyword_view_service_pb2.GetKeywordViewRequest(
+ resource_name=resource_name, )
+ return self._inner_api_calls['get_keyword_view'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
diff --git a/google/ads/google_ads/v0/services/keyword_view_service_client_config.py b/google/ads/google_ads/v0/services/keyword_view_service_client_config.py
new file mode 100644
index 000000000..1cdd01a21
--- /dev/null
+++ b/google/ads/google_ads/v0/services/keyword_view_service_client_config.py
@@ -0,0 +1,28 @@
+config = {
+ "interfaces": {
+ "google.ads.googleads.v0.services.KeywordViewService": {
+ "retry_codes": {
+ "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetKeywordView": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/google/ads/google_ads/v0/services/recommendation_service_client.py b/google/ads/google_ads/v0/services/recommendation_service_client.py
new file mode 100644
index 000000000..be31d0c58
--- /dev/null
+++ b/google/ads/google_ads/v0/services/recommendation_service_client.py
@@ -0,0 +1,280 @@
+# Copyright 2018 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.
+"""Accesses the google.ads.googleads.v0.services RecommendationService API."""
+
+import pkg_resources
+import warnings
+
+from google.oauth2 import service_account
+import google.api_core.gapic_v1.client_info
+import google.api_core.gapic_v1.config
+import google.api_core.gapic_v1.method
+import google.api_core.grpc_helpers
+import google.api_core.path_template
+
+from google.ads.google_ads.v0.services import recommendation_service_client_config
+from google.ads.google_ads.v0.services.transports import recommendation_service_grpc_transport
+from google.ads.google_ads.v0.proto.services import recommendation_service_pb2
+
+_GAPIC_LIBRARY_VERSION = pkg_resources.get_distribution(
+ 'google-ads', ).version
+
+
+class RecommendationServiceClient(object):
+ """Service to manage recommendations."""
+
+ SERVICE_ADDRESS = 'googleads.googleapis.com:443'
+ """The default address of the service."""
+
+ # The name of the interface for this client. This is the key used to
+ # find the method configuration in the client_config dictionary.
+ _INTERFACE_NAME = 'google.ads.googleads.v0.services.RecommendationService'
+
+ @classmethod
+ def from_service_account_file(cls, filename, *args, **kwargs):
+ """Creates an instance of this client using the provided credentials
+ file.
+
+ Args:
+ filename (str): The path to the service account private key json
+ file.
+ args: Additional arguments to pass to the constructor.
+ kwargs: Additional arguments to pass to the constructor.
+
+ Returns:
+ RecommendationServiceClient: The constructed client.
+ """
+ credentials = service_account.Credentials.from_service_account_file(
+ filename)
+ kwargs['credentials'] = credentials
+ return cls(*args, **kwargs)
+
+ from_service_account_json = from_service_account_file
+
+ @classmethod
+ def recommendation_path(cls, customer, recommendation):
+ """Return a fully-qualified recommendation string."""
+ return google.api_core.path_template.expand(
+ 'customers/{customer}/recommendations/{recommendation}',
+ customer=customer,
+ recommendation=recommendation,
+ )
+
+ def __init__(self,
+ transport=None,
+ channel=None,
+ credentials=None,
+ client_config=recommendation_service_client_config.config,
+ client_info=None):
+ """Constructor.
+
+ Args:
+ transport (Union[~.RecommendationServiceGrpcTransport,
+ Callable[[~.Credentials, type], ~.RecommendationServiceGrpcTransport]): A transport
+ instance, responsible for actually making the API calls.
+ The default transport uses the gRPC protocol.
+ This argument may also be a callable which returns a
+ transport instance. Callables will be sent the credentials
+ as the first argument and the default transport class as
+ the second argument.
+ channel (grpc.Channel): DEPRECATED. A ``Channel`` instance
+ through which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ This argument is mutually exclusive with providing a
+ transport instance to ``transport``; doing so will raise
+ an exception.
+ client_config (dict): DEPRECATED. A dictionary of call options for
+ each method. If not specified, the default configuration is used.
+ client_info (google.api_core.gapic_v1.client_info.ClientInfo):
+ The client info used to send a user-agent string along with
+ API requests. If ``None``, then default info will be used.
+ Generally, you only need to set this if you're developing
+ your own client library.
+ """
+ # Raise deprecation warnings for things we want to go away.
+ if client_config:
+ warnings.warn('The `client_config` argument is deprecated.',
+ PendingDeprecationWarning)
+ if channel:
+ warnings.warn(
+ 'The `channel` argument is deprecated; use '
+ '`transport` instead.', PendingDeprecationWarning)
+
+ # Instantiate the transport.
+ # The transport is responsible for handling serialization and
+ # deserialization and actually sending data to the service.
+ if transport:
+ if callable(transport):
+ self.transport = transport(
+ credentials=credentials,
+ default_class=recommendation_service_grpc_transport.
+ RecommendationServiceGrpcTransport,
+ )
+ else:
+ if credentials:
+ raise ValueError(
+ 'Received both a transport instance and '
+ 'credentials; these are mutually exclusive.')
+ self.transport = transport
+ else:
+ self.transport = recommendation_service_grpc_transport.RecommendationServiceGrpcTransport(
+ address=self.SERVICE_ADDRESS,
+ channel=channel,
+ credentials=credentials,
+ )
+
+ if client_info is None:
+ client_info = (
+ google.api_core.gapic_v1.client_info.DEFAULT_CLIENT_INFO)
+ client_info.gapic_version = _GAPIC_LIBRARY_VERSION
+ self._client_info = client_info
+
+ # Parse out the default settings for retry and timeout for each RPC
+ # from the client configuration.
+ # (Ordinarily, these are the defaults specified in the `*_config.py`
+ # file next to this one.)
+ self._method_configs = google.api_core.gapic_v1.config.parse_method_configs(
+ client_config['interfaces'][self._INTERFACE_NAME], )
+
+ # Save a dictionary of cached API call functions.
+ # These are the actual callables which invoke the proper
+ # transport methods, wrapped with `wrap_method` to add retry,
+ # timeout, and the like.
+ self._inner_api_calls = {}
+
+ # Service calls
+ def get_recommendation(self,
+ resource_name,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Returns the requested recommendation in full detail.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.RecommendationServiceClient()
+ >>>
+ >>> resource_name = client.recommendation_path('[CUSTOMER]', '[RECOMMENDATION]')
+ >>>
+ >>> response = client.get_recommendation(resource_name)
+
+ Args:
+ resource_name (str): The resource name of the recommendation to fetch.
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.Recommendation` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'get_recommendation' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'get_recommendation'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.get_recommendation,
+ default_retry=self._method_configs[
+ 'GetRecommendation'].retry,
+ default_timeout=self._method_configs['GetRecommendation']
+ .timeout,
+ client_info=self._client_info,
+ )
+
+ request = recommendation_service_pb2.GetRecommendationRequest(
+ resource_name=resource_name, )
+ return self._inner_api_calls['get_recommendation'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
+
+ def apply_recommendation(self,
+ customer_id,
+ operations,
+ retry=google.api_core.gapic_v1.method.DEFAULT,
+ timeout=google.api_core.gapic_v1.method.DEFAULT,
+ metadata=None):
+ """
+ Applies given recommendations with corresponding apply parameters.
+
+ Example:
+ >>> from google.cloud.ads import googleads_v0
+ >>>
+ >>> client = googleads_v0.RecommendationServiceClient()
+ >>>
+ >>> # TODO: Initialize ``customer_id``:
+ >>> customer_id = ''
+ >>>
+ >>> # TODO: Initialize ``operations``:
+ >>> operations = []
+ >>>
+ >>> response = client.apply_recommendation(customer_id, operations)
+
+ Args:
+ customer_id (str): The ID of the customer with the recommendation.
+ operations (list[Union[dict, ~google.cloud.ads.googleads_v0.types.ApplyRecommendationOperation]]): The list of operations to apply recommendations.
+ If a dict is provided, it must be of the same form as the protobuf
+ message :class:`~google.cloud.ads.googleads_v0.types.ApplyRecommendationOperation`
+ retry (Optional[google.api_core.retry.Retry]): A retry object used
+ to retry requests. If ``None`` is specified, requests will not
+ be retried.
+ timeout (Optional[float]): The amount of time, in seconds, to wait
+ for the request to complete. Note that if ``retry`` is
+ specified, the timeout applies to each individual attempt.
+ metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata
+ that is provided to the method.
+
+ Returns:
+ A :class:`~google.cloud.ads.googleads_v0.types.ApplyRecommendationResponse` instance.
+
+ Raises:
+ google.api_core.exceptions.GoogleAPICallError: If the request
+ failed for any reason.
+ google.api_core.exceptions.RetryError: If the request failed due
+ to a retryable error and retry attempts failed.
+ ValueError: If the parameters are invalid.
+ """
+ # Wrap the transport method to add retry and timeout logic.
+ if 'apply_recommendation' not in self._inner_api_calls:
+ self._inner_api_calls[
+ 'apply_recommendation'] = google.api_core.gapic_v1.method.wrap_method(
+ self.transport.apply_recommendation,
+ default_retry=self._method_configs[
+ 'ApplyRecommendation'].retry,
+ default_timeout=self._method_configs['ApplyRecommendation']
+ .timeout,
+ client_info=self._client_info,
+ )
+
+ request = recommendation_service_pb2.ApplyRecommendationRequest(
+ customer_id=customer_id,
+ operations=operations,
+ )
+ return self._inner_api_calls['apply_recommendation'](
+ request, retry=retry, timeout=timeout, metadata=metadata)
diff --git a/google/ads/google_ads/v0/services/recommendation_service_client_config.py b/google/ads/google_ads/v0/services/recommendation_service_client_config.py
new file mode 100644
index 000000000..943fced1c
--- /dev/null
+++ b/google/ads/google_ads/v0/services/recommendation_service_client_config.py
@@ -0,0 +1,33 @@
+config = {
+ "interfaces": {
+ "google.ads.googleads.v0.services.RecommendationService": {
+ "retry_codes": {
+ "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetRecommendation": {
+ "timeout_millis": 600000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "ApplyRecommendation": {
+ "timeout_millis": 600000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/google/ads/google_ads/v0/services/transports/__init__.py b/google/ads/google_ads/v0/services/transports/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/google/ads/google_ads/v0/services/transports/ad_group_ad_service_grpc_transport.py b/google/ads/google_ads/v0/services/transports/ad_group_ad_service_grpc_transport.py
new file mode 100644
index 000000000..f4aba982b
--- /dev/null
+++ b/google/ads/google_ads/v0/services/transports/ad_group_ad_service_grpc_transport.py
@@ -0,0 +1,117 @@
+# Copyright 2018 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.
+
+import google.api_core.grpc_helpers
+
+from google.ads.google_ads.v0.proto.services import ad_group_ad_service_pb2_grpc
+
+
+class AdGroupAdServiceGrpcTransport(object):
+ """gRPC transport class providing stubs for
+ google.ads.googleads.v0.services AdGroupAdService API.
+
+ The transport provides access to the raw gRPC stubs,
+ which can be used to take advantage of advanced
+ features of gRPC.
+ """
+ # The scopes needed to make gRPC calls to all of the methods defined
+ # in this service.
+ _OAUTH_SCOPES = ()
+
+ def __init__(self,
+ channel=None,
+ credentials=None,
+ address='googleads.googleapis.com:443'):
+ """Instantiate the transport class.
+
+ Args:
+ channel (grpc.Channel): A ``Channel`` instance through
+ which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ address (str): The address where the service is hosted.
+ """
+ # If both `channel` and `credentials` are specified, raise an
+ # exception (channels come with credentials baked in already).
+ if channel is not None and credentials is not None:
+ raise ValueError(
+ 'The `channel` and `credentials` arguments are mutually '
+ 'exclusive.', )
+
+ # Create the channel.
+ if channel is None:
+ channel = self.create_channel(
+ address=address,
+ credentials=credentials,
+ )
+
+ # gRPC uses objects called "stubs" that are bound to the
+ # channel and provide a basic method for each RPC.
+ self._stubs = {
+ 'ad_group_ad_service_stub':
+ ad_group_ad_service_pb2_grpc.AdGroupAdServiceStub(channel),
+ }
+
+ @classmethod
+ def create_channel(cls,
+ address='googleads.googleapis.com:443',
+ credentials=None):
+ """Create and return a gRPC channel object.
+
+ Args:
+ address (str): The host for the channel to use.
+ credentials (~.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+
+ Returns:
+ grpc.Channel: A gRPC channel object.
+ """
+ return google.api_core.grpc_helpers.create_channel(
+ address,
+ credentials=credentials,
+ scopes=cls._OAUTH_SCOPES,
+ )
+
+ @property
+ def get_ad_group_ad(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Returns the requested ad in full detail.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs['ad_group_ad_service_stub'].GetAdGroupAd
+
+ @property
+ def mutate_ad_group_ads(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Creates, updates, or removes ads. Operation statuses are returned.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs['ad_group_ad_service_stub'].MutateAdGroupAds
diff --git a/google/ads/google_ads/v0/services/transports/ad_group_bid_modifier_service_grpc_transport.py b/google/ads/google_ads/v0/services/transports/ad_group_bid_modifier_service_grpc_transport.py
new file mode 100644
index 000000000..db78854fb
--- /dev/null
+++ b/google/ads/google_ads/v0/services/transports/ad_group_bid_modifier_service_grpc_transport.py
@@ -0,0 +1,121 @@
+# Copyright 2018 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.
+
+import google.api_core.grpc_helpers
+
+from google.ads.google_ads.v0.proto.services import ad_group_bid_modifier_service_pb2_grpc
+
+
+class AdGroupBidModifierServiceGrpcTransport(object):
+ """gRPC transport class providing stubs for
+ google.ads.googleads.v0.services AdGroupBidModifierService API.
+
+ The transport provides access to the raw gRPC stubs,
+ which can be used to take advantage of advanced
+ features of gRPC.
+ """
+ # The scopes needed to make gRPC calls to all of the methods defined
+ # in this service.
+ _OAUTH_SCOPES = ()
+
+ def __init__(self,
+ channel=None,
+ credentials=None,
+ address='googleads.googleapis.com:443'):
+ """Instantiate the transport class.
+
+ Args:
+ channel (grpc.Channel): A ``Channel`` instance through
+ which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ address (str): The address where the service is hosted.
+ """
+ # If both `channel` and `credentials` are specified, raise an
+ # exception (channels come with credentials baked in already).
+ if channel is not None and credentials is not None:
+ raise ValueError(
+ 'The `channel` and `credentials` arguments are mutually '
+ 'exclusive.', )
+
+ # Create the channel.
+ if channel is None:
+ channel = self.create_channel(
+ address=address,
+ credentials=credentials,
+ )
+
+ # gRPC uses objects called "stubs" that are bound to the
+ # channel and provide a basic method for each RPC.
+ self._stubs = {
+ 'ad_group_bid_modifier_service_stub':
+ ad_group_bid_modifier_service_pb2_grpc.
+ AdGroupBidModifierServiceStub(channel),
+ }
+
+ @classmethod
+ def create_channel(cls,
+ address='googleads.googleapis.com:443',
+ credentials=None):
+ """Create and return a gRPC channel object.
+
+ Args:
+ address (str): The host for the channel to use.
+ credentials (~.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+
+ Returns:
+ grpc.Channel: A gRPC channel object.
+ """
+ return google.api_core.grpc_helpers.create_channel(
+ address,
+ credentials=credentials,
+ scopes=cls._OAUTH_SCOPES,
+ )
+
+ @property
+ def get_ad_group_bid_modifier(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Returns the requested ad group bid modifier in full detail.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs[
+ 'ad_group_bid_modifier_service_stub'].GetAdGroupBidModifier
+
+ @property
+ def mutate_ad_group_bid_modifiers(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Creates, updates, or removes ad group bid modifiers.
+ Operation statuses are returned.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs[
+ 'ad_group_bid_modifier_service_stub'].MutateAdGroupBidModifiers
diff --git a/google/ads/google_ads/v0/services/transports/ad_group_criterion_service_grpc_transport.py b/google/ads/google_ads/v0/services/transports/ad_group_criterion_service_grpc_transport.py
new file mode 100644
index 000000000..c45300db3
--- /dev/null
+++ b/google/ads/google_ads/v0/services/transports/ad_group_criterion_service_grpc_transport.py
@@ -0,0 +1,120 @@
+# Copyright 2018 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.
+
+import google.api_core.grpc_helpers
+
+from google.ads.google_ads.v0.proto.services import ad_group_criterion_service_pb2_grpc
+
+
+class AdGroupCriterionServiceGrpcTransport(object):
+ """gRPC transport class providing stubs for
+ google.ads.googleads.v0.services AdGroupCriterionService API.
+
+ The transport provides access to the raw gRPC stubs,
+ which can be used to take advantage of advanced
+ features of gRPC.
+ """
+ # The scopes needed to make gRPC calls to all of the methods defined
+ # in this service.
+ _OAUTH_SCOPES = ()
+
+ def __init__(self,
+ channel=None,
+ credentials=None,
+ address='googleads.googleapis.com:443'):
+ """Instantiate the transport class.
+
+ Args:
+ channel (grpc.Channel): A ``Channel`` instance through
+ which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ address (str): The address where the service is hosted.
+ """
+ # If both `channel` and `credentials` are specified, raise an
+ # exception (channels come with credentials baked in already).
+ if channel is not None and credentials is not None:
+ raise ValueError(
+ 'The `channel` and `credentials` arguments are mutually '
+ 'exclusive.', )
+
+ # Create the channel.
+ if channel is None:
+ channel = self.create_channel(
+ address=address,
+ credentials=credentials,
+ )
+
+ # gRPC uses objects called "stubs" that are bound to the
+ # channel and provide a basic method for each RPC.
+ self._stubs = {
+ 'ad_group_criterion_service_stub':
+ ad_group_criterion_service_pb2_grpc.AdGroupCriterionServiceStub(
+ channel),
+ }
+
+ @classmethod
+ def create_channel(cls,
+ address='googleads.googleapis.com:443',
+ credentials=None):
+ """Create and return a gRPC channel object.
+
+ Args:
+ address (str): The host for the channel to use.
+ credentials (~.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+
+ Returns:
+ grpc.Channel: A gRPC channel object.
+ """
+ return google.api_core.grpc_helpers.create_channel(
+ address,
+ credentials=credentials,
+ scopes=cls._OAUTH_SCOPES,
+ )
+
+ @property
+ def get_ad_group_criterion(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Returns the requested criterion in full detail.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs[
+ 'ad_group_criterion_service_stub'].GetAdGroupCriterion
+
+ @property
+ def mutate_ad_group_criteria(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Creates, updates, or removes criteria. Operation statuses are returned.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs[
+ 'ad_group_criterion_service_stub'].MutateAdGroupCriteria
diff --git a/google/ads/google_ads/v0/services/transports/ad_group_service_grpc_transport.py b/google/ads/google_ads/v0/services/transports/ad_group_service_grpc_transport.py
new file mode 100644
index 000000000..0ad7ec6dd
--- /dev/null
+++ b/google/ads/google_ads/v0/services/transports/ad_group_service_grpc_transport.py
@@ -0,0 +1,117 @@
+# Copyright 2018 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.
+
+import google.api_core.grpc_helpers
+
+from google.ads.google_ads.v0.proto.services import ad_group_service_pb2_grpc
+
+
+class AdGroupServiceGrpcTransport(object):
+ """gRPC transport class providing stubs for
+ google.ads.googleads.v0.services AdGroupService API.
+
+ The transport provides access to the raw gRPC stubs,
+ which can be used to take advantage of advanced
+ features of gRPC.
+ """
+ # The scopes needed to make gRPC calls to all of the methods defined
+ # in this service.
+ _OAUTH_SCOPES = ()
+
+ def __init__(self,
+ channel=None,
+ credentials=None,
+ address='googleads.googleapis.com:443'):
+ """Instantiate the transport class.
+
+ Args:
+ channel (grpc.Channel): A ``Channel`` instance through
+ which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ address (str): The address where the service is hosted.
+ """
+ # If both `channel` and `credentials` are specified, raise an
+ # exception (channels come with credentials baked in already).
+ if channel is not None and credentials is not None:
+ raise ValueError(
+ 'The `channel` and `credentials` arguments are mutually '
+ 'exclusive.', )
+
+ # Create the channel.
+ if channel is None:
+ channel = self.create_channel(
+ address=address,
+ credentials=credentials,
+ )
+
+ # gRPC uses objects called "stubs" that are bound to the
+ # channel and provide a basic method for each RPC.
+ self._stubs = {
+ 'ad_group_service_stub':
+ ad_group_service_pb2_grpc.AdGroupServiceStub(channel),
+ }
+
+ @classmethod
+ def create_channel(cls,
+ address='googleads.googleapis.com:443',
+ credentials=None):
+ """Create and return a gRPC channel object.
+
+ Args:
+ address (str): The host for the channel to use.
+ credentials (~.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+
+ Returns:
+ grpc.Channel: A gRPC channel object.
+ """
+ return google.api_core.grpc_helpers.create_channel(
+ address,
+ credentials=credentials,
+ scopes=cls._OAUTH_SCOPES,
+ )
+
+ @property
+ def get_ad_group(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Returns the requested ad group in full detail.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs['ad_group_service_stub'].GetAdGroup
+
+ @property
+ def mutate_ad_groups(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Creates, updates, or removes ad groups. Operation statuses are returned.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs['ad_group_service_stub'].MutateAdGroups
diff --git a/google/ads/google_ads/v0/services/transports/bidding_strategy_service_grpc_transport.py b/google/ads/google_ads/v0/services/transports/bidding_strategy_service_grpc_transport.py
new file mode 100644
index 000000000..834353548
--- /dev/null
+++ b/google/ads/google_ads/v0/services/transports/bidding_strategy_service_grpc_transport.py
@@ -0,0 +1,120 @@
+# Copyright 2018 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.
+
+import google.api_core.grpc_helpers
+
+from google.ads.google_ads.v0.proto.services import bidding_strategy_service_pb2_grpc
+
+
+class BiddingStrategyServiceGrpcTransport(object):
+ """gRPC transport class providing stubs for
+ google.ads.googleads.v0.services BiddingStrategyService API.
+
+ The transport provides access to the raw gRPC stubs,
+ which can be used to take advantage of advanced
+ features of gRPC.
+ """
+ # The scopes needed to make gRPC calls to all of the methods defined
+ # in this service.
+ _OAUTH_SCOPES = ()
+
+ def __init__(self,
+ channel=None,
+ credentials=None,
+ address='googleads.googleapis.com:443'):
+ """Instantiate the transport class.
+
+ Args:
+ channel (grpc.Channel): A ``Channel`` instance through
+ which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ address (str): The address where the service is hosted.
+ """
+ # If both `channel` and `credentials` are specified, raise an
+ # exception (channels come with credentials baked in already).
+ if channel is not None and credentials is not None:
+ raise ValueError(
+ 'The `channel` and `credentials` arguments are mutually '
+ 'exclusive.', )
+
+ # Create the channel.
+ if channel is None:
+ channel = self.create_channel(
+ address=address,
+ credentials=credentials,
+ )
+
+ # gRPC uses objects called "stubs" that are bound to the
+ # channel and provide a basic method for each RPC.
+ self._stubs = {
+ 'bidding_strategy_service_stub':
+ bidding_strategy_service_pb2_grpc.BiddingStrategyServiceStub(
+ channel),
+ }
+
+ @classmethod
+ def create_channel(cls,
+ address='googleads.googleapis.com:443',
+ credentials=None):
+ """Create and return a gRPC channel object.
+
+ Args:
+ address (str): The host for the channel to use.
+ credentials (~.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+
+ Returns:
+ grpc.Channel: A gRPC channel object.
+ """
+ return google.api_core.grpc_helpers.create_channel(
+ address,
+ credentials=credentials,
+ scopes=cls._OAUTH_SCOPES,
+ )
+
+ @property
+ def get_bidding_strategy(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Returns the requested bidding strategy in full detail.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs['bidding_strategy_service_stub'].GetBiddingStrategy
+
+ @property
+ def mutate_bidding_strategies(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Creates, updates, or removes bidding strategies. Operation statuses are
+ returned.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs[
+ 'bidding_strategy_service_stub'].MutateBiddingStrategies
diff --git a/google/ads/google_ads/v0/services/transports/campaign_budget_service_grpc_transport.py b/google/ads/google_ads/v0/services/transports/campaign_budget_service_grpc_transport.py
new file mode 100644
index 000000000..cc6f39321
--- /dev/null
+++ b/google/ads/google_ads/v0/services/transports/campaign_budget_service_grpc_transport.py
@@ -0,0 +1,120 @@
+# Copyright 2018 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.
+
+import google.api_core.grpc_helpers
+
+from google.ads.google_ads.v0.proto.services import campaign_budget_service_pb2_grpc
+
+
+class CampaignBudgetServiceGrpcTransport(object):
+ """gRPC transport class providing stubs for
+ google.ads.googleads.v0.services CampaignBudgetService API.
+
+ The transport provides access to the raw gRPC stubs,
+ which can be used to take advantage of advanced
+ features of gRPC.
+ """
+ # The scopes needed to make gRPC calls to all of the methods defined
+ # in this service.
+ _OAUTH_SCOPES = ()
+
+ def __init__(self,
+ channel=None,
+ credentials=None,
+ address='googleads.googleapis.com:443'):
+ """Instantiate the transport class.
+
+ Args:
+ channel (grpc.Channel): A ``Channel`` instance through
+ which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ address (str): The address where the service is hosted.
+ """
+ # If both `channel` and `credentials` are specified, raise an
+ # exception (channels come with credentials baked in already).
+ if channel is not None and credentials is not None:
+ raise ValueError(
+ 'The `channel` and `credentials` arguments are mutually '
+ 'exclusive.', )
+
+ # Create the channel.
+ if channel is None:
+ channel = self.create_channel(
+ address=address,
+ credentials=credentials,
+ )
+
+ # gRPC uses objects called "stubs" that are bound to the
+ # channel and provide a basic method for each RPC.
+ self._stubs = {
+ 'campaign_budget_service_stub':
+ campaign_budget_service_pb2_grpc.CampaignBudgetServiceStub(
+ channel),
+ }
+
+ @classmethod
+ def create_channel(cls,
+ address='googleads.googleapis.com:443',
+ credentials=None):
+ """Create and return a gRPC channel object.
+
+ Args:
+ address (str): The host for the channel to use.
+ credentials (~.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+
+ Returns:
+ grpc.Channel: A gRPC channel object.
+ """
+ return google.api_core.grpc_helpers.create_channel(
+ address,
+ credentials=credentials,
+ scopes=cls._OAUTH_SCOPES,
+ )
+
+ @property
+ def get_campaign_budget(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Returns the requested Campaign Budget in full detail.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs['campaign_budget_service_stub'].GetCampaignBudget
+
+ @property
+ def mutate_campaign_budgets(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Creates, updates, or removes campaign budgets. Operation statuses are
+ returned.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs[
+ 'campaign_budget_service_stub'].MutateCampaignBudgets
diff --git a/google/ads/google_ads/v0/services/transports/campaign_criterion_service_grpc_transport.py b/google/ads/google_ads/v0/services/transports/campaign_criterion_service_grpc_transport.py
new file mode 100644
index 000000000..ae0f52f88
--- /dev/null
+++ b/google/ads/google_ads/v0/services/transports/campaign_criterion_service_grpc_transport.py
@@ -0,0 +1,120 @@
+# Copyright 2018 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.
+
+import google.api_core.grpc_helpers
+
+from google.ads.google_ads.v0.proto.services import campaign_criterion_service_pb2_grpc
+
+
+class CampaignCriterionServiceGrpcTransport(object):
+ """gRPC transport class providing stubs for
+ google.ads.googleads.v0.services CampaignCriterionService API.
+
+ The transport provides access to the raw gRPC stubs,
+ which can be used to take advantage of advanced
+ features of gRPC.
+ """
+ # The scopes needed to make gRPC calls to all of the methods defined
+ # in this service.
+ _OAUTH_SCOPES = ()
+
+ def __init__(self,
+ channel=None,
+ credentials=None,
+ address='googleads.googleapis.com:443'):
+ """Instantiate the transport class.
+
+ Args:
+ channel (grpc.Channel): A ``Channel`` instance through
+ which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ address (str): The address where the service is hosted.
+ """
+ # If both `channel` and `credentials` are specified, raise an
+ # exception (channels come with credentials baked in already).
+ if channel is not None and credentials is not None:
+ raise ValueError(
+ 'The `channel` and `credentials` arguments are mutually '
+ 'exclusive.', )
+
+ # Create the channel.
+ if channel is None:
+ channel = self.create_channel(
+ address=address,
+ credentials=credentials,
+ )
+
+ # gRPC uses objects called "stubs" that are bound to the
+ # channel and provide a basic method for each RPC.
+ self._stubs = {
+ 'campaign_criterion_service_stub':
+ campaign_criterion_service_pb2_grpc.CampaignCriterionServiceStub(
+ channel),
+ }
+
+ @classmethod
+ def create_channel(cls,
+ address='googleads.googleapis.com:443',
+ credentials=None):
+ """Create and return a gRPC channel object.
+
+ Args:
+ address (str): The host for the channel to use.
+ credentials (~.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+
+ Returns:
+ grpc.Channel: A gRPC channel object.
+ """
+ return google.api_core.grpc_helpers.create_channel(
+ address,
+ credentials=credentials,
+ scopes=cls._OAUTH_SCOPES,
+ )
+
+ @property
+ def get_campaign_criterion(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Returns the requested criterion in full detail.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs[
+ 'campaign_criterion_service_stub'].GetCampaignCriterion
+
+ @property
+ def mutate_campaign_criteria(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Creates, updates, or removes criteria. Operation statuses are returned.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs[
+ 'campaign_criterion_service_stub'].MutateCampaignCriteria
diff --git a/google/ads/google_ads/v0/services/transports/campaign_service_grpc_transport.py b/google/ads/google_ads/v0/services/transports/campaign_service_grpc_transport.py
new file mode 100644
index 000000000..45d8fdbcd
--- /dev/null
+++ b/google/ads/google_ads/v0/services/transports/campaign_service_grpc_transport.py
@@ -0,0 +1,117 @@
+# Copyright 2018 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.
+
+import google.api_core.grpc_helpers
+
+from google.ads.google_ads.v0.proto.services import campaign_service_pb2_grpc
+
+
+class CampaignServiceGrpcTransport(object):
+ """gRPC transport class providing stubs for
+ google.ads.googleads.v0.services CampaignService API.
+
+ The transport provides access to the raw gRPC stubs,
+ which can be used to take advantage of advanced
+ features of gRPC.
+ """
+ # The scopes needed to make gRPC calls to all of the methods defined
+ # in this service.
+ _OAUTH_SCOPES = ()
+
+ def __init__(self,
+ channel=None,
+ credentials=None,
+ address='googleads.googleapis.com:443'):
+ """Instantiate the transport class.
+
+ Args:
+ channel (grpc.Channel): A ``Channel`` instance through
+ which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ address (str): The address where the service is hosted.
+ """
+ # If both `channel` and `credentials` are specified, raise an
+ # exception (channels come with credentials baked in already).
+ if channel is not None and credentials is not None:
+ raise ValueError(
+ 'The `channel` and `credentials` arguments are mutually '
+ 'exclusive.', )
+
+ # Create the channel.
+ if channel is None:
+ channel = self.create_channel(
+ address=address,
+ credentials=credentials,
+ )
+
+ # gRPC uses objects called "stubs" that are bound to the
+ # channel and provide a basic method for each RPC.
+ self._stubs = {
+ 'campaign_service_stub':
+ campaign_service_pb2_grpc.CampaignServiceStub(channel),
+ }
+
+ @classmethod
+ def create_channel(cls,
+ address='googleads.googleapis.com:443',
+ credentials=None):
+ """Create and return a gRPC channel object.
+
+ Args:
+ address (str): The host for the channel to use.
+ credentials (~.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+
+ Returns:
+ grpc.Channel: A gRPC channel object.
+ """
+ return google.api_core.grpc_helpers.create_channel(
+ address,
+ credentials=credentials,
+ scopes=cls._OAUTH_SCOPES,
+ )
+
+ @property
+ def get_campaign(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Returns the requested campaign in full detail.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs['campaign_service_stub'].GetCampaign
+
+ @property
+ def mutate_campaigns(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Creates, updates, or removes campaigns. Operation statuses are returned.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs['campaign_service_stub'].MutateCampaigns
diff --git a/google/ads/google_ads/v0/services/transports/customer_service_grpc_transport.py b/google/ads/google_ads/v0/services/transports/customer_service_grpc_transport.py
new file mode 100644
index 000000000..498ecadfb
--- /dev/null
+++ b/google/ads/google_ads/v0/services/transports/customer_service_grpc_transport.py
@@ -0,0 +1,104 @@
+# Copyright 2018 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.
+
+import google.api_core.grpc_helpers
+
+from google.ads.google_ads.v0.proto.services import customer_service_pb2_grpc
+
+
+class CustomerServiceGrpcTransport(object):
+ """gRPC transport class providing stubs for
+ google.ads.googleads.v0.services CustomerService API.
+
+ The transport provides access to the raw gRPC stubs,
+ which can be used to take advantage of advanced
+ features of gRPC.
+ """
+ # The scopes needed to make gRPC calls to all of the methods defined
+ # in this service.
+ _OAUTH_SCOPES = ()
+
+ def __init__(self,
+ channel=None,
+ credentials=None,
+ address='googleads.googleapis.com:443'):
+ """Instantiate the transport class.
+
+ Args:
+ channel (grpc.Channel): A ``Channel`` instance through
+ which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ address (str): The address where the service is hosted.
+ """
+ # If both `channel` and `credentials` are specified, raise an
+ # exception (channels come with credentials baked in already).
+ if channel is not None and credentials is not None:
+ raise ValueError(
+ 'The `channel` and `credentials` arguments are mutually '
+ 'exclusive.', )
+
+ # Create the channel.
+ if channel is None:
+ channel = self.create_channel(
+ address=address,
+ credentials=credentials,
+ )
+
+ # gRPC uses objects called "stubs" that are bound to the
+ # channel and provide a basic method for each RPC.
+ self._stubs = {
+ 'customer_service_stub':
+ customer_service_pb2_grpc.CustomerServiceStub(channel),
+ }
+
+ @classmethod
+ def create_channel(cls,
+ address='googleads.googleapis.com:443',
+ credentials=None):
+ """Create and return a gRPC channel object.
+
+ Args:
+ address (str): The host for the channel to use.
+ credentials (~.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+
+ Returns:
+ grpc.Channel: A gRPC channel object.
+ """
+ return google.api_core.grpc_helpers.create_channel(
+ address,
+ credentials=credentials,
+ scopes=cls._OAUTH_SCOPES,
+ )
+
+ @property
+ def get_customer(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Returns the requested customer in full detail.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs['customer_service_stub'].GetCustomer
diff --git a/google/ads/google_ads/v0/services/transports/geo_target_constant_service_grpc_transport.py b/google/ads/google_ads/v0/services/transports/geo_target_constant_service_grpc_transport.py
new file mode 100644
index 000000000..44591af44
--- /dev/null
+++ b/google/ads/google_ads/v0/services/transports/geo_target_constant_service_grpc_transport.py
@@ -0,0 +1,106 @@
+# Copyright 2018 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.
+
+import google.api_core.grpc_helpers
+
+from google.ads.google_ads.v0.proto.services import geo_target_constant_service_pb2_grpc
+
+
+class GeoTargetConstantServiceGrpcTransport(object):
+ """gRPC transport class providing stubs for
+ google.ads.googleads.v0.services GeoTargetConstantService API.
+
+ The transport provides access to the raw gRPC stubs,
+ which can be used to take advantage of advanced
+ features of gRPC.
+ """
+ # The scopes needed to make gRPC calls to all of the methods defined
+ # in this service.
+ _OAUTH_SCOPES = ()
+
+ def __init__(self,
+ channel=None,
+ credentials=None,
+ address='googleads.googleapis.com:443'):
+ """Instantiate the transport class.
+
+ Args:
+ channel (grpc.Channel): A ``Channel`` instance through
+ which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ address (str): The address where the service is hosted.
+ """
+ # If both `channel` and `credentials` are specified, raise an
+ # exception (channels come with credentials baked in already).
+ if channel is not None and credentials is not None:
+ raise ValueError(
+ 'The `channel` and `credentials` arguments are mutually '
+ 'exclusive.', )
+
+ # Create the channel.
+ if channel is None:
+ channel = self.create_channel(
+ address=address,
+ credentials=credentials,
+ )
+
+ # gRPC uses objects called "stubs" that are bound to the
+ # channel and provide a basic method for each RPC.
+ self._stubs = {
+ 'geo_target_constant_service_stub':
+ geo_target_constant_service_pb2_grpc.GeoTargetConstantServiceStub(
+ channel),
+ }
+
+ @classmethod
+ def create_channel(cls,
+ address='googleads.googleapis.com:443',
+ credentials=None):
+ """Create and return a gRPC channel object.
+
+ Args:
+ address (str): The host for the channel to use.
+ credentials (~.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+
+ Returns:
+ grpc.Channel: A gRPC channel object.
+ """
+ return google.api_core.grpc_helpers.create_channel(
+ address,
+ credentials=credentials,
+ scopes=cls._OAUTH_SCOPES,
+ )
+
+ @property
+ def get_geo_target_constant(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Returns the requested geo target constant in full detail.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs[
+ 'geo_target_constant_service_stub'].GetGeoTargetConstant
diff --git a/google/ads/google_ads/v0/services/transports/google_ads_field_service_grpc_transport.py b/google/ads/google_ads/v0/services/transports/google_ads_field_service_grpc_transport.py
new file mode 100644
index 000000000..3a383bedb
--- /dev/null
+++ b/google/ads/google_ads/v0/services/transports/google_ads_field_service_grpc_transport.py
@@ -0,0 +1,119 @@
+# Copyright 2018 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.
+
+import google.api_core.grpc_helpers
+
+from google.ads.google_ads.v0.proto.services import google_ads_field_service_pb2_grpc
+
+
+class GoogleAdsFieldServiceGrpcTransport(object):
+ """gRPC transport class providing stubs for
+ google.ads.googleads.v0.services GoogleAdsFieldService API.
+
+ The transport provides access to the raw gRPC stubs,
+ which can be used to take advantage of advanced
+ features of gRPC.
+ """
+ # The scopes needed to make gRPC calls to all of the methods defined
+ # in this service.
+ _OAUTH_SCOPES = ()
+
+ def __init__(self,
+ channel=None,
+ credentials=None,
+ address='googleads.googleapis.com:443'):
+ """Instantiate the transport class.
+
+ Args:
+ channel (grpc.Channel): A ``Channel`` instance through
+ which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ address (str): The address where the service is hosted.
+ """
+ # If both `channel` and `credentials` are specified, raise an
+ # exception (channels come with credentials baked in already).
+ if channel is not None and credentials is not None:
+ raise ValueError(
+ 'The `channel` and `credentials` arguments are mutually '
+ 'exclusive.', )
+
+ # Create the channel.
+ if channel is None:
+ channel = self.create_channel(
+ address=address,
+ credentials=credentials,
+ )
+
+ # gRPC uses objects called "stubs" that are bound to the
+ # channel and provide a basic method for each RPC.
+ self._stubs = {
+ 'google_ads_field_service_stub':
+ google_ads_field_service_pb2_grpc.GoogleAdsFieldServiceStub(
+ channel),
+ }
+
+ @classmethod
+ def create_channel(cls,
+ address='googleads.googleapis.com:443',
+ credentials=None):
+ """Create and return a gRPC channel object.
+
+ Args:
+ address (str): The host for the channel to use.
+ credentials (~.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+
+ Returns:
+ grpc.Channel: A gRPC channel object.
+ """
+ return google.api_core.grpc_helpers.create_channel(
+ address,
+ credentials=credentials,
+ scopes=cls._OAUTH_SCOPES,
+ )
+
+ @property
+ def get_google_ads_field(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Returns just the requested field.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs['google_ads_field_service_stub'].GetGoogleAdsField
+
+ @property
+ def search_google_ads_fields(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Returns all fields that match the search query.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs[
+ 'google_ads_field_service_stub'].SearchGoogleAdsFields
diff --git a/google/ads/google_ads/v0/services/transports/google_ads_service_grpc_transport.py b/google/ads/google_ads/v0/services/transports/google_ads_service_grpc_transport.py
new file mode 100644
index 000000000..fc71fe6af
--- /dev/null
+++ b/google/ads/google_ads/v0/services/transports/google_ads_service_grpc_transport.py
@@ -0,0 +1,104 @@
+# Copyright 2018 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.
+
+import google.api_core.grpc_helpers
+
+from google.ads.google_ads.v0.proto.services import google_ads_service_pb2_grpc
+
+
+class GoogleAdsServiceGrpcTransport(object):
+ """gRPC transport class providing stubs for
+ google.ads.googleads.v0.services GoogleAdsService API.
+
+ The transport provides access to the raw gRPC stubs,
+ which can be used to take advantage of advanced
+ features of gRPC.
+ """
+ # The scopes needed to make gRPC calls to all of the methods defined
+ # in this service.
+ _OAUTH_SCOPES = ()
+
+ def __init__(self,
+ channel=None,
+ credentials=None,
+ address='googleads.googleapis.com:443'):
+ """Instantiate the transport class.
+
+ Args:
+ channel (grpc.Channel): A ``Channel`` instance through
+ which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ address (str): The address where the service is hosted.
+ """
+ # If both `channel` and `credentials` are specified, raise an
+ # exception (channels come with credentials baked in already).
+ if channel is not None and credentials is not None:
+ raise ValueError(
+ 'The `channel` and `credentials` arguments are mutually '
+ 'exclusive.', )
+
+ # Create the channel.
+ if channel is None:
+ channel = self.create_channel(
+ address=address,
+ credentials=credentials,
+ )
+
+ # gRPC uses objects called "stubs" that are bound to the
+ # channel and provide a basic method for each RPC.
+ self._stubs = {
+ 'google_ads_service_stub':
+ google_ads_service_pb2_grpc.GoogleAdsServiceStub(channel),
+ }
+
+ @classmethod
+ def create_channel(cls,
+ address='googleads.googleapis.com:443',
+ credentials=None):
+ """Create and return a gRPC channel object.
+
+ Args:
+ address (str): The host for the channel to use.
+ credentials (~.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+
+ Returns:
+ grpc.Channel: A gRPC channel object.
+ """
+ return google.api_core.grpc_helpers.create_channel(
+ address,
+ credentials=credentials,
+ scopes=cls._OAUTH_SCOPES,
+ )
+
+ @property
+ def search(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Returns all rows that match the search query.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs['google_ads_service_stub'].Search
diff --git a/google/ads/google_ads/v0/services/transports/keyword_view_service_grpc_transport.py b/google/ads/google_ads/v0/services/transports/keyword_view_service_grpc_transport.py
new file mode 100644
index 000000000..fcbbee845
--- /dev/null
+++ b/google/ads/google_ads/v0/services/transports/keyword_view_service_grpc_transport.py
@@ -0,0 +1,104 @@
+# Copyright 2018 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.
+
+import google.api_core.grpc_helpers
+
+from google.ads.google_ads.v0.proto.services import keyword_view_service_pb2_grpc
+
+
+class KeywordViewServiceGrpcTransport(object):
+ """gRPC transport class providing stubs for
+ google.ads.googleads.v0.services KeywordViewService API.
+
+ The transport provides access to the raw gRPC stubs,
+ which can be used to take advantage of advanced
+ features of gRPC.
+ """
+ # The scopes needed to make gRPC calls to all of the methods defined
+ # in this service.
+ _OAUTH_SCOPES = ()
+
+ def __init__(self,
+ channel=None,
+ credentials=None,
+ address='googleads.googleapis.com:443'):
+ """Instantiate the transport class.
+
+ Args:
+ channel (grpc.Channel): A ``Channel`` instance through
+ which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ address (str): The address where the service is hosted.
+ """
+ # If both `channel` and `credentials` are specified, raise an
+ # exception (channels come with credentials baked in already).
+ if channel is not None and credentials is not None:
+ raise ValueError(
+ 'The `channel` and `credentials` arguments are mutually '
+ 'exclusive.', )
+
+ # Create the channel.
+ if channel is None:
+ channel = self.create_channel(
+ address=address,
+ credentials=credentials,
+ )
+
+ # gRPC uses objects called "stubs" that are bound to the
+ # channel and provide a basic method for each RPC.
+ self._stubs = {
+ 'keyword_view_service_stub':
+ keyword_view_service_pb2_grpc.KeywordViewServiceStub(channel),
+ }
+
+ @classmethod
+ def create_channel(cls,
+ address='googleads.googleapis.com:443',
+ credentials=None):
+ """Create and return a gRPC channel object.
+
+ Args:
+ address (str): The host for the channel to use.
+ credentials (~.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+
+ Returns:
+ grpc.Channel: A gRPC channel object.
+ """
+ return google.api_core.grpc_helpers.create_channel(
+ address,
+ credentials=credentials,
+ scopes=cls._OAUTH_SCOPES,
+ )
+
+ @property
+ def get_keyword_view(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Returns the requested keyword view in full detail.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs['keyword_view_service_stub'].GetKeywordView
diff --git a/google/ads/google_ads/v0/services/transports/recommendation_service_grpc_transport.py b/google/ads/google_ads/v0/services/transports/recommendation_service_grpc_transport.py
new file mode 100644
index 000000000..76e3957db
--- /dev/null
+++ b/google/ads/google_ads/v0/services/transports/recommendation_service_grpc_transport.py
@@ -0,0 +1,117 @@
+# Copyright 2018 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.
+
+import google.api_core.grpc_helpers
+
+from google.ads.google_ads.v0.proto.services import recommendation_service_pb2_grpc
+
+
+class RecommendationServiceGrpcTransport(object):
+ """gRPC transport class providing stubs for
+ google.ads.googleads.v0.services RecommendationService API.
+
+ The transport provides access to the raw gRPC stubs,
+ which can be used to take advantage of advanced
+ features of gRPC.
+ """
+ # The scopes needed to make gRPC calls to all of the methods defined
+ # in this service.
+ _OAUTH_SCOPES = ()
+
+ def __init__(self,
+ channel=None,
+ credentials=None,
+ address='googleads.googleapis.com:443'):
+ """Instantiate the transport class.
+
+ Args:
+ channel (grpc.Channel): A ``Channel`` instance through
+ which to make calls. This argument is mutually exclusive
+ with ``credentials``; providing both will raise an exception.
+ credentials (google.auth.credentials.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If none
+ are specified, the client will attempt to ascertain the
+ credentials from the environment.
+ address (str): The address where the service is hosted.
+ """
+ # If both `channel` and `credentials` are specified, raise an
+ # exception (channels come with credentials baked in already).
+ if channel is not None and credentials is not None:
+ raise ValueError(
+ 'The `channel` and `credentials` arguments are mutually '
+ 'exclusive.', )
+
+ # Create the channel.
+ if channel is None:
+ channel = self.create_channel(
+ address=address,
+ credentials=credentials,
+ )
+
+ # gRPC uses objects called "stubs" that are bound to the
+ # channel and provide a basic method for each RPC.
+ self._stubs = {
+ 'recommendation_service_stub':
+ recommendation_service_pb2_grpc.RecommendationServiceStub(channel),
+ }
+
+ @classmethod
+ def create_channel(cls,
+ address='googleads.googleapis.com:443',
+ credentials=None):
+ """Create and return a gRPC channel object.
+
+ Args:
+ address (str): The host for the channel to use.
+ credentials (~.Credentials): The
+ authorization credentials to attach to requests. These
+ credentials identify this application to the service. If
+ none are specified, the client will attempt to ascertain
+ the credentials from the environment.
+
+ Returns:
+ grpc.Channel: A gRPC channel object.
+ """
+ return google.api_core.grpc_helpers.create_channel(
+ address,
+ credentials=credentials,
+ scopes=cls._OAUTH_SCOPES,
+ )
+
+ @property
+ def get_recommendation(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Returns the requested recommendation in full detail.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs['recommendation_service_stub'].GetRecommendation
+
+ @property
+ def apply_recommendation(self):
+ """Return the gRPC stub for {$apiMethod.name}.
+
+ Applies given recommendations with corresponding apply parameters.
+
+ Returns:
+ Callable: A callable which accepts the appropriate
+ deserialized request object and returns a
+ deserialized response object.
+ """
+ return self._stubs['recommendation_service_stub'].ApplyRecommendation
diff --git a/google/ads/google_ads/v0/types.py b/google/ads/google_ads/v0/types.py
new file mode 100644
index 000000000..3cd0c1aae
--- /dev/null
+++ b/google/ads/google_ads/v0/types.py
@@ -0,0 +1,281 @@
+# Copyright 2018 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.
+
+from __future__ import absolute_import
+import sys
+
+from google.api_core.protobuf_helpers import get_messages
+
+from google.api import http_pb2
+from google.ads.google_ads.v0.proto.errors import ad_customizer_error_pb2
+from google.ads.google_ads.v0.proto.errors import ad_error_pb2
+from google.ads.google_ads.v0.proto.errors import ad_group_ad_error_pb2
+from google.ads.google_ads.v0.proto.resources import ad_group_ad_pb2
+from google.ads.google_ads.v0.proto.services import ad_group_ad_service_pb2
+from google.ads.google_ads.v0.proto.enums import ad_group_ad_status_pb2
+from google.ads.google_ads.v0.proto.errors import ad_group_bid_modifier_error_pb2
+from google.ads.google_ads.v0.proto.resources import ad_group_bid_modifier_pb2
+from google.ads.google_ads.v0.proto.services import ad_group_bid_modifier_service_pb2
+from google.ads.google_ads.v0.proto.errors import ad_group_criterion_error_pb2
+from google.ads.google_ads.v0.proto.resources import ad_group_criterion_pb2
+from google.ads.google_ads.v0.proto.services import ad_group_criterion_service_pb2
+from google.ads.google_ads.v0.proto.enums import ad_group_criterion_status_pb2
+from google.ads.google_ads.v0.proto.errors import ad_group_error_pb2
+from google.ads.google_ads.v0.proto.resources import ad_group_pb2
+from google.ads.google_ads.v0.proto.services import ad_group_service_pb2
+from google.ads.google_ads.v0.proto.enums import ad_group_status_pb2
+from google.ads.google_ads.v0.proto.enums import ad_group_type_pb2
+from google.ads.google_ads.v0.proto.enums import ad_network_type_pb2
+from google.ads.google_ads.v0.proto.resources import ad_pb2
+from google.ads.google_ads.v0.proto.enums import ad_serving_optimization_status_pb2
+from google.ads.google_ads.v0.proto.errors import ad_sharing_error_pb2
+from google.ads.google_ads.v0.proto.common import ad_type_infos_pb2
+from google.ads.google_ads.v0.proto.enums import ad_type_pb2
+from google.ads.google_ads.v0.proto.enums import advertising_channel_sub_type_pb2
+from google.ads.google_ads.v0.proto.enums import advertising_channel_type_pb2
+from google.ads.google_ads.v0.proto.errors import adx_error_pb2
+from google.ads.google_ads.v0.proto.errors import authentication_error_pb2
+from google.ads.google_ads.v0.proto.errors import authorization_error_pb2
+from google.ads.google_ads.v0.proto.errors import bidding_error_pb2
+from google.ads.google_ads.v0.proto.common import bidding_pb2
+from google.ads.google_ads.v0.proto.enums import bidding_source_pb2
+from google.ads.google_ads.v0.proto.errors import bidding_strategy_error_pb2
+from google.ads.google_ads.v0.proto.resources import bidding_strategy_pb2
+from google.ads.google_ads.v0.proto.services import bidding_strategy_service_pb2
+from google.ads.google_ads.v0.proto.enums import bidding_strategy_type_pb2
+from google.ads.google_ads.v0.proto.enums import budget_delivery_method_pb2
+from google.ads.google_ads.v0.proto.enums import budget_status_pb2
+from google.ads.google_ads.v0.proto.errors import campaign_budget_error_pb2
+from google.ads.google_ads.v0.proto.resources import campaign_budget_pb2
+from google.ads.google_ads.v0.proto.services import campaign_budget_service_pb2
+from google.ads.google_ads.v0.proto.errors import campaign_criterion_error_pb2
+from google.ads.google_ads.v0.proto.resources import campaign_criterion_pb2
+from google.ads.google_ads.v0.proto.services import campaign_criterion_service_pb2
+from google.ads.google_ads.v0.proto.errors import campaign_error_pb2
+from google.ads.google_ads.v0.proto.resources import campaign_pb2
+from google.ads.google_ads.v0.proto.services import campaign_service_pb2
+from google.ads.google_ads.v0.proto.enums import campaign_serving_status_pb2
+from google.ads.google_ads.v0.proto.enums import campaign_status_pb2
+from google.ads.google_ads.v0.proto.errors import collection_size_error_pb2
+from google.ads.google_ads.v0.proto.errors import context_error_pb2
+from google.ads.google_ads.v0.proto.common import criteria_pb2
+from google.ads.google_ads.v0.proto.errors import criterion_error_pb2
+from google.ads.google_ads.v0.proto.enums import criterion_type_pb2
+from google.ads.google_ads.v0.proto.common import custom_parameter_pb2
+from google.ads.google_ads.v0.proto.resources import customer_pb2
+from google.ads.google_ads.v0.proto.services import customer_service_pb2
+from google.ads.google_ads.v0.proto.errors import date_error_pb2
+from google.ads.google_ads.v0.proto.errors import date_range_error_pb2
+from google.ads.google_ads.v0.proto.enums import day_of_week_pb2
+from google.ads.google_ads.v0.proto.enums import device_pb2
+from google.ads.google_ads.v0.proto.errors import distinct_error_pb2
+from google.ads.google_ads.v0.proto.errors import errors_pb2
+from google.ads.google_ads.v0.proto.errors import feed_attribute_reference_error_pb2
+from google.ads.google_ads.v0.proto.errors import field_error_pb2
+from google.ads.google_ads.v0.proto.errors import field_mask_error_pb2
+from google.ads.google_ads.v0.proto.errors import function_error_pb2
+from google.ads.google_ads.v0.proto.errors import function_parsing_error_pb2
+from google.ads.google_ads.v0.proto.resources import geo_target_constant_pb2
+from google.ads.google_ads.v0.proto.services import geo_target_constant_service_pb2
+from google.ads.google_ads.v0.proto.enums import google_ads_field_category_pb2
+from google.ads.google_ads.v0.proto.enums import google_ads_field_data_type_pb2
+from google.ads.google_ads.v0.proto.resources import google_ads_field_pb2
+from google.ads.google_ads.v0.proto.services import google_ads_field_service_pb2
+from google.ads.google_ads.v0.proto.services import google_ads_service_pb2
+from google.ads.google_ads.v0.proto.errors import id_error_pb2
+from google.ads.google_ads.v0.proto.errors import image_error_pb2
+from google.ads.google_ads.v0.proto.errors import internal_error_pb2
+from google.ads.google_ads.v0.proto.enums import keyword_match_type_pb2
+from google.ads.google_ads.v0.proto.resources import keyword_view_pb2
+from google.ads.google_ads.v0.proto.services import keyword_view_service_pb2
+from google.ads.google_ads.v0.proto.errors import list_operation_error_pb2
+from google.ads.google_ads.v0.proto.enums import listing_custom_attribute_index_pb2
+from google.ads.google_ads.v0.proto.enums import listing_group_type_pb2
+from google.ads.google_ads.v0.proto.errors import media_bundle_error_pb2
+from google.ads.google_ads.v0.proto.errors import media_error_pb2
+from google.ads.google_ads.v0.proto.common import metrics_pb2
+from google.ads.google_ads.v0.proto.errors import multiplier_error_pb2
+from google.ads.google_ads.v0.proto.errors import mutate_error_pb2
+from google.ads.google_ads.v0.proto.errors import new_resource_creation_error_pb2
+from google.ads.google_ads.v0.proto.errors import not_empty_error_pb2
+from google.ads.google_ads.v0.proto.errors import null_error_pb2
+from google.ads.google_ads.v0.proto.errors import operation_access_denied_error_pb2
+from google.ads.google_ads.v0.proto.errors import operator_error_pb2
+from google.ads.google_ads.v0.proto.enums import page_one_promoted_strategy_goal_pb2
+from google.ads.google_ads.v0.proto.common import policy_pb2
+from google.ads.google_ads.v0.proto.enums import quality_score_bucket_pb2
+from google.ads.google_ads.v0.proto.errors import query_error_pb2
+from google.ads.google_ads.v0.proto.errors import quota_error_pb2
+from google.ads.google_ads.v0.proto.errors import range_error_pb2
+from google.ads.google_ads.v0.proto.errors import recommendation_error_pb2
+from google.ads.google_ads.v0.proto.resources import recommendation_pb2
+from google.ads.google_ads.v0.proto.services import recommendation_service_pb2
+from google.ads.google_ads.v0.proto.enums import recommendation_type_pb2
+from google.ads.google_ads.v0.proto.errors import region_code_error_pb2
+from google.ads.google_ads.v0.proto.errors import request_error_pb2
+from google.ads.google_ads.v0.proto.errors import resource_access_denied_error_pb2
+from google.ads.google_ads.v0.proto.errors import resource_count_limit_exceeded_error_pb2
+from google.ads.google_ads.v0.proto.errors import setting_error_pb2
+from google.ads.google_ads.v0.proto.enums import slot_pb2
+from google.ads.google_ads.v0.proto.errors import string_format_error_pb2
+from google.ads.google_ads.v0.proto.errors import string_length_error_pb2
+from google.ads.google_ads.v0.proto.enums import target_cpa_opt_in_recommendation_goal_pb2
+from google.ads.google_ads.v0.proto.errors import url_field_error_pb2
+from google.ads.google_ads.v0.proto.common import value_pb2
+from google.protobuf import any_pb2
+from google.protobuf import descriptor_pb2
+from google.protobuf import field_mask_pb2
+from google.protobuf import wrappers_pb2
+from google.rpc import status_pb2
+
+_shared_modules = [
+ http_pb2,
+ ad_customizer_error_pb2,
+ ad_error_pb2,
+ ad_group_ad_error_pb2,
+ ad_group_ad_pb2,
+ ad_group_ad_status_pb2,
+ ad_group_bid_modifier_error_pb2,
+ ad_group_bid_modifier_pb2,
+ ad_group_criterion_error_pb2,
+ ad_group_criterion_pb2,
+ ad_group_criterion_status_pb2,
+ ad_group_error_pb2,
+ ad_group_pb2,
+ ad_group_status_pb2,
+ ad_group_type_pb2,
+ ad_network_type_pb2,
+ ad_pb2,
+ ad_serving_optimization_status_pb2,
+ ad_sharing_error_pb2,
+ ad_type_infos_pb2,
+ ad_type_pb2,
+ advertising_channel_sub_type_pb2,
+ advertising_channel_type_pb2,
+ adx_error_pb2,
+ authentication_error_pb2,
+ authorization_error_pb2,
+ bidding_error_pb2,
+ bidding_pb2,
+ bidding_source_pb2,
+ bidding_strategy_error_pb2,
+ bidding_strategy_pb2,
+ bidding_strategy_type_pb2,
+ budget_delivery_method_pb2,
+ budget_status_pb2,
+ campaign_budget_error_pb2,
+ campaign_budget_pb2,
+ campaign_criterion_error_pb2,
+ campaign_criterion_pb2,
+ campaign_error_pb2,
+ campaign_pb2,
+ campaign_serving_status_pb2,
+ campaign_status_pb2,
+ collection_size_error_pb2,
+ context_error_pb2,
+ criteria_pb2,
+ criterion_error_pb2,
+ criterion_type_pb2,
+ custom_parameter_pb2,
+ customer_pb2,
+ date_error_pb2,
+ date_range_error_pb2,
+ day_of_week_pb2,
+ device_pb2,
+ distinct_error_pb2,
+ errors_pb2,
+ feed_attribute_reference_error_pb2,
+ field_error_pb2,
+ field_mask_error_pb2,
+ function_error_pb2,
+ function_parsing_error_pb2,
+ geo_target_constant_pb2,
+ google_ads_field_category_pb2,
+ google_ads_field_data_type_pb2,
+ google_ads_field_pb2,
+ id_error_pb2,
+ image_error_pb2,
+ internal_error_pb2,
+ keyword_match_type_pb2,
+ keyword_view_pb2,
+ list_operation_error_pb2,
+ listing_custom_attribute_index_pb2,
+ listing_group_type_pb2,
+ media_bundle_error_pb2,
+ media_error_pb2,
+ metrics_pb2,
+ multiplier_error_pb2,
+ mutate_error_pb2,
+ new_resource_creation_error_pb2,
+ not_empty_error_pb2,
+ null_error_pb2,
+ operation_access_denied_error_pb2,
+ operator_error_pb2,
+ page_one_promoted_strategy_goal_pb2,
+ policy_pb2,
+ quality_score_bucket_pb2,
+ query_error_pb2,
+ quota_error_pb2,
+ range_error_pb2,
+ recommendation_error_pb2,
+ recommendation_pb2,
+ recommendation_type_pb2,
+ region_code_error_pb2,
+ request_error_pb2,
+ resource_access_denied_error_pb2,
+ resource_count_limit_exceeded_error_pb2,
+ setting_error_pb2,
+ slot_pb2,
+ string_format_error_pb2,
+ string_length_error_pb2,
+ target_cpa_opt_in_recommendation_goal_pb2,
+ url_field_error_pb2,
+ value_pb2,
+ any_pb2,
+ descriptor_pb2,
+ field_mask_pb2,
+ wrappers_pb2,
+ status_pb2,
+]
+
+_local_modules = [
+ ad_group_ad_service_pb2,
+ ad_group_bid_modifier_service_pb2,
+ ad_group_criterion_service_pb2,
+ ad_group_service_pb2,
+ bidding_strategy_service_pb2,
+ campaign_budget_service_pb2,
+ campaign_criterion_service_pb2,
+ campaign_service_pb2,
+ customer_service_pb2,
+ geo_target_constant_service_pb2,
+ google_ads_field_service_pb2,
+ google_ads_service_pb2,
+ keyword_view_service_pb2,
+ recommendation_service_pb2,
+]
+
+names = []
+
+for module in _shared_modules:
+ for name, message in get_messages(module).items():
+ setattr(sys.modules[__name__], name, message)
+ names.append(name)
+for module in _local_modules:
+ for name, message in get_messages(module).items():
+ message.__module__ = 'google.cloud.ads.googleads_v0.types'
+ setattr(sys.modules[__name__], name, message)
+ names.append(name)
+
+__all__ = tuple(sorted(names))
diff --git a/setup.py b/setup.py
new file mode 100644
index 000000000..87b11a007
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,63 @@
+# Copyright 2018 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.
+"""A setup module for the Google Ads API client library."""
+
+from setuptools import setup, find_packages
+import io
+
+install_requires = [
+ 'enum34; python_version < "3.4"',
+ 'google-auth-oauthlib>=0.0.1,<1.0.0',
+ 'google-api-core[grpc] >= 1.1.0, < 2.0.0dev',
+ 'PyYAML >= 3.11, < 4.0',
+]
+
+tests_require = [
+ 'mock >= 2.0.0, < 3.0.0',
+ 'pyfakefs >= 3.4, < 3.5',
+]
+
+with io.open('README.rst', 'r', encoding='utf-8') as readme_file:
+ long_description = readme_file.read()
+
+setup(
+ name='google-ads',
+ version='0.1.0',
+ author='Google LLC',
+ author_email='googleapis-packages@google.com',
+ classifiers=[
+ 'Intended Audience :: Developers',
+ 'Development Status :: 3 - Alpha',
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: Apache Software License',
+ 'Programming Language :: Python',
+ 'Programming Language :: Python :: 2',
+ 'Programming Language :: Python :: 2.7',
+ 'Programming Language :: Python :: 3',
+ 'Programming Language :: Python :: 3.4',
+ 'Programming Language :: Python :: 3.5',
+ 'Programming Language :: Python :: 3.6',
+ ],
+ description='Client library for the Google Ads API',
+ include_package_data=True,
+ long_description=long_description,
+ install_requires=install_requires,
+ tests_require=tests_require,
+ test_suite='tests',
+ license='Apache 2.0',
+ packages=find_packages(exclude=('tests*', )),
+ namespace_packages=['google', 'google.ads', 'google.ads.google_ads'],
+ url='https://github.com/googleads/google-ads-python',
+ zip_safe=False,
+)
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 000000000..b0c7da3d7
--- /dev/null
+++ b/tests/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2018 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.
diff --git a/tests/client_test.py b/tests/client_test.py
new file mode 100644
index 000000000..fce77d269
--- /dev/null
+++ b/tests/client_test.py
@@ -0,0 +1,154 @@
+# Copyright 2018 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.
+"""Tests for the Google Ads API client library."""
+
+
+import os
+
+import google.ads.google_ads.client
+import google.ads.google_ads.v0
+import mock
+from pyfakefs.fake_filesystem_unittest import TestCase
+import yaml
+
+
+class GoogleAdsClientTest(TestCase):
+ """Tests for the google.ads.googleads.client.GoogleAdsClient class."""
+
+ def _create_test_client(self):
+ with mock.patch('google.oauth2.credentials') as mock_credentials:
+ mock_credentials_instance = mock_credentials.return_value
+ mock_credentials_instance.refresh_token = self.refresh_token
+ mock_credentials_instance.client_id = self.client_id
+ mock_credentials_instance.client_secret = self.client_secret
+ client = google.ads.google_ads.client.GoogleAdsClient(
+ mock_credentials_instance, self.developer_token)
+ return client
+
+ def setUp(self):
+ self.setUpPyfakefs()
+ self.developer_token = 'abc123'
+ self.client_id = 'client_id_123456789'
+ self.client_secret = 'client_secret_987654321'
+ self.refresh_token = 'refresh'
+
+ def test_load_from_storage(self):
+ config = {
+ 'developer_token': self.developer_token,
+ 'client_id': self.client_id,
+ 'client_secret': self.client_secret,
+ 'refresh_token': self.refresh_token
+ }
+
+ file_path = os.path.join(os.path.expanduser('~'), 'google-ads.yaml')
+ self.fs.create_file(file_path, contents=yaml.safe_dump(config))
+
+ with mock.patch('google.ads.google_ads.client.GoogleAdsClient'
+ '.__init__') as mock_client_init, \
+ mock.patch(
+ 'google.oauth2.credentials.Credentials') as mock_credentials:
+ mock_client_init.return_value = None
+ mock_credentials_instance = mock.Mock()
+ mock_credentials.return_value = mock_credentials_instance
+ (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage())
+ mock_client_init.assert_called_once_with(
+ credentials=mock_credentials_instance,
+ developer_token=self.developer_token)
+
+ def test_load_from_storage_custom_path(self):
+ config = {
+ 'developer_token': self.developer_token,
+ 'client_id': self.client_id,
+ 'client_secret': self.client_secret,
+ 'refresh_token': self.refresh_token
+ }
+
+ file_path = 'test/google-ads.yaml'
+ self.fs.create_file(file_path, contents=yaml.safe_dump(config))
+
+ with mock.patch('google.ads.google_ads.client.GoogleAdsClient'
+ '.__init__') as mock_client_init, \
+ mock.patch(
+ 'google.oauth2.credentials.Credentials') as mock_credentials:
+ mock_client_init.return_value = None
+ mock_credentials_instance = mock.Mock()
+ mock_credentials.return_value = mock_credentials_instance
+ (google.ads.google_ads.client.GoogleAdsClient
+ .load_from_storage(path=file_path))
+ mock_client_init.assert_called_once_with(
+ credentials=mock_credentials_instance,
+ developer_token=self.developer_token)
+
+ def test_load_from_storage_file_not_found(self):
+ wrong_file_path = 'test/wrong-google-ads.yaml'
+
+ self.assertRaises(
+ IOError,
+ google.ads.google_ads.client.GoogleAdsClient.load_from_storage,
+ path=wrong_file_path)
+
+ def test_load_from_storage_required_config_missing(self):
+ config = {
+ 'client_id': self.client_id,
+ 'client_secret': self.client_secret,
+ 'refresh_token': self.refresh_token
+ }
+
+ file_path = 'test/google-ads.yaml'
+ self.fs.create_file(file_path, contents=yaml.safe_dump(config))
+
+ self.assertRaises(
+ ValueError,
+ google.ads.google_ads.client.GoogleAdsClient.load_from_storage,
+ path=file_path)
+
+ def test_get_service(self):
+ # Retrieve service names for all defined service clients.
+ service_names = [
+ name.rsplit('Client')[0] for name in dir(google.ads.google_ads.v0)
+ if 'ServiceClient' in name]
+
+ client = self._create_test_client()
+
+ # Iterate through retrieval of all service clients by name.
+ for service_name in service_names:
+ client.get_service(service_name)
+
+ def test_get_service_not_found(self):
+ client = self._create_test_client()
+ self.assertRaises(ValueError, client.get_service, 'BadService')
+
+ def test_get_service_invalid_version(self):
+ client = self._create_test_client()
+ self.assertRaises(ValueError, client.get_service, 'GoogleAdsService',
+ version='v0_bad')
+
+ def test_get_type(self):
+ # Retrieve names for all types defined in pb2 files.
+ type_names = google.ads.google_ads.v0.types.names
+
+ # Iterate through retrieval of all types by name.
+ for name in type_names:
+ google.ads.google_ads.client.GoogleAdsClient.get_type(name)
+
+ def test_get_type_not_found(self):
+ self.assertRaises(
+ ValueError, google.ads.google_ads.client.GoogleAdsClient.get_type,
+ 'BadType')
+
+ def test_get_type_invalid_version(self):
+ self.assertRaises(
+ ValueError, google.ads.google_ads.client.GoogleAdsClient.get_type,
+ 'GoogleAdsFailure', version='v0_bad')