Skip to content

Commit bc9724c

Browse files
authored
Add type annotations to examples/shopping_ads (#956)
1 parent dd22fb9 commit bc9724c

6 files changed

+999
-481
lines changed

examples/shopping_ads/add_listing_scope.py

Lines changed: 62 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,42 @@
2929

3030
import argparse
3131
import sys
32+
from typing import List
3233

3334
from google.ads.googleads.client import GoogleAdsClient
3435
from google.ads.googleads.errors import GoogleAdsException
35-
36-
37-
def main(client, customer_id, campaign_id):
38-
campaign_service = client.get_service("CampaignService")
39-
campaign_criterion_operation = client.get_type("CampaignCriterionOperation")
40-
campaign_criterion = campaign_criterion_operation.create
36+
from google.ads.googleads.v20.common.types.criteria import (
37+
ListingDimensionInfo,
38+
)
39+
from google.ads.googleads.v20.enums.types.product_custom_attribute_index import (
40+
ProductCustomAttributeIndexEnum,
41+
)
42+
from google.ads.googleads.v20.enums.types.product_type_level import (
43+
ProductTypeLevelEnum,
44+
)
45+
from google.ads.googleads.v20.resources.types.campaign_criterion import (
46+
CampaignCriterion,
47+
)
48+
from google.ads.googleads.v20.services.services.campaign_criterion_service import (
49+
CampaignCriterionServiceClient,
50+
)
51+
from google.ads.googleads.v20.services.services.campaign_service import (
52+
CampaignServiceClient,
53+
)
54+
from google.ads.googleads.v20.services.types.campaign_criterion_service import (
55+
CampaignCriterionOperation,
56+
MutateCampaignCriteriaResponse,
57+
)
58+
59+
60+
def main(client: GoogleAdsClient, customer_id: str, campaign_id: str) -> None:
61+
campaign_service: CampaignServiceClient = client.get_service(
62+
"CampaignService"
63+
)
64+
campaign_criterion_operation: CampaignCriterionOperation = client.get_type(
65+
"CampaignCriterionOperation"
66+
)
67+
campaign_criterion: CampaignCriterion = campaign_criterion_operation.create
4168
campaign_criterion.campaign = campaign_service.campaign_path(
4269
customer_id, campaign_id
4370
)
@@ -47,39 +74,53 @@ def main(client, customer_id, campaign_id):
4774
# must be met for a product to be included in a campaign.
4875
# A typical listing scope might only have a few dimensions. This example
4976
# demonstrates a range of different dimensions you could use.
50-
dimensions = campaign_criterion.listing_scope.dimensions
77+
dimensions: List[ListingDimensionInfo] = (
78+
campaign_criterion.listing_scope.dimensions
79+
)
5180

52-
product_brand_dimension = client.get_type("ListingDimensionInfo")
81+
product_brand_dimension: ListingDimensionInfo = client.get_type(
82+
"ListingDimensionInfo"
83+
)
5384
product_brand_dimension.product_brand.value = "google"
5485
dimensions.append(product_brand_dimension)
5586

56-
product_custom_attribute_index_enum = (
87+
product_custom_attribute_index_enum: ProductCustomAttributeIndexEnum = (
5788
client.enums.ProductCustomAttributeIndexEnum
5889
)
59-
product_custom_attribute_dimension = client.get_type("ListingDimensionInfo")
90+
product_custom_attribute_dimension: ListingDimensionInfo = client.get_type(
91+
"ListingDimensionInfo"
92+
)
6093
product_custom_attribute = (
6194
product_custom_attribute_dimension.product_custom_attribute
6295
)
6396
product_custom_attribute.index = product_custom_attribute_index_enum.INDEX0
6497
product_custom_attribute.value = "top_selling_products"
6598
dimensions.append(product_custom_attribute_dimension)
6699

67-
product_type_level_enum = client.enums.ProductTypeLevelEnum
68-
product_type_dimension_1 = client.get_type("ListingDimensionInfo")
100+
product_type_level_enum: ProductTypeLevelEnum = (
101+
client.enums.ProductTypeLevelEnum
102+
)
103+
product_type_dimension_1: ListingDimensionInfo = client.get_type(
104+
"ListingDimensionInfo"
105+
)
69106
product_type = product_type_dimension_1.product_type
70107
product_type.level = product_type_level_enum.LEVEL1
71108
product_type.value = "electronics"
72109
dimensions.append(product_type_dimension_1)
73110

74-
product_type_dimension_2 = client.get_type("ListingDimensionInfo")
111+
product_type_dimension_2: ListingDimensionInfo = client.get_type(
112+
"ListingDimensionInfo"
113+
)
75114
product_type = product_type_dimension_2.product_type
76115
product_type.level = product_type_level_enum.LEVEL2
77116
product_type.value = "smartphones"
78117
dimensions.append(product_type_dimension_2)
79118

80-
campaign_criterion_service = client.get_service("CampaignCriterionService")
119+
campaign_criterion_service: CampaignCriterionServiceClient = (
120+
client.get_service("CampaignCriterionService")
121+
)
81122

82-
campaign_criterion_response = (
123+
campaign_criterion_response: MutateCampaignCriteriaResponse = (
83124
campaign_criterion_service.mutate_campaign_criteria(
84125
customer_id=customer_id, operations=[campaign_criterion_operation]
85126
)
@@ -89,8 +130,8 @@ def main(client, customer_id, campaign_id):
89130
f"Added {len(campaign_criterion_response.results)} campaign "
90131
"criteria:"
91132
)
92-
for campaign_criterion in campaign_criterion_response.results:
93-
print(campaign_criterion.resource_name)
133+
for criterion in campaign_criterion_response.results:
134+
print(criterion.resource_name)
94135

95136

96137
if __name__ == "__main__":
@@ -108,11 +149,13 @@ def main(client, customer_id, campaign_id):
108149
parser.add_argument(
109150
"-i", "--campaign_id", type=str, required=True, help="The campaign ID."
110151
)
111-
args = parser.parse_args()
152+
args: argparse.Namespace = parser.parse_args()
112153

113154
# GoogleAdsClient will read the google-ads.yaml configuration file in the
114155
# home directory if none is specified.
115-
googleads_client = GoogleAdsClient.load_from_storage(version="v20")
156+
googleads_client: GoogleAdsClient = GoogleAdsClient.load_from_storage(
157+
version="v20"
158+
)
116159

117160
try:
118161
main(googleads_client, args.customer_id, args.campaign_id)

0 commit comments

Comments
 (0)