Google Ads API is returning to beta status. Please read our blog post for more details.

Setting Empty Message Objects as Fields

In the Google Ads API some message fields are defined as empty message objects, for example campaign.manual_cpm. The value for this field is an instance of google.ads.googleads.v2.common.ManualCpm, which is an empty message object, i.e., it has no fields of its own.

When creating a new campaign, for example, we normally set a field that is a Well Known Type by augmenting it directly, for example:

# campaign.name is an instance of a Well Known Type, StringValue
campaign.name.value = 'Test campaign value'

However, since campaign.manual_cpm is not a Well Known Type and has no fields to augment, there is no clear way to set it on the campaign message object. In order to set the field we need to use the built-in CopyFrom method. This also requires us to initialize a new instance of the ManualCpm message class:

campaign.manual_cpm.CopyFrom(client.get_type('ManualCpm'))

Note how manual_cpm is specified for the campaign object:

name {
  value: "Test campaign value"
}
manual_cpm {
}

For more specific details about the behavior of generated protobuf objects in Python please review the Python Generated Code documentation.