From 2186f83bc4ae3dcf9a1e9d3786ab7ba1ee73884a Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Tue, 10 Nov 2026 14:37:06 +0000 Subject: [PATCH] feat: update API sources and regenerate --- librarian.yaml | 4 +- .../audience_segment_category_service.rst | 10 + .../admanager_v1/change_event_service.rst | 10 + .../forecast_adjustment_service.rst | 10 + .../docs/admanager_v1/proposal_service.rst | 10 + .../docs/admanager_v1/services_.rst | 7 + .../traffic_forecast_segment_service.rst | 10 + .../docs/admanager_v1/yield_group_service.rst | 10 + .../admanager_v1/yield_partner_service.rst | 10 + .../google/ads/admanager/__init__.py | 359 + .../google/ads/admanager_v1/__init__.py | 360 + .../ads/admanager_v1/gapic_metadata.json | 363 + .../services/ad_rule_service/client.py | 96 + .../__init__.py | 18 + .../client.py | 1022 + .../pagers.py | 132 + .../transports/README.rst | 10 + .../transports/__init__.py | 33 + .../transports/base.py | 230 + .../transports/rest.py | 957 + .../transports/rest_base.py | 157 + .../services/change_event_service/__init__.py | 18 + .../services/change_event_service/client.py | 1002 + .../services/change_event_service/pagers.py | 117 + .../transports/README.rst | 10 + .../transports/__init__.py | 30 + .../change_event_service/transports/base.py | 225 + .../change_event_service/transports/rest.py | 924 + .../transports/rest_base.py | 152 + .../services/creative_service/client.py | 500 + .../creative_service/transports/base.py | 62 + .../creative_service/transports/rest.py | 996 +- .../creative_service/transports/rest_base.py | 68 + .../dai_authentication_key_service/client.py | 1 + .../entity_signals_mapping_service/client.py | 84 + .../forecast_adjustment_service/__init__.py | 18 + .../forecast_adjustment_service/client.py | 2476 + .../forecast_adjustment_service/pagers.py | 126 + .../transports/README.rst | 10 + .../transports/__init__.py | 33 + .../transports/base.py | 357 + .../transports/rest.py | 2599 + .../transports/rest_base.py | 274 + .../services/forecast_service/client.py | 166 +- .../forecast_service/transports/rest.py | 12 +- .../client.py | 1102 + .../transports/base.py | 164 + .../transports/rest.py | 2099 +- .../transports/rest_base.py | 137 + .../services/line_item_service/client.py | 116 + .../services/native_style_service/client.py | 96 + .../private_auction_deal_service/client.py | 96 + .../services/proposal_service/__init__.py | 18 + .../services/proposal_service/client.py | 3590 + .../services/proposal_service/pagers.py | 193 + .../proposal_service/transports/README.rst | 10 + .../proposal_service/transports/__init__.py | 30 + .../proposal_service/transports/base.py | 488 + .../proposal_service/transports/rest.py | 4505 + .../proposal_service/transports/rest_base.py | 425 + .../targeting_preset_service/client.py | 96 + .../__init__.py | 18 + .../client.py | 2087 + .../pagers.py | 128 + .../transports/README.rst | 10 + .../transports/__init__.py | 33 + .../transports/base.py | 302 + .../transports/rest.py | 1899 + .../transports/rest_base.py | 225 + .../services/yield_group_service/__init__.py | 18 + .../services/yield_group_service/client.py | 2374 + .../services/yield_group_service/pagers.py | 117 + .../yield_group_service/transports/README.rst | 10 + .../transports/__init__.py | 30 + .../yield_group_service/transports/base.py | 341 + .../yield_group_service/transports/rest.py | 2503 + .../transports/rest_base.py | 271 + .../yield_partner_service/__init__.py | 18 + .../services/yield_partner_service/client.py | 1005 + .../services/yield_partner_service/pagers.py | 117 + .../transports/README.rst | 10 + .../transports/__init__.py | 30 + .../yield_partner_service/transports/base.py | 225 + .../yield_partner_service/transports/rest.py | 932 + .../transports/rest_base.py | 152 + .../google/ads/admanager_v1/types/__init__.py | 344 + .../types/ad_category_messages.py | 46 + .../ads/admanager_v1/types/ad_rule_service.py | 10 + .../ads/admanager_v1/types/ad_spot_service.py | 10 + .../ads/admanager_v1/types/ad_unit_service.py | 11 +- .../allocation_delivery_profile_messages.py | 46 + .../admanager_v1/types/application_service.py | 10 + .../audience_segment_category_messages.py | 68 + .../audience_segment_category_service.py | 176 + .../types/audience_segment_service.py | 22 + .../types/bandwidth_group_service.py | 10 + .../types/break_template_service.py | 10 + .../types/browser_language_service.py | 10 + .../ads/admanager_v1/types/browser_service.py | 10 + .../admanager_v1/types/cdn_config_service.py | 10 + .../admanager_v1/types/change_event_enums.py | 139 + .../types/change_event_messages.py | 102 + .../types/change_event_service.py | 160 + .../types/child_publisher_service.py | 10 + .../types/cms_metadata_key_service.py | 10 + .../types/cms_metadata_value_service.py | 10 + .../ads/admanager_v1/types/company_service.py | 10 + .../ads/admanager_v1/types/contact_service.py | 10 + .../types/content_bundle_service.py | 10 + .../types/content_label_service.py | 10 + .../ads/admanager_v1/types/content_service.py | 10 + .../admanager_v1/types/creative_service.py | 145 +- .../types/creative_set_service.py | 10 + .../types/creative_template_service.py | 10 + .../types/creative_wrapper_service.py | 10 + .../types/custom_field_service.py | 10 + .../types/custom_targeting_key_service.py | 10 + .../types/custom_targeting_value_service.py | 10 + .../types/dai_authentication_key_messages.py | 18 + .../types/dai_authentication_key_service.py | 10 + .../types/dai_encoding_profile_service.py | 10 + .../types/dayparting_time_zone_enum.py | 55 + .../types/device_capability_service.py | 10 + .../types/device_category_service.py | 10 + .../types/device_manufacturer_service.py | 10 + .../types/entity_signals_mapping_messages.py | 62 +- .../types/forecast_adjustment_enums.py | 84 + .../types/forecast_adjustment_messages.py | 300 + .../types/forecast_adjustment_service.py | 412 + .../admanager_v1/types/forecast_messages.py | 129 +- .../admanager_v1/types/forecast_service.py | 46 +- .../admanager_v1/types/geo_target_service.py | 10 + .../types/inventory_url_messages.py | 46 + .../ads/admanager_v1/types/label_service.py | 10 + .../line_item_creative_association_service.py | 355 +- .../admanager_v1/types/line_item_messages.py | 10 + .../admanager_v1/types/line_item_service.py | 13 +- .../types/line_item_template_service.py | 10 + .../types/linked_device_service.py | 10 + .../admanager_v1/types/live_stream_service.py | 10 + .../types/mobile_carrier_service.py | 10 + .../types/mobile_device_service.py | 10 + .../types/mobile_device_submodel_service.py | 10 + .../types/native_style_service.py | 11 +- .../types/operating_system_service.py | 10 + .../types/operating_system_version_service.py | 10 + .../ads/admanager_v1/types/order_messages.py | 12 +- .../ads/admanager_v1/types/order_service.py | 10 + .../ads/admanager_v1/types/partner_service.py | 10 + .../admanager_v1/types/placement_service.py | 10 + .../types/private_auction_deal_service.py | 10 + .../types/programmatic_buyer_service.py | 10 + .../ads/admanager_v1/types/proposal_enums.py | 85 + .../types/proposal_environment_type_enum.py | 68 + .../admanager_v1/types/proposal_messages.py | 700 + .../types/proposal_negotiation_status_enum.py | 82 + .../admanager_v1/types/proposal_service.py | 732 + .../admanager_v1/types/report_definition.py | 382 + .../types/rich_media_ads_company_service.py | 10 + .../ads/admanager_v1/types/role_service.py | 10 + .../ads/admanager_v1/types/site_service.py | 10 + .../ads/admanager_v1/types/slate_service.py | 10 + .../types/suggested_ad_unit_service.py | 10 + .../types/supply_path_type_enum.py | 55 + .../ads/admanager_v1/types/targeting.py | 294 +- .../types/targeting_preset_service.py | 10 + .../ads/admanager_v1/types/team_service.py | 10 + .../types/third_party_company_service.py | 10 + .../traffic_forecast_segment_messages.py | 104 + .../types/traffic_forecast_segment_service.py | 319 + .../ads/admanager_v1/types/user_service.py | 10 + .../types/viewability_provider_service.py | 10 + .../ads/admanager_v1/types/yield_enums.py | 142 + .../types/yield_environment_type_enum.py | 57 + .../admanager_v1/types/yield_format_enum.py | 68 + .../types/yield_group_messages.py | 244 + .../admanager_v1/types/yield_group_service.py | 400 + .../types/yield_partner_messages.py | 194 + .../types/yield_partner_service.py | 170 + ...vice_get_audience_segment_category_sync.py | 53 + ...e_list_audience_segment_categories_sync.py | 54 + ...nge_event_service_get_change_event_sync.py | 53 + ...e_event_service_list_change_events_sync.py | 54 + ...ive_service_batch_create_creatives_sync.py | 60 + ...ive_service_batch_update_creatives_sync.py | 59 + ...d_creative_service_create_creative_sync.py | 59 + ...d_creative_service_update_creative_sync.py | 58 + ...tch_create_entity_signals_mappings_sync.py | 1 + ...tch_update_entity_signals_mappings_sync.py | 1 + ...vice_create_entity_signals_mapping_sync.py | 1 + ...vice_update_entity_signals_mapping_sync.py | 1 + ...atch_activate_forecast_adjustments_sync.py | 54 + ..._batch_create_forecast_adjustments_sync.py | 61 + ...ch_deactivate_forecast_adjustments_sync.py | 54 + ..._batch_update_forecast_adjustments_sync.py | 60 + ...culate_daily_ad_opportunity_counts_sync.py | 57 + ...service_create_forecast_adjustment_sync.py | 57 + ...nt_service_get_forecast_adjustment_sync.py | 53 + ..._service_list_forecast_adjustments_sync.py | 54 + ...service_update_forecast_adjustment_sync.py | 56 + ...te_line_item_creative_associations_sync.py | 54 + ...te_line_item_creative_associations_sync.py | 57 + ...te_line_item_creative_associations_sync.py | 54 + ...te_line_item_creative_associations_sync.py | 51 + ...te_line_item_creative_associations_sync.py | 53 + ...ate_line_item_creative_association_sync.py | 53 + ...iew_line_item_creative_association_sync.py | 54 + ...ate_line_item_creative_association_sync.py | 51 + ...al_service_batch_archive_proposals_sync.py | 54 + ...sal_service_batch_create_proposals_sync.py | 57 + ...vice_batch_discard_draft_proposals_sync.py | 54 + ...osal_service_batch_pause_proposals_sync.py | 55 + ...vice_batch_push_to_order_proposals_sync.py | 54 + ...al_service_batch_redraft_proposals_sync.py | 54 + ...tch_request_buyer_accept_proposals_sync.py | 54 + ...tch_request_buyer_review_proposals_sync.py | 54 + ...al_service_batch_reserve_proposals_sync.py | 54 + ...sal_service_batch_resume_proposals_sync.py | 54 + ..._service_batch_terminate_proposals_sync.py | 54 + ..._service_batch_unarchive_proposals_sync.py | 54 + ...sal_service_batch_update_proposals_sync.py | 53 + ...d_proposal_service_create_proposal_sync.py | 53 + ...service_fetch_marketplace_comments_sync.py | 55 + ...ated_proposal_service_get_proposal_sync.py | 53 + ...ed_proposal_service_list_proposals_sync.py | 54 + ...d_proposal_service_update_proposal_sync.py | 51 + ...h_create_traffic_forecast_segments_sync.py | 57 + ...h_update_traffic_forecast_segments_sync.py | 53 + ...ce_create_traffic_forecast_segment_sync.py | 53 + ...rvice_get_traffic_forecast_segment_sync.py | 53 + ...ice_list_traffic_forecast_segments_sync.py | 54 + ...ce_update_traffic_forecast_segment_sync.py | 51 + ...ervice_batch_activate_yield_groups_sync.py | 54 + ...service_batch_archive_yield_groups_sync.py | 54 + ..._service_batch_create_yield_groups_sync.py | 57 + ...vice_batch_deactivate_yield_groups_sync.py | 54 + ..._service_batch_update_yield_groups_sync.py | 53 + ...d_group_service_create_yield_group_sync.py | 53 + ...ield_group_service_get_yield_group_sync.py | 53 + ...ld_group_service_list_yield_groups_sync.py | 54 + ...d_group_service_update_yield_group_sync.py | 51 + ..._partner_service_get_yield_partner_sync.py | 53 + ...artner_service_list_yield_partners_sync.py | 54 + ...ppet_metadata_google.ads.admanager.v1.json | 15461 ++-- .../admanager_v1/test_ad_rule_service.py | 397 +- .../test_audience_segment_category_service.py | 2379 + .../admanager_v1/test_change_event_service.py | 2311 + .../admanager_v1/test_creative_service.py | 2457 +- .../test_dai_authentication_key_service.py | 11 + .../test_entity_signals_mapping_service.py | 149 +- .../test_forecast_adjustment_service.py | 6380 ++ .../admanager_v1/test_forecast_service.py | 349 +- ..._line_item_creative_association_service.py | 3383 +- .../admanager_v1/test_line_item_service.py | 410 +- .../admanager_v1/test_native_style_service.py | 406 +- .../gapic/admanager_v1/test_order_service.py | 2 + .../test_private_auction_deal_service.py | 413 +- .../admanager_v1/test_proposal_service.py | 9544 ++ .../test_targeting_preset_service.py | 408 +- .../test_traffic_forecast_segment_service.py | 5214 ++ .../admanager_v1/test_yield_group_service.py | 6092 ++ .../test_yield_partner_service.py | 2311 + .../docs/datamanager_v1/reporting_service.rst | 10 + .../docs/datamanager_v1/services_.rst | 1 + .../google/ads/datamanager/__init__.py | 30 + .../google/ads/datamanager_v1/__init__.py | 32 + .../ads/datamanager_v1/gapic_metadata.json | 34 + .../ingestion_service/async_client.py | 10 + .../services/ingestion_service/client.py | 10 + .../ingestion_service/transports/grpc.py | 10 + .../transports/grpc_asyncio.py | 10 + .../services/reporting_service/__init__.py | 22 + .../reporting_service/async_client.py | 444 + .../services/reporting_service/client.py | 727 + .../services/reporting_service/pagers.py | 206 + .../reporting_service/transports/README.rst | 10 + .../reporting_service/transports/__init__.py | 36 + .../reporting_service/transports/base.py | 176 + .../reporting_service/transports/grpc.py | 369 + .../transports/grpc_asyncio.py | 392 + .../reporting_service/transports/rest.py | 414 + .../reporting_service/transports/rest_base.py | 109 + .../ads/datamanager_v1/types/__init__.py | 24 + .../ads/datamanager_v1/types/call_info.py | 48 + .../ads/datamanager_v1/types/cart_data.py | 2 +- .../google/ads/datamanager_v1/types/error.py | 52 +- .../google/ads/datamanager_v1/types/event.py | 18 +- .../datamanager_v1/types/item_parameter.py | 2 +- .../types/partner_match_report_entry.py | 209 + .../datamanager_v1/types/processing_errors.py | 53 + .../datamanager_v1/types/reporting_service.py | 168 + .../ads/datamanager_v1/types/user_list.py | 14 +- .../datamanager_v1/types/user_properties.py | 4 +- ...ice_retrieve_partner_match_report_async.py | 55 + ...vice_retrieve_partner_match_report_sync.py | 55 + ...et_metadata_google.ads.datamanager.v1.json | 161 + .../datamanager_v1/test_ingestion_service.py | 1 + .../datamanager_v1/test_reporting_service.py | 2912 + .../google/cloud/ces_v1/types/agent_card.py | 35 + .../unit/gapic/ces_v1/test_agent_service.py | 12 + .../cloud/compute_v1beta/types/compute.py | 45 +- .../google/cloud/compute/__init__.py | 28 + .../google/cloud/compute_v1/__init__.py | 28 + .../cloud/compute_v1/gapic_metadata.json | 288 +- .../services/accelerator_types/client.py | 8 +- .../compute_v1/services/addresses/client.py | 26 +- .../compute_v1/services/advice/client.py | 8 +- .../compute_v1/services/autoscalers/client.py | 26 +- .../services/backend_buckets/client.py | 44 +- .../services/backend_services/client.py | 52 +- .../services/cross_site_networks/client.py | 18 +- .../compute_v1/services/disk_types/client.py | 8 +- .../cloud/compute_v1/services/disks/client.py | 70 +- .../services/external_vpn_gateways/client.py | 20 +- .../services/firewall_policies/client.py | 58 +- .../compute_v1/services/firewalls/client.py | 24 +- .../services/forwarding_rules/client.py | 28 +- .../services/future_reservations/client.py | 24 +- .../services/global_addresses/client.py | 24 +- .../global_forwarding_rules/client.py | 26 +- .../client.py | 6 +- .../global_network_endpoint_groups/client.py | 24 +- .../services/global_operations/client.py | 12 +- .../global_organization_operations/client.py | 8 +- .../client.py | 18 +- .../global_vm_extension_policies/client.py | 20 +- .../services/health_checks/client.py | 26 +- .../cloud/compute_v1/services/hosts/client.py | 10 +- .../services/image_family_views/client.py | 4 +- .../compute_v1/services/image_views/client.py | 6 +- .../compute_v1/services/images/client.py | 34 +- .../client.py | 18 +- .../instance_group_managers/client.py | 86 +- .../services/instance_groups/client.py | 32 +- .../instance_settings_service/client.py | 8 +- .../services/instance_templates/client.py | 22 +- .../compute_v1/services/instances/client.py | 180 +- .../instant_snapshot_groups/client.py | 20 +- .../services/instant_snapshots/client.py | 26 +- .../interconnect_attachment_groups/client.py | 26 +- .../interconnect_attachments/client.py | 24 +- .../services/interconnect_groups/client.py | 30 +- .../services/interconnect_locations/client.py | 6 +- .../interconnect_remote_locations/client.py | 6 +- .../services/interconnects/client.py | 30 +- .../services/license_codes/client.py | 10 +- .../compute_v1/services/licenses/client.py | 24 +- .../services/machine_images/client.py | 24 +- .../services/machine_types/client.py | 8 +- .../services/managed_rulesets/client.py | 6 +- .../services/network_attachments/client.py | 26 +- .../network_edge_security_services/client.py | 18 +- .../network_endpoint_groups/client.py | 28 +- .../network_firewall_policies/client.py | 68 +- .../services/network_profiles/client.py | 6 +- .../compute_v1/services/networks/client.py | 46 +- .../compute_v1/services/node_groups/client.py | 48 +- .../services/node_templates/client.py | 22 +- .../compute_v1/services/node_types/client.py | 8 +- .../organization_security_policies/client.py | 54 +- .../services/packet_mirrorings/client.py | 22 +- .../services/preview_features/client.py | 10 +- .../services/project_views/client.py | 4 +- .../compute_v1/services/projects/client.py | 50 +- .../public_advertised_prefixes/client.py | 26 +- .../public_delegated_prefixes/client.py | 28 +- .../services/region_autoscalers/client.py | 24 +- .../services/region_backend_buckets/client.py | 26 +- .../region_backend_services/client.py | 36 +- .../services/region_commitments/client.py | 16 +- .../region_composite_health_checks/client.py | 24 +- .../services/region_disk_types/client.py | 6 +- .../services/region_disks/client.py | 64 +- .../client.py | 22 +- .../region_health_check_services/client.py | 22 +- .../services/region_health_checks/client.py | 24 +- .../services/region_health_sources/client.py | 24 +- .../client.py | 18 +- .../region_instance_group_managers/client.py | 84 +- .../services/region_instance_groups/client.py | 14 +- .../region_instance_templates/client.py | 14 +- .../services/region_instances/client.py | 6 +- .../region_instant_snapshot_groups/client.py | 20 +- .../region_instant_snapshots/client.py | 24 +- .../region_network_endpoint_groups/client.py | 24 +- .../client.py | 58 +- .../region_notification_endpoints/client.py | 18 +- .../services/region_operations/client.py | 10 +- .../region_security_policies/client.py | 36 +- .../region_snapshot_settings/client.py | 8 +- .../services/region_snapshots/client.py | 28 +- .../region_ssl_certificates/client.py | 14 +- .../services/region_ssl_policies/client.py | 537 +- .../region_ssl_policies/transports/base.py | 54 + .../region_ssl_policies/transports/rest.py | 786 + .../transports/rest_base.py | 50 + .../region_target_http_proxies/client.py | 18 +- .../region_target_https_proxies/client.py | 26 +- .../region_target_tcp_proxies/client.py | 14 +- .../services/region_url_maps/client.py | 24 +- .../services/region_zones/client.py | 4 +- .../compute_v1/services/regions/client.py | 6 +- .../services/reliability_risks/client.py | 6 +- .../services/reservation_blocks/client.py | 16 +- .../services/reservation_slots/client.py | 18 +- .../services/reservation_sub_blocks/client.py | 24 +- .../services/reservations/client.py | 34 +- .../services/resource_policies/client.py | 26 +- .../services/rollout_plans/client.py | 14 +- .../compute_v1/services/rollouts/client.py | 26 +- .../compute_v1/services/routers/client.py | 66 +- .../compute_v1/services/routes/client.py | 16 +- .../services/security_policies/client.py | 40 +- .../services/service_attachments/client.py | 26 +- .../snapshot_settings_service/client.py | 8 +- .../compute_v1/services/snapshots/client.py | 28 +- .../services/ssl_certificates/client.py | 16 +- .../services/ssl_policies/client.py | 489 +- .../services/ssl_policies/transports/base.py | 54 + .../services/ssl_policies/transports/rest.py | 786 + .../ssl_policies/transports/rest_base.py | 50 + .../services/storage_pool_types/client.py | 8 +- .../services/storage_pools/client.py | 28 +- .../compute_v1/services/subnetworks/client.py | 36 +- .../services/target_grpc_proxies/client.py | 18 +- .../services/target_http_proxies/client.py | 24 +- .../services/target_https_proxies/client.py | 40 +- .../services/target_instances/client.py | 22 +- .../services/target_pools/client.py | 44 +- .../services/target_ssl_proxies/client.py | 36 +- .../services/target_tcp_proxies/client.py | 26 +- .../services/target_vpn_gateways/client.py | 20 +- .../compute_v1/services/url_maps/client.py | 32 +- .../services/vpn_gateways/client.py | 24 +- .../compute_v1/services/vpn_tunnels/client.py | 20 +- .../compute_v1/services/wire_groups/client.py | 18 +- .../services/zone_operations/client.py | 10 +- .../zone_vm_extension_policies/client.py | 18 +- .../cloud/compute_v1/services/zones/client.py | 6 +- .../google/cloud/compute_v1/types/__init__.py | 28 + .../google/cloud/compute_v1/types/compute.py | 1406 +- ...region_ssl_policies_get_iam_policy_sync.py | 55 + ...region_ssl_policies_set_iam_policy_sync.py | 55 + ..._ssl_policies_test_iam_permissions_sync.py | 55 + ...erated_ssl_policies_get_iam_policy_sync.py | 54 + ...erated_ssl_policies_set_iam_policy_sync.py | 54 + ..._ssl_policies_test_iam_permissions_sync.py | 54 + ...ppet_metadata_google.cloud.compute.v1.json | 532 + .../compute_v1/test_accelerator_types.py | 6 +- .../unit/gapic/compute_v1/test_addresses.py | 22 +- .../unit/gapic/compute_v1/test_advice.py | 6 +- .../unit/gapic/compute_v1/test_autoscalers.py | 16 +- .../gapic/compute_v1/test_backend_buckets.py | 28 +- .../gapic/compute_v1/test_backend_services.py | 46 +- .../compute_v1/test_cross_site_networks.py | 10 +- .../unit/gapic/compute_v1/test_disk_types.py | 6 +- .../tests/unit/gapic/compute_v1/test_disks.py | 57 +- .../compute_v1/test_external_vpn_gateways.py | 12 +- .../compute_v1/test_firewall_policies.py | 40 +- .../unit/gapic/compute_v1/test_firewalls.py | 14 +- .../gapic/compute_v1/test_forwarding_rules.py | 38 +- .../compute_v1/test_future_reservations.py | 14 +- .../gapic/compute_v1/test_global_addresses.py | 20 +- .../test_global_forwarding_rules.py | 36 +- .../test_global_frontend_settings_service.py | 4 +- .../test_global_network_endpoint_groups.py | 14 +- .../compute_v1/test_global_operations.py | 10 +- .../test_global_organization_operations.py | 6 +- .../test_global_public_delegated_prefixes.py | 16 +- .../test_global_vm_extension_policies.py | 12 +- .../gapic/compute_v1/test_health_checks.py | 16 +- .../tests/unit/gapic/compute_v1/test_hosts.py | 6 +- .../compute_v1/test_image_family_views.py | 2 +- .../unit/gapic/compute_v1/test_image_views.py | 4 +- .../unit/gapic/compute_v1/test_images.py | 22 +- ..._instance_group_manager_resize_requests.py | 10 +- .../test_instance_group_managers.py | 48 +- .../gapic/compute_v1/test_instance_groups.py | 20 +- .../test_instance_settings_service.py | 4 +- .../compute_v1/test_instance_templates.py | 23 +- .../unit/gapic/compute_v1/test_instances.py | 130 +- .../test_instant_snapshot_groups.py | 14 +- .../compute_v1/test_instant_snapshots.py | 18 +- .../test_interconnect_attachment_groups.py | 18 +- .../test_interconnect_attachments.py | 14 +- .../compute_v1/test_interconnect_groups.py | 20 +- .../compute_v1/test_interconnect_locations.py | 4 +- .../test_interconnect_remote_locations.py | 4 +- .../gapic/compute_v1/test_interconnects.py | 18 +- .../gapic/compute_v1/test_license_codes.py | 8 +- .../unit/gapic/compute_v1/test_licenses.py | 16 +- .../gapic/compute_v1/test_machine_images.py | 29 +- .../gapic/compute_v1/test_machine_types.py | 6 +- .../gapic/compute_v1/test_managed_rulesets.py | 4 +- .../compute_v1/test_network_attachments.py | 18 +- .../test_network_edge_security_services.py | 10 +- .../test_network_endpoint_groups.py | 18 +- .../test_network_firewall_policies.py | 46 +- .../gapic/compute_v1/test_network_profiles.py | 4 +- .../unit/gapic/compute_v1/test_networks.py | 30 +- .../unit/gapic/compute_v1/test_node_groups.py | 30 +- .../gapic/compute_v1/test_node_templates.py | 16 +- .../unit/gapic/compute_v1/test_node_types.py | 6 +- .../test_organization_security_policies.py | 32 +- .../compute_v1/test_packet_mirrorings.py | 14 +- .../gapic/compute_v1/test_preview_features.py | 6 +- .../gapic/compute_v1/test_project_views.py | 2 +- .../unit/gapic/compute_v1/test_projects.py | 28 +- .../test_public_advertised_prefixes.py | 14 +- .../test_public_delegated_prefixes.py | 22 +- .../compute_v1/test_region_autoscalers.py | 14 +- .../compute_v1/test_region_backend_buckets.py | 18 +- .../test_region_backend_services.py | 36 +- .../compute_v1/test_region_commitments.py | 10 +- .../test_region_composite_health_checks.py | 16 +- .../compute_v1/test_region_disk_types.py | 4 +- .../gapic/compute_v1/test_region_disks.py | 53 +- ...test_region_health_aggregation_policies.py | 14 +- .../test_region_health_check_services.py | 14 +- .../compute_v1/test_region_health_checks.py | 14 +- .../compute_v1/test_region_health_sources.py | 16 +- ..._instance_group_manager_resize_requests.py | 10 +- .../test_region_instance_group_managers.py | 46 +- .../compute_v1/test_region_instance_groups.py | 10 +- .../test_region_instance_templates.py | 15 +- .../gapic/compute_v1/test_region_instances.py | 9 +- .../test_region_instant_snapshot_groups.py | 14 +- .../test_region_instant_snapshots.py | 16 +- .../test_region_network_endpoint_groups.py | 14 +- .../test_region_network_firewall_policies.py | 40 +- .../test_region_notification_endpoints.py | 12 +- .../compute_v1/test_region_operations.py | 8 +- .../test_region_security_policies.py | 20 +- .../test_region_snapshot_settings.py | 4 +- .../gapic/compute_v1/test_region_snapshots.py | 18 +- .../test_region_ssl_certificates.py | 8 +- .../compute_v1/test_region_ssl_policies.py | 2142 +- .../test_region_target_http_proxies.py | 10 +- .../test_region_target_https_proxies.py | 14 +- .../test_region_target_tcp_proxies.py | 8 +- .../gapic/compute_v1/test_region_url_maps.py | 42 +- .../gapic/compute_v1/test_region_zones.py | 2 +- .../unit/gapic/compute_v1/test_regions.py | 4 +- .../compute_v1/test_reliability_risks.py | 4 +- .../compute_v1/test_reservation_blocks.py | 12 +- .../compute_v1/test_reservation_slots.py | 10 +- .../compute_v1/test_reservation_sub_blocks.py | 16 +- .../gapic/compute_v1/test_reservations.py | 22 +- .../compute_v1/test_resource_policies.py | 18 +- .../gapic/compute_v1/test_rollout_plans.py | 8 +- .../unit/gapic/compute_v1/test_rollouts.py | 14 +- .../unit/gapic/compute_v1/test_routers.py | 44 +- .../unit/gapic/compute_v1/test_routes.py | 10 +- .../compute_v1/test_security_policies.py | 24 +- .../compute_v1/test_service_attachments.py | 18 +- .../test_snapshot_settings_service.py | 4 +- .../unit/gapic/compute_v1/test_snapshots.py | 18 +- .../gapic/compute_v1/test_ssl_certificates.py | 10 +- .../gapic/compute_v1/test_ssl_policies.py | 2160 +- .../compute_v1/test_storage_pool_types.py | 6 +- .../gapic/compute_v1/test_storage_pools.py | 20 +- .../unit/gapic/compute_v1/test_subnetworks.py | 24 +- .../compute_v1/test_target_grpc_proxies.py | 10 +- .../compute_v1/test_target_http_proxies.py | 14 +- .../compute_v1/test_target_https_proxies.py | 22 +- .../gapic/compute_v1/test_target_instances.py | 14 +- .../gapic/compute_v1/test_target_pools.py | 26 +- .../compute_v1/test_target_ssl_proxies.py | 20 +- .../compute_v1/test_target_tcp_proxies.py | 16 +- .../compute_v1/test_target_vpn_gateways.py | 12 +- .../unit/gapic/compute_v1/test_url_maps.py | 59 +- .../gapic/compute_v1/test_vpn_gateways.py | 16 +- .../unit/gapic/compute_v1/test_vpn_tunnels.py | 12 +- .../unit/gapic/compute_v1/test_wire_groups.py | 12 +- .../gapic/compute_v1/test_zone_operations.py | 8 +- .../test_zone_vm_extension_policies.py | 10 +- .../tests/unit/gapic/compute_v1/test_zones.py | 4 +- .../dataplex_v1/types/data_documentation.py | 67 + .../dataplex_v1/test_data_scan_service.py | 14 + .../cmek_config_service/async_client.py | 1 + .../services/cmek_config_service/client.py | 1 + .../types/cmek_config_service.py | 4 +- ...config_service_update_cmek_config_async.py | 1 + ..._config_service_update_cmek_config_sync.py | 1 + ...adata_google.cloud.discoveryengine.v1.json | 28 +- .../types/data_agent.py | 86 +- .../types/data_chat_service.py | 11 + .../types/data_agent.py | 86 +- .../types/data_chat_service.py | 11 + .../types/data_agent.py | 86 +- .../types/data_chat_service.py | 11 + .../test_data_chat_service.py | 1 + .../test_data_chat_service.py | 1 + .../test_data_chat_service.py | 1 + .../hypercomputecluster_v1beta/__init__.py | 78 +- .../gapic_metadata.json | 15 + .../hypercompute_cluster/async_client.py | 174 +- .../services/hypercompute_cluster/client.py | 334 +- .../services/hypercompute_cluster/pagers.py | 156 + .../hypercompute_cluster/transports/base.py | 17 + .../hypercompute_cluster/transports/grpc.py | 28 + .../transports/grpc_asyncio.py | 34 + .../hypercompute_cluster/transports/rest.py | 219 + .../transports/rest_base.py | 16 + .../types/__init__.py | 74 + .../types/hypercompute_cluster.py | 1004 +- .../types/operation_metadata.py | 631 + ...d_hypercompute_cluster_list_nodes_async.py | 54 + ...ed_hypercompute_cluster_list_nodes_sync.py | 54 + ...ogle.cloud.hypercomputecluster.v1beta.json | 161 + .../test_hypercompute_cluster.py | 1483 +- .../google/cloud/kms_v1/types/resources.py | 4 + .../google/cloud/memorystore/__init__.py | 2 + .../google/cloud/memorystore_v1/__init__.py | 2 + .../cloud/memorystore_v1/types/__init__.py | 2 + .../cloud/memorystore_v1/types/memorystore.py | 28 + .../gapic/memorystore_v1/test_memorystore.py | 2 + .../network_management_v1/types/trace.py | 332 +- .../google/cloud/oracledatabase/__init__.py | 82 + .../cloud/oracledatabase_v1/__init__.py | 86 + .../oracledatabase_v1/gapic_metadata.json | 330 + .../services/oracle_database/async_client.py | 9377 +- .../services/oracle_database/client.py | 9145 +- .../services/oracle_database/pagers.py | 502 + .../oracle_database/transports/base.py | 377 + .../oracle_database/transports/grpc.py | 681 + .../transports/grpc_asyncio.py | 866 +- .../oracle_database/transports/rest.py | 11345 ++- .../oracle_database/transports/rest_base.py | 378 + .../cloud/oracledatabase_v1/types/__init__.py | 82 + .../types/autonomous_database.py | 17 +- .../cloud/oracledatabase_v1/types/common.py | 28 + .../cloud/oracledatabase_v1/types/database.py | 21 +- .../types/database_connection.py | 441 + .../oracledatabase_v1/types/db_system.py | 79 +- .../types/db_system_compute_performance.py | 180 + .../oracledatabase_v1/types/exadata_infra.py | 15 +- .../types/exadb_vm_cluster.py | 13 + .../types/exascale_db_storage_vault.py | 72 +- .../oracledatabase_v1/types/execute_sql.py | 281 + .../oracledatabase_v1/types/flex_component.py | 243 + .../types/goldengate_connection.py | 72 +- .../types/goldengate_connection_assignment.py | 59 +- .../types/goldengate_deployment.py | 81 +- .../oracledatabase_v1/types/odb_network.py | 136 +- .../oracledatabase_v1/types/odb_subnet.py | 59 +- .../oracledatabase_v1/types/oracledatabase.py | 220 +- .../oracledatabase_v1/types/vm_cluster.py | 54 +- ...tabase_create_database_connection_async.py | 64 + ...atabase_create_database_connection_sync.py | 64 + ...tabase_delete_database_connection_async.py | 57 + ...atabase_delete_database_connection_sync.py | 57 + ...oud_vm_cluster_identity_connector_async.py | 59 + ...loud_vm_cluster_identity_connector_sync.py | 57 + ...adb_vm_cluster_identity_connector_async.py | 59 + ...xadb_vm_cluster_identity_connector_sync.py | 57 + ...oud_vm_cluster_identity_connector_async.py | 57 + ...loud_vm_cluster_identity_connector_sync.py | 57 + ...adb_vm_cluster_identity_connector_async.py | 57 + ...xadb_vm_cluster_identity_connector_sync.py | 57 + ...rated_oracle_database_execute_sql_async.py | 54 + ...erated_oracle_database_execute_sql_sync.py | 54 + ..._database_get_database_connection_async.py | 53 + ...e_database_get_database_connection_sync.py | 53 + ...atabase_list_database_connections_async.py | 54 + ...database_list_database_connections_sync.py | 54 + ...st_db_system_compute_performances_async.py | 54 + ...ist_db_system_compute_performances_sync.py | 54 + ...cle_database_list_flex_components_async.py | 54 + ...acle_database_list_flex_components_sync.py | 54 + ...database_test_database_connection_async.py | 53 + ..._database_test_database_connection_sync.py | 53 + ...date_cloud_exadata_infrastructure_async.py | 55 + ...pdate_cloud_exadata_infrastructure_sync.py | 55 + ..._database_update_cloud_vm_cluster_async.py | 60 + ...e_database_update_cloud_vm_cluster_sync.py | 60 + ...tabase_update_database_connection_async.py | 62 + ...atabase_update_database_connection_sync.py | 62 + ..._oracle_database_update_db_system_async.py | 61 + ...d_oracle_database_update_db_system_sync.py | 61 + ..._update_exascale_db_storage_vault_async.py | 63 + ...e_update_exascale_db_storage_vault_sync.py | 63 + ..._goldengate_connection_assignment_async.py | 67 + ...e_goldengate_connection_assignment_sync.py | 67 + ...base_update_goldengate_connection_async.py | 64 + ...abase_update_goldengate_connection_sync.py | 64 + ...base_update_goldengate_deployment_async.py | 65 + ...abase_update_goldengate_deployment_sync.py | 65 + ...racle_database_update_odb_network_async.py | 60 + ...oracle_database_update_odb_network_sync.py | 60 + ...oracle_database_update_odb_subnet_async.py | 61 + ..._oracle_database_update_odb_subnet_sync.py | 61 + ...tadata_google.cloud.oracledatabase.v1.json | 6848 +- .../oracledatabase_v1/test_oracle_database.py | 74805 ++++++++++------ .../google/pubsub_v1/types/pubsub.py | 3 + .../docs/run_v2/services_.rst | 1 + .../docs/run_v2/source_upload.rst | 6 + .../google/cloud/run/__init__.py | 27 + .../google/cloud/run_v2/__init__.py | 24 + .../google/cloud/run_v2/gapic_metadata.json | 94 + .../run_v2/services/builds/transports/base.py | 5 +- .../services/executions/transports/base.py | 6 +- .../run_v2/services/instances/async_client.py | 499 +- .../cloud/run_v2/services/instances/client.py | 493 +- .../services/instances/transports/base.py | 67 +- .../services/instances/transports/grpc.py | 119 +- .../instances/transports/grpc_asyncio.py | 141 +- .../services/instances/transports/rest.py | 1193 +- .../instances/transports/rest_base.py | 73 +- .../run_v2/services/jobs/async_client.py | 6 +- .../cloud/run_v2/services/jobs/client.py | 6 +- .../run_v2/services/jobs/transports/base.py | 6 +- .../services/jobs/transports/rest_base.py | 4 +- .../run_v2/services/revisions/async_client.py | 1 + .../cloud/run_v2/services/revisions/client.py | 1 + .../services/revisions/transports/base.py | 6 +- .../run_v2/services/services/async_client.py | 7 +- .../cloud/run_v2/services/services/client.py | 7 +- .../services/services/transports/base.py | 6 +- .../services/services/transports/rest_base.py | 4 +- .../run_v2/services/source_upload/__init__.py | 22 + .../services/source_upload/async_client.py | 679 + .../run_v2/services/source_upload/client.py | 995 + .../source_upload/transports/README.rst | 10 + .../source_upload/transports/__init__.py | 36 + .../services/source_upload/transports/base.py | 240 + .../services/source_upload/transports/grpc.py | 443 + .../source_upload/transports/grpc_asyncio.py | 487 + .../services/source_upload/transports/rest.py | 1044 + .../source_upload/transports/rest_base.py | 167 + .../run_v2/services/tasks/async_client.py | 2 +- .../cloud/run_v2/services/tasks/client.py | 2 +- .../run_v2/services/tasks/transports/base.py | 6 +- .../services/worker_pools/async_client.py | 5 +- .../run_v2/services/worker_pools/client.py | 5 +- .../services/worker_pools/transports/base.py | 6 +- .../worker_pools/transports/rest_base.py | 4 +- .../google/cloud/run_v2/types/__init__.py | 24 + .../google/cloud/run_v2/types/build.py | 5 +- .../google/cloud/run_v2/types/condition.py | 37 + .../google/cloud/run_v2/types/execution.py | 16 +- .../cloud/run_v2/types/execution_template.py | 28 + .../google/cloud/run_v2/types/instance.py | 167 +- .../google/cloud/run_v2/types/job.py | 26 +- .../google/cloud/run_v2/types/k8s_min.py | 156 +- .../google/cloud/run_v2/types/revision.py | 51 +- .../cloud/run_v2/types/revision_template.py | 43 +- .../google/cloud/run_v2/types/sandbox.py | 113 + .../google/cloud/run_v2/types/service.py | 41 +- .../cloud/run_v2/types/source_upload.py | 77 + .../google/cloud/run_v2/types/task.py | 17 +- .../cloud/run_v2/types/task_template.py | 17 +- .../cloud/run_v2/types/vendor_settings.py | 154 +- .../google/cloud/run_v2/types/worker_pool.py | 6 +- .../types/worker_pool_revision_template.py | 23 +- ...nerated_instances_create_instance_async.py | 1 - ...enerated_instances_create_instance_sync.py | 1 - ...enerated_instances_get_iam_policy_async.py | 55 + ...generated_instances_get_iam_policy_sync.py | 55 + ...enerated_instances_set_iam_policy_async.py | 55 + ...generated_instances_set_iam_policy_sync.py | 55 + ...ed_instances_test_iam_permissions_async.py | 56 + ...ted_instances_test_iam_permissions_sync.py | 56 + ...nerated_instances_update_instance_async.py | 60 + ...enerated_instances_update_instance_sync.py | 60 + .../run_v2_generated_jobs_create_job_async.py | 1 - .../run_v2_generated_jobs_create_job_sync.py | 1 - ...generated_services_create_service_async.py | 1 - ..._generated_services_create_service_sync.py | 1 - ...rated_source_upload_upload_source_async.py | 54 + ...erated_source_upload_upload_source_sync.py | 54 + ...d_worker_pools_create_worker_pool_async.py | 1 - ...ed_worker_pools_create_worker_pool_sync.py | 1 - .../snippet_metadata_google.cloud.run.v2.json | 1063 +- .../tests/unit/gapic/run_v2/test_builds.py | 25 +- .../unit/gapic/run_v2/test_executions.py | 44 +- .../tests/unit/gapic/run_v2/test_instances.py | 5798 +- .../tests/unit/gapic/run_v2/test_jobs.py | 128 +- .../tests/unit/gapic/run_v2/test_revisions.py | 47 +- .../tests/unit/gapic/run_v2/test_services.py | 153 +- .../unit/gapic/run_v2/test_source_upload.py | 3518 + .../tests/unit/gapic/run_v2/test_tasks.py | 32 +- .../unit/gapic/run_v2/test_worker_pools.py | 100 +- .../google/cloud/sqladmin/__init__.py | 38 + .../google/cloud/sqladmin_v1/__init__.py | 38 + .../cloud/sqladmin_v1/gapic_metadata.json | 70 + .../sql_backups_service/async_client.py | 2 + .../services/sql_backups_service/client.py | 17 + .../sql_instances_service/async_client.py | 398 + .../services/sql_instances_service/client.py | 409 + .../sql_instances_service/transports/base.py | 59 + .../sql_instances_service/transports/grpc.py | 118 + .../transports/grpc_asyncio.py | 140 + .../sql_ssl_certs_service/async_client.py | 313 + .../services/sql_ssl_certs_service/client.py | 313 + .../sql_ssl_certs_service/transports/base.py | 45 + .../sql_ssl_certs_service/transports/grpc.py | 99 + .../transports/grpc_asyncio.py | 114 + .../cloud/sqladmin_v1/types/__init__.py | 38 + .../sqladmin_v1/types/cloud_sql_instances.py | 583 + .../sqladmin_v1/types/cloud_sql_resources.py | 322 + .../sqladmin_v1/types/cloud_sql_ssl_certs.py | 136 + .../types/cloud_sql_workload_captures.py | 26 + .../google/cloud/sqladmin_v1beta4/__init__.py | 38 + .../sqladmin_v1beta4/gapic_metadata.json | 105 + .../sql_backups_service/async_client.py | 2 + .../services/sql_backups_service/client.py | 17 + .../sql_instances_service/async_client.py | 388 + .../services/sql_instances_service/client.py | 399 + .../sql_instances_service/transports/base.py | 59 + .../sql_instances_service/transports/grpc.py | 114 + .../transports/grpc_asyncio.py | 138 + .../sql_instances_service/transports/rest.py | 1124 +- .../transports/rest_base.py | 66 + .../sql_ssl_certs_service/async_client.py | 301 + .../services/sql_ssl_certs_service/client.py | 301 + .../sql_ssl_certs_service/transports/base.py | 45 + .../sql_ssl_certs_service/transports/grpc.py | 99 + .../transports/grpc_asyncio.py | 114 + .../sql_ssl_certs_service/transports/rest.py | 693 + .../transports/rest_base.py | 49 + .../cloud/sqladmin_v1beta4/types/__init__.py | 38 + .../cloud/sqladmin_v1beta4/types/cloud_sql.py | 437 + .../types/cloud_sql_resources.py | 598 + .../types/cloud_sql_workload_captures.py | 26 + .../snippet_metadata_google.cloud.sql.v1.json | 1885 +- ...pet_metadata_google.cloud.sql.v1beta4.json | 1855 +- ...ces_service_execute_sql_read_only_async.py | 59 + ...nces_service_execute_sql_read_only_sync.py | 59 + ...nces_service_reconcile_networking_async.py | 54 + ...ances_service_reconcile_networking_sync.py | 54 + ...rated_sql_instances_service_start_async.py | 54 + ...erated_sql_instances_service_start_sync.py | 54 + ...erated_sql_instances_service_stop_async.py | 54 + ...nerated_sql_instances_service_stop_sync.py | 54 + ...lete_customer_managed_certificate_async.py | 55 + ...elete_customer_managed_certificate_sync.py | 55 + ...ist_customer_managed_certificates_async.py | 54 + ...list_customer_managed_certificates_sync.py | 54 + ...date_customer_managed_certificate_async.py | 63 + ...pdate_customer_managed_certificate_sync.py | 63 + ...ces_service_execute_sql_read_only_async.py | 59 + ...nces_service_execute_sql_read_only_sync.py | 59 + ...nces_service_reconcile_networking_async.py | 54 + ...ances_service_reconcile_networking_sync.py | 54 + ...rated_sql_instances_service_start_async.py | 54 + ...erated_sql_instances_service_start_sync.py | 54 + ...erated_sql_instances_service_stop_async.py | 54 + ...nerated_sql_instances_service_stop_sync.py | 54 + ...lete_customer_managed_certificate_async.py | 55 + ...elete_customer_managed_certificate_sync.py | 55 + ...ist_customer_managed_certificates_async.py | 54 + ...list_customer_managed_certificates_sync.py | 54 + ...date_customer_managed_certificate_async.py | 65 + ...pdate_customer_managed_certificate_sync.py | 65 + .../sqladmin_v1/test_sql_backups_service.py | 71 +- .../sqladmin_v1/test_sql_instances_service.py | 3385 +- .../sqladmin_v1/test_sql_ssl_certs_service.py | 1041 + .../test_sql_backups_service.py | 131 +- .../test_sql_instances_service.py | 5192 +- .../test_sql_ssl_certs_service.py | 2943 +- .../google/cloud/vectorsearch/__init__.py | 10 + .../google/cloud/vectorsearch_v1/__init__.py | 10 + .../transports/base.py | 6 +- .../data_object_service/transports/base.py | 6 +- .../vector_search_service/transports/base.py | 6 +- .../cloud/vectorsearch_v1/types/__init__.py | 10 + .../types/data_object_search_service.py | 394 +- .../test_data_object_search_service.py | 30 +- .../test_data_object_service.py | 30 +- .../test_vector_search_service.py | 30 +- 871 files changed, 247470 insertions(+), 54905 deletions(-) create mode 100644 packages/google-ads-admanager/docs/admanager_v1/audience_segment_category_service.rst create mode 100644 packages/google-ads-admanager/docs/admanager_v1/change_event_service.rst create mode 100644 packages/google-ads-admanager/docs/admanager_v1/forecast_adjustment_service.rst create mode 100644 packages/google-ads-admanager/docs/admanager_v1/proposal_service.rst create mode 100644 packages/google-ads-admanager/docs/admanager_v1/traffic_forecast_segment_service.rst create mode 100644 packages/google-ads-admanager/docs/admanager_v1/yield_group_service.rst create mode 100644 packages/google-ads-admanager/docs/admanager_v1/yield_partner_service.rst create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/__init__.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/client.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/pagers.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/README.rst create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/__init__.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/base.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/rest.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/rest_base.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/__init__.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/client.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/pagers.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/README.rst create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/__init__.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/base.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/rest.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/rest_base.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/__init__.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/client.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/pagers.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/README.rst create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/__init__.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/base.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/rest.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/rest_base.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/proposal_service/__init__.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/proposal_service/client.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/proposal_service/pagers.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/proposal_service/transports/README.rst create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/proposal_service/transports/__init__.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/proposal_service/transports/base.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/proposal_service/transports/rest.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/proposal_service/transports/rest_base.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/traffic_forecast_segment_service/__init__.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/traffic_forecast_segment_service/client.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/traffic_forecast_segment_service/pagers.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/traffic_forecast_segment_service/transports/README.rst create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/traffic_forecast_segment_service/transports/__init__.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/traffic_forecast_segment_service/transports/base.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/traffic_forecast_segment_service/transports/rest.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/traffic_forecast_segment_service/transports/rest_base.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/yield_group_service/__init__.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/yield_group_service/client.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/yield_group_service/pagers.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/yield_group_service/transports/README.rst create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/yield_group_service/transports/__init__.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/yield_group_service/transports/base.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/yield_group_service/transports/rest.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/yield_group_service/transports/rest_base.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/yield_partner_service/__init__.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/yield_partner_service/client.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/yield_partner_service/pagers.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/yield_partner_service/transports/README.rst create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/yield_partner_service/transports/__init__.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/yield_partner_service/transports/base.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/yield_partner_service/transports/rest.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/services/yield_partner_service/transports/rest_base.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/ad_category_messages.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/allocation_delivery_profile_messages.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/audience_segment_category_messages.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/audience_segment_category_service.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/change_event_enums.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/change_event_messages.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/change_event_service.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/dayparting_time_zone_enum.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/forecast_adjustment_enums.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/forecast_adjustment_messages.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/forecast_adjustment_service.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/inventory_url_messages.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/proposal_enums.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/proposal_environment_type_enum.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/proposal_messages.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/proposal_negotiation_status_enum.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/proposal_service.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/supply_path_type_enum.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/traffic_forecast_segment_messages.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/traffic_forecast_segment_service.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/yield_enums.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/yield_environment_type_enum.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/yield_format_enum.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/yield_group_messages.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/yield_group_service.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/yield_partner_messages.py create mode 100644 packages/google-ads-admanager/google/ads/admanager_v1/types/yield_partner_service.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_audience_segment_category_service_get_audience_segment_category_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_audience_segment_category_service_list_audience_segment_categories_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_change_event_service_get_change_event_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_change_event_service_list_change_events_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_creative_service_batch_create_creatives_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_creative_service_batch_update_creatives_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_creative_service_create_creative_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_creative_service_update_creative_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_forecast_adjustment_service_batch_activate_forecast_adjustments_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_forecast_adjustment_service_batch_create_forecast_adjustments_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_forecast_adjustment_service_batch_deactivate_forecast_adjustments_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_forecast_adjustment_service_batch_update_forecast_adjustments_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_forecast_adjustment_service_calculate_daily_ad_opportunity_counts_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_forecast_adjustment_service_create_forecast_adjustment_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_forecast_adjustment_service_get_forecast_adjustment_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_forecast_adjustment_service_list_forecast_adjustments_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_forecast_adjustment_service_update_forecast_adjustment_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_line_item_creative_association_service_batch_activate_line_item_creative_associations_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_line_item_creative_association_service_batch_create_line_item_creative_associations_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_line_item_creative_association_service_batch_deactivate_line_item_creative_associations_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_line_item_creative_association_service_batch_delete_line_item_creative_associations_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_line_item_creative_association_service_batch_update_line_item_creative_associations_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_line_item_creative_association_service_create_line_item_creative_association_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_line_item_creative_association_service_preview_line_item_creative_association_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_line_item_creative_association_service_update_line_item_creative_association_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_batch_archive_proposals_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_batch_create_proposals_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_batch_discard_draft_proposals_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_batch_pause_proposals_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_batch_push_to_order_proposals_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_batch_redraft_proposals_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_batch_request_buyer_accept_proposals_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_batch_request_buyer_review_proposals_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_batch_reserve_proposals_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_batch_resume_proposals_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_batch_terminate_proposals_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_batch_unarchive_proposals_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_batch_update_proposals_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_create_proposal_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_fetch_marketplace_comments_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_get_proposal_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_list_proposals_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_proposal_service_update_proposal_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_traffic_forecast_segment_service_batch_create_traffic_forecast_segments_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_traffic_forecast_segment_service_batch_update_traffic_forecast_segments_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_traffic_forecast_segment_service_create_traffic_forecast_segment_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_traffic_forecast_segment_service_get_traffic_forecast_segment_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_traffic_forecast_segment_service_list_traffic_forecast_segments_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_traffic_forecast_segment_service_update_traffic_forecast_segment_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_yield_group_service_batch_activate_yield_groups_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_yield_group_service_batch_archive_yield_groups_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_yield_group_service_batch_create_yield_groups_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_yield_group_service_batch_deactivate_yield_groups_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_yield_group_service_batch_update_yield_groups_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_yield_group_service_create_yield_group_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_yield_group_service_get_yield_group_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_yield_group_service_list_yield_groups_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_yield_group_service_update_yield_group_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_yield_partner_service_get_yield_partner_sync.py create mode 100644 packages/google-ads-admanager/samples/generated_samples/admanager_v1_generated_yield_partner_service_list_yield_partners_sync.py create mode 100644 packages/google-ads-admanager/tests/unit/gapic/admanager_v1/test_audience_segment_category_service.py create mode 100644 packages/google-ads-admanager/tests/unit/gapic/admanager_v1/test_change_event_service.py create mode 100644 packages/google-ads-admanager/tests/unit/gapic/admanager_v1/test_forecast_adjustment_service.py create mode 100644 packages/google-ads-admanager/tests/unit/gapic/admanager_v1/test_proposal_service.py create mode 100644 packages/google-ads-admanager/tests/unit/gapic/admanager_v1/test_traffic_forecast_segment_service.py create mode 100644 packages/google-ads-admanager/tests/unit/gapic/admanager_v1/test_yield_group_service.py create mode 100644 packages/google-ads-admanager/tests/unit/gapic/admanager_v1/test_yield_partner_service.py create mode 100644 packages/google-ads-datamanager/docs/datamanager_v1/reporting_service.rst create mode 100644 packages/google-ads-datamanager/google/ads/datamanager_v1/services/reporting_service/__init__.py create mode 100644 packages/google-ads-datamanager/google/ads/datamanager_v1/services/reporting_service/async_client.py create mode 100644 packages/google-ads-datamanager/google/ads/datamanager_v1/services/reporting_service/client.py create mode 100644 packages/google-ads-datamanager/google/ads/datamanager_v1/services/reporting_service/pagers.py create mode 100644 packages/google-ads-datamanager/google/ads/datamanager_v1/services/reporting_service/transports/README.rst create mode 100644 packages/google-ads-datamanager/google/ads/datamanager_v1/services/reporting_service/transports/__init__.py create mode 100644 packages/google-ads-datamanager/google/ads/datamanager_v1/services/reporting_service/transports/base.py create mode 100644 packages/google-ads-datamanager/google/ads/datamanager_v1/services/reporting_service/transports/grpc.py create mode 100644 packages/google-ads-datamanager/google/ads/datamanager_v1/services/reporting_service/transports/grpc_asyncio.py create mode 100644 packages/google-ads-datamanager/google/ads/datamanager_v1/services/reporting_service/transports/rest.py create mode 100644 packages/google-ads-datamanager/google/ads/datamanager_v1/services/reporting_service/transports/rest_base.py create mode 100644 packages/google-ads-datamanager/google/ads/datamanager_v1/types/call_info.py create mode 100644 packages/google-ads-datamanager/google/ads/datamanager_v1/types/partner_match_report_entry.py create mode 100644 packages/google-ads-datamanager/google/ads/datamanager_v1/types/reporting_service.py create mode 100644 packages/google-ads-datamanager/samples/generated_samples/datamanager_v1_generated_reporting_service_retrieve_partner_match_report_async.py create mode 100644 packages/google-ads-datamanager/samples/generated_samples/datamanager_v1_generated_reporting_service_retrieve_partner_match_report_sync.py create mode 100644 packages/google-ads-datamanager/tests/unit/gapic/datamanager_v1/test_reporting_service.py create mode 100644 packages/google-cloud-compute/samples/generated_samples/compute_v1_generated_region_ssl_policies_get_iam_policy_sync.py create mode 100644 packages/google-cloud-compute/samples/generated_samples/compute_v1_generated_region_ssl_policies_set_iam_policy_sync.py create mode 100644 packages/google-cloud-compute/samples/generated_samples/compute_v1_generated_region_ssl_policies_test_iam_permissions_sync.py create mode 100644 packages/google-cloud-compute/samples/generated_samples/compute_v1_generated_ssl_policies_get_iam_policy_sync.py create mode 100644 packages/google-cloud-compute/samples/generated_samples/compute_v1_generated_ssl_policies_set_iam_policy_sync.py create mode 100644 packages/google-cloud-compute/samples/generated_samples/compute_v1_generated_ssl_policies_test_iam_permissions_sync.py create mode 100644 packages/google-cloud-hypercomputecluster/samples/generated_samples/hypercomputecluster_v1beta_generated_hypercompute_cluster_list_nodes_async.py create mode 100644 packages/google-cloud-hypercomputecluster/samples/generated_samples/hypercomputecluster_v1beta_generated_hypercompute_cluster_list_nodes_sync.py create mode 100644 packages/google-cloud-oracledatabase/google/cloud/oracledatabase_v1/types/database_connection.py create mode 100644 packages/google-cloud-oracledatabase/google/cloud/oracledatabase_v1/types/db_system_compute_performance.py create mode 100644 packages/google-cloud-oracledatabase/google/cloud/oracledatabase_v1/types/execute_sql.py create mode 100644 packages/google-cloud-oracledatabase/google/cloud/oracledatabase_v1/types/flex_component.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_create_database_connection_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_create_database_connection_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_delete_database_connection_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_delete_database_connection_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_disable_cloud_vm_cluster_identity_connector_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_disable_cloud_vm_cluster_identity_connector_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_disable_exadb_vm_cluster_identity_connector_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_disable_exadb_vm_cluster_identity_connector_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_enable_cloud_vm_cluster_identity_connector_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_enable_cloud_vm_cluster_identity_connector_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_enable_exadb_vm_cluster_identity_connector_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_enable_exadb_vm_cluster_identity_connector_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_execute_sql_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_execute_sql_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_get_database_connection_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_get_database_connection_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_list_database_connections_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_list_database_connections_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_list_db_system_compute_performances_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_list_db_system_compute_performances_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_list_flex_components_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_list_flex_components_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_test_database_connection_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_test_database_connection_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_cloud_exadata_infrastructure_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_cloud_exadata_infrastructure_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_cloud_vm_cluster_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_cloud_vm_cluster_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_database_connection_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_database_connection_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_db_system_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_db_system_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_exascale_db_storage_vault_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_exascale_db_storage_vault_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_goldengate_connection_assignment_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_goldengate_connection_assignment_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_goldengate_connection_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_goldengate_connection_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_goldengate_deployment_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_goldengate_deployment_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_odb_network_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_odb_network_sync.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_odb_subnet_async.py create mode 100644 packages/google-cloud-oracledatabase/samples/generated_samples/oracledatabase_v1_generated_oracle_database_update_odb_subnet_sync.py create mode 100644 packages/google-cloud-run/docs/run_v2/source_upload.rst create mode 100644 packages/google-cloud-run/google/cloud/run_v2/services/source_upload/__init__.py create mode 100644 packages/google-cloud-run/google/cloud/run_v2/services/source_upload/async_client.py create mode 100644 packages/google-cloud-run/google/cloud/run_v2/services/source_upload/client.py create mode 100644 packages/google-cloud-run/google/cloud/run_v2/services/source_upload/transports/README.rst create mode 100644 packages/google-cloud-run/google/cloud/run_v2/services/source_upload/transports/__init__.py create mode 100644 packages/google-cloud-run/google/cloud/run_v2/services/source_upload/transports/base.py create mode 100644 packages/google-cloud-run/google/cloud/run_v2/services/source_upload/transports/grpc.py create mode 100644 packages/google-cloud-run/google/cloud/run_v2/services/source_upload/transports/grpc_asyncio.py create mode 100644 packages/google-cloud-run/google/cloud/run_v2/services/source_upload/transports/rest.py create mode 100644 packages/google-cloud-run/google/cloud/run_v2/services/source_upload/transports/rest_base.py create mode 100644 packages/google-cloud-run/google/cloud/run_v2/types/sandbox.py create mode 100644 packages/google-cloud-run/google/cloud/run_v2/types/source_upload.py create mode 100644 packages/google-cloud-run/samples/generated_samples/run_v2_generated_instances_get_iam_policy_async.py create mode 100644 packages/google-cloud-run/samples/generated_samples/run_v2_generated_instances_get_iam_policy_sync.py create mode 100644 packages/google-cloud-run/samples/generated_samples/run_v2_generated_instances_set_iam_policy_async.py create mode 100644 packages/google-cloud-run/samples/generated_samples/run_v2_generated_instances_set_iam_policy_sync.py create mode 100644 packages/google-cloud-run/samples/generated_samples/run_v2_generated_instances_test_iam_permissions_async.py create mode 100644 packages/google-cloud-run/samples/generated_samples/run_v2_generated_instances_test_iam_permissions_sync.py create mode 100644 packages/google-cloud-run/samples/generated_samples/run_v2_generated_instances_update_instance_async.py create mode 100644 packages/google-cloud-run/samples/generated_samples/run_v2_generated_instances_update_instance_sync.py create mode 100644 packages/google-cloud-run/samples/generated_samples/run_v2_generated_source_upload_upload_source_async.py create mode 100644 packages/google-cloud-run/samples/generated_samples/run_v2_generated_source_upload_upload_source_sync.py create mode 100644 packages/google-cloud-run/tests/unit/gapic/run_v2/test_source_upload.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1_generated_sql_instances_service_execute_sql_read_only_async.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1_generated_sql_instances_service_execute_sql_read_only_sync.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1_generated_sql_instances_service_reconcile_networking_async.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1_generated_sql_instances_service_reconcile_networking_sync.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1_generated_sql_instances_service_start_async.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1_generated_sql_instances_service_start_sync.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1_generated_sql_instances_service_stop_async.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1_generated_sql_instances_service_stop_sync.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1_generated_sql_ssl_certs_service_delete_customer_managed_certificate_async.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1_generated_sql_ssl_certs_service_delete_customer_managed_certificate_sync.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1_generated_sql_ssl_certs_service_list_customer_managed_certificates_async.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1_generated_sql_ssl_certs_service_list_customer_managed_certificates_sync.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1_generated_sql_ssl_certs_service_update_customer_managed_certificate_async.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1_generated_sql_ssl_certs_service_update_customer_managed_certificate_sync.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1beta4_generated_sql_instances_service_execute_sql_read_only_async.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1beta4_generated_sql_instances_service_execute_sql_read_only_sync.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1beta4_generated_sql_instances_service_reconcile_networking_async.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1beta4_generated_sql_instances_service_reconcile_networking_sync.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1beta4_generated_sql_instances_service_start_async.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1beta4_generated_sql_instances_service_start_sync.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1beta4_generated_sql_instances_service_stop_async.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1beta4_generated_sql_instances_service_stop_sync.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1beta4_generated_sql_ssl_certs_service_delete_customer_managed_certificate_async.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1beta4_generated_sql_ssl_certs_service_delete_customer_managed_certificate_sync.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1beta4_generated_sql_ssl_certs_service_list_customer_managed_certificates_async.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1beta4_generated_sql_ssl_certs_service_list_customer_managed_certificates_sync.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1beta4_generated_sql_ssl_certs_service_update_customer_managed_certificate_async.py create mode 100644 packages/google-cloud-sql/samples/generated_samples/sqladmin_v1beta4_generated_sql_ssl_certs_service_update_customer_managed_certificate_sync.py diff --git a/librarian.yaml b/librarian.yaml index c6ff75fe8731..3e2f45eaaf9b 100644 --- a/librarian.yaml +++ b/librarian.yaml @@ -16,8 +16,8 @@ version: v0.52.0 repo: googleapis/google-cloud-python sources: googleapis: - commit: 856bc831c52e81258768bba07eea278b78681924 - sha256: 56ff0144615a042ae3f9e367f37f5e862a1afa0e5f6ce710e62fb18038a793ca + commit: a74d0502444d12c07abc7ed95f90ebb52950e918 + sha256: 9e619a21b96e142c3d017d9a492463419464677d80026a6bea1809d8217d6ec3 tools: pip: - name: black diff --git a/packages/google-ads-admanager/docs/admanager_v1/audience_segment_category_service.rst b/packages/google-ads-admanager/docs/admanager_v1/audience_segment_category_service.rst new file mode 100644 index 000000000000..8bade1ecfca1 --- /dev/null +++ b/packages/google-ads-admanager/docs/admanager_v1/audience_segment_category_service.rst @@ -0,0 +1,10 @@ +AudienceSegmentCategoryService +------------------------------------------------ + +.. automodule:: google.ads.admanager_v1.services.audience_segment_category_service + :members: + :inherited-members: + +.. automodule:: google.ads.admanager_v1.services.audience_segment_category_service.pagers + :members: + :inherited-members: diff --git a/packages/google-ads-admanager/docs/admanager_v1/change_event_service.rst b/packages/google-ads-admanager/docs/admanager_v1/change_event_service.rst new file mode 100644 index 000000000000..676f81000e4f --- /dev/null +++ b/packages/google-ads-admanager/docs/admanager_v1/change_event_service.rst @@ -0,0 +1,10 @@ +ChangeEventService +------------------------------------ + +.. automodule:: google.ads.admanager_v1.services.change_event_service + :members: + :inherited-members: + +.. automodule:: google.ads.admanager_v1.services.change_event_service.pagers + :members: + :inherited-members: diff --git a/packages/google-ads-admanager/docs/admanager_v1/forecast_adjustment_service.rst b/packages/google-ads-admanager/docs/admanager_v1/forecast_adjustment_service.rst new file mode 100644 index 000000000000..a11ff2a98a76 --- /dev/null +++ b/packages/google-ads-admanager/docs/admanager_v1/forecast_adjustment_service.rst @@ -0,0 +1,10 @@ +ForecastAdjustmentService +------------------------------------------- + +.. automodule:: google.ads.admanager_v1.services.forecast_adjustment_service + :members: + :inherited-members: + +.. automodule:: google.ads.admanager_v1.services.forecast_adjustment_service.pagers + :members: + :inherited-members: diff --git a/packages/google-ads-admanager/docs/admanager_v1/proposal_service.rst b/packages/google-ads-admanager/docs/admanager_v1/proposal_service.rst new file mode 100644 index 000000000000..d257b093cfa9 --- /dev/null +++ b/packages/google-ads-admanager/docs/admanager_v1/proposal_service.rst @@ -0,0 +1,10 @@ +ProposalService +--------------------------------- + +.. automodule:: google.ads.admanager_v1.services.proposal_service + :members: + :inherited-members: + +.. automodule:: google.ads.admanager_v1.services.proposal_service.pagers + :members: + :inherited-members: diff --git a/packages/google-ads-admanager/docs/admanager_v1/services_.rst b/packages/google-ads-admanager/docs/admanager_v1/services_.rst index 298f236de4ac..79be8cfe4340 100644 --- a/packages/google-ads-admanager/docs/admanager_v1/services_.rst +++ b/packages/google-ads-admanager/docs/admanager_v1/services_.rst @@ -9,12 +9,14 @@ Services for Google Ads Admanager v1 API ad_spot_service ad_unit_service application_service + audience_segment_category_service audience_segment_service bandwidth_group_service break_template_service browser_language_service browser_service cdn_config_service + change_event_service child_publisher_service cms_metadata_key_service cms_metadata_value_service @@ -37,6 +39,7 @@ Services for Google Ads Admanager v1 API device_category_service device_manufacturer_service entity_signals_mapping_service + forecast_adjustment_service forecast_service geo_target_service label_service @@ -59,6 +62,7 @@ Services for Google Ads Admanager v1 API private_auction_deal_service private_auction_service programmatic_buyer_service + proposal_service report_service rich_media_ads_company_service role_service @@ -69,5 +73,8 @@ Services for Google Ads Admanager v1 API taxonomy_category_service team_service third_party_company_service + traffic_forecast_segment_service user_service viewability_provider_service + yield_group_service + yield_partner_service diff --git a/packages/google-ads-admanager/docs/admanager_v1/traffic_forecast_segment_service.rst b/packages/google-ads-admanager/docs/admanager_v1/traffic_forecast_segment_service.rst new file mode 100644 index 000000000000..683f85dc0241 --- /dev/null +++ b/packages/google-ads-admanager/docs/admanager_v1/traffic_forecast_segment_service.rst @@ -0,0 +1,10 @@ +TrafficForecastSegmentService +----------------------------------------------- + +.. automodule:: google.ads.admanager_v1.services.traffic_forecast_segment_service + :members: + :inherited-members: + +.. automodule:: google.ads.admanager_v1.services.traffic_forecast_segment_service.pagers + :members: + :inherited-members: diff --git a/packages/google-ads-admanager/docs/admanager_v1/yield_group_service.rst b/packages/google-ads-admanager/docs/admanager_v1/yield_group_service.rst new file mode 100644 index 000000000000..f47c36340cca --- /dev/null +++ b/packages/google-ads-admanager/docs/admanager_v1/yield_group_service.rst @@ -0,0 +1,10 @@ +YieldGroupService +----------------------------------- + +.. automodule:: google.ads.admanager_v1.services.yield_group_service + :members: + :inherited-members: + +.. automodule:: google.ads.admanager_v1.services.yield_group_service.pagers + :members: + :inherited-members: diff --git a/packages/google-ads-admanager/docs/admanager_v1/yield_partner_service.rst b/packages/google-ads-admanager/docs/admanager_v1/yield_partner_service.rst new file mode 100644 index 000000000000..c860953a5f45 --- /dev/null +++ b/packages/google-ads-admanager/docs/admanager_v1/yield_partner_service.rst @@ -0,0 +1,10 @@ +YieldPartnerService +------------------------------------- + +.. automodule:: google.ads.admanager_v1.services.yield_partner_service + :members: + :inherited-members: + +.. automodule:: google.ads.admanager_v1.services.yield_partner_service.pagers + :members: + :inherited-members: diff --git a/packages/google-ads-admanager/google/ads/admanager/__init__.py b/packages/google-ads-admanager/google/ads/admanager/__init__.py index 8b8d6c1aa48a..8e1069c5cc73 100644 --- a/packages/google-ads-admanager/google/ads/admanager/__init__.py +++ b/packages/google-ads-admanager/google/ads/admanager/__init__.py @@ -30,6 +30,9 @@ from google.ads.admanager_v1.services.application_service.client import ( ApplicationServiceClient, ) +from google.ads.admanager_v1.services.audience_segment_category_service.client import ( + AudienceSegmentCategoryServiceClient, +) from google.ads.admanager_v1.services.audience_segment_service.client import ( AudienceSegmentServiceClient, ) @@ -46,6 +49,9 @@ from google.ads.admanager_v1.services.cdn_config_service.client import ( CdnConfigServiceClient, ) +from google.ads.admanager_v1.services.change_event_service.client import ( + ChangeEventServiceClient, +) from google.ads.admanager_v1.services.child_publisher_service.client import ( ChildPublisherServiceClient, ) @@ -106,6 +112,9 @@ from google.ads.admanager_v1.services.entity_signals_mapping_service.client import ( EntitySignalsMappingServiceClient, ) +from google.ads.admanager_v1.services.forecast_adjustment_service.client import ( + ForecastAdjustmentServiceClient, +) from google.ads.admanager_v1.services.forecast_service.client import ( ForecastServiceClient, ) @@ -164,6 +173,9 @@ from google.ads.admanager_v1.services.programmatic_buyer_service.client import ( ProgrammaticBuyerServiceClient, ) +from google.ads.admanager_v1.services.proposal_service.client import ( + ProposalServiceClient, +) from google.ads.admanager_v1.services.report_service.client import ReportServiceClient from google.ads.admanager_v1.services.rich_media_ads_company_service.client import ( RichMediaAdsCompanyServiceClient, @@ -184,10 +196,19 @@ from google.ads.admanager_v1.services.third_party_company_service.client import ( ThirdPartyCompanyServiceClient, ) +from google.ads.admanager_v1.services.traffic_forecast_segment_service.client import ( + TrafficForecastSegmentServiceClient, +) from google.ads.admanager_v1.services.user_service.client import UserServiceClient from google.ads.admanager_v1.services.viewability_provider_service.client import ( ViewabilityProviderServiceClient, ) +from google.ads.admanager_v1.services.yield_group_service.client import ( + YieldGroupServiceClient, +) +from google.ads.admanager_v1.services.yield_partner_service.client import ( + YieldPartnerServiceClient, +) from google.ads.admanager_v1.types.ad_break_messages import AdBreak from google.ads.admanager_v1.types.ad_break_optimization_type_enum import ( AdBreakOptimizationTypeEnum, @@ -200,6 +221,7 @@ ListAdBreaksResponse, UpdateAdBreakRequest, ) +from google.ads.admanager_v1.types.ad_category_messages import AdCategory from google.ads.admanager_v1.types.ad_review_center_ad_enums import ( AdReviewCenterAdStatusEnum, ArcCreativeFormatEnum, @@ -298,6 +320,9 @@ UpdateAdUnitRequest, ) from google.ads.admanager_v1.types.admanager_error import AdManagerError +from google.ads.admanager_v1.types.allocation_delivery_profile_messages import ( + AllocationDeliveryProfile, +) from google.ads.admanager_v1.types.application_enums import ( ApplicationApprovalStatusEnum, ApplicationPlatformEnum, @@ -323,6 +348,14 @@ from google.ads.admanager_v1.types.applied_label import AppliedLabel from google.ads.admanager_v1.types.asset_enums import AssetImageDensityEnum from google.ads.admanager_v1.types.asset_messages import Asset +from google.ads.admanager_v1.types.audience_segment_category_messages import ( + AudienceSegmentCategory, +) +from google.ads.admanager_v1.types.audience_segment_category_service import ( + GetAudienceSegmentCategoryRequest, + ListAudienceSegmentCategoriesRequest, + ListAudienceSegmentCategoriesResponse, +) from google.ads.admanager_v1.types.audience_segment_enums import ( AudienceSegmentApprovalStatusEnum, AudienceSegmentLicenseTypeEnum, @@ -415,6 +448,16 @@ from google.ads.admanager_v1.types.cdn_security_policy_origin_forwarding_enum import ( CdnSecurityPolicyOriginForwardingEnum, ) +from google.ads.admanager_v1.types.change_event_enums import ( + ChangeEventResourceTypeEnum, + OperationTypeEnum, +) +from google.ads.admanager_v1.types.change_event_messages import ChangeEvent +from google.ads.admanager_v1.types.change_event_service import ( + GetChangeEventRequest, + ListChangeEventsRequest, + ListChangeEventsResponse, +) from google.ads.admanager_v1.types.child_content_eligibility_enum import ( ChildContentEligibilityEnum, ) @@ -570,11 +613,17 @@ from google.ads.admanager_v1.types.creative_service import ( BatchActivateCreativesRequest, BatchActivateCreativesResponse, + BatchCreateCreativesRequest, + BatchCreateCreativesResponse, BatchDeactivateCreativesRequest, BatchDeactivateCreativesResponse, + BatchUpdateCreativesRequest, + BatchUpdateCreativesResponse, + CreateCreativeRequest, GetCreativeRequest, ListCreativesRequest, ListCreativesResponse, + UpdateCreativeRequest, ) from google.ads.admanager_v1.types.creative_set_messages import CreativeSet from google.ads.admanager_v1.types.creative_set_service import ( @@ -773,6 +822,9 @@ from google.ads.admanager_v1.types.dai_session_messages import DaiSession from google.ads.admanager_v1.types.dai_session_service import GetDaiSessionRequest from google.ads.admanager_v1.types.date_range import DateRange +from google.ads.admanager_v1.types.dayparting_time_zone_enum import ( + DaypartingTimeZoneEnum, +) from google.ads.admanager_v1.types.deal_buyer_permission_type_enum import ( DealBuyerPermissionTypeEnum, ) @@ -827,6 +879,33 @@ ExchangeSyndicationProductEnum, ) from google.ads.admanager_v1.types.exclusion_scope_enum import ExclusionScopeEnum +from google.ads.admanager_v1.types.forecast_adjustment_enums import ( + ForecastAdjustmentStatusEnum, + ForecastAdjustmentVolumeTypeEnum, +) +from google.ads.admanager_v1.types.forecast_adjustment_messages import ( + DailyVolumeSettings, + ForecastAdjustment, + HistoricalBasisVolumeSettings, + TotalVolumeSettings, +) +from google.ads.admanager_v1.types.forecast_adjustment_service import ( + BatchActivateForecastAdjustmentsRequest, + BatchActivateForecastAdjustmentsResponse, + BatchCreateForecastAdjustmentsRequest, + BatchCreateForecastAdjustmentsResponse, + BatchDeactivateForecastAdjustmentsRequest, + BatchDeactivateForecastAdjustmentsResponse, + BatchUpdateForecastAdjustmentsRequest, + BatchUpdateForecastAdjustmentsResponse, + CalculateDailyAdOpportunityCountsRequest, + CalculateDailyAdOpportunityCountsResponse, + CreateForecastAdjustmentRequest, + GetForecastAdjustmentRequest, + ListForecastAdjustmentsRequest, + ListForecastAdjustmentsResponse, + UpdateForecastAdjustmentRequest, +) from google.ads.admanager_v1.types.forecast_messages import ( AlternativeUnitTypeForecast, AvailabilityForecast, @@ -840,6 +919,8 @@ ForecastBreakdownEntry, ForecastBreakdownOptions, ForecastBreakdownTarget, + ForecastingLineItem, + ForecastingLineItemList, GrpDemographicBreakdown, LineItemDeliveryForecast, TargetingCriteriaBreakdown, @@ -871,6 +952,7 @@ from google.ads.admanager_v1.types.grp_provider_enum import GrpProviderEnum from google.ads.admanager_v1.types.grp_settings import GrpSettings from google.ads.admanager_v1.types.grp_target_gender_enum import GrpTargetGenderEnum +from google.ads.admanager_v1.types.inventory_url_messages import InventoryUrl from google.ads.admanager_v1.types.label_enums import LabelTypeEnum from google.ads.admanager_v1.types.label_messages import Label from google.ads.admanager_v1.types.label_service import ( @@ -899,9 +981,22 @@ LineItemCreativeAssociationStats, ) from google.ads.admanager_v1.types.line_item_creative_association_service import ( + BatchActivateLineItemCreativeAssociationsRequest, + BatchActivateLineItemCreativeAssociationsResponse, + BatchCreateLineItemCreativeAssociationsRequest, + BatchCreateLineItemCreativeAssociationsResponse, + BatchDeactivateLineItemCreativeAssociationsRequest, + BatchDeactivateLineItemCreativeAssociationsResponse, + BatchDeleteLineItemCreativeAssociationsRequest, + BatchUpdateLineItemCreativeAssociationsRequest, + BatchUpdateLineItemCreativeAssociationsResponse, + CreateLineItemCreativeAssociationRequest, GetLineItemCreativeAssociationRequest, ListLineItemCreativeAssociationsRequest, ListLineItemCreativeAssociationsResponse, + PreviewLineItemCreativeAssociationRequest, + PreviewLineItemCreativeAssociationResponse, + UpdateLineItemCreativeAssociationRequest, ) from google.ads.admanager_v1.types.line_item_deal_info import LineItemDealInfo from google.ads.admanager_v1.types.line_item_delivery_forecast_source_enum import ( @@ -1192,6 +1287,58 @@ ListProgrammaticBuyersRequest, ListProgrammaticBuyersResponse, ) +from google.ads.admanager_v1.types.proposal_enums import ( + BuyerRfpTypeEnum, + ProposalCompanyAssociationTypeEnum, +) +from google.ads.admanager_v1.types.proposal_environment_type_enum import ( + ProposalEnvironmentTypeEnum, +) +from google.ads.admanager_v1.types.proposal_messages import ( + BuyerRfp, + MarketplaceComment, + Proposal, + ProposalCompanyAssociation, + ProposalMarketplaceInfo, +) +from google.ads.admanager_v1.types.proposal_negotiation_status_enum import ( + ProposalNegotiationStatusEnum, +) +from google.ads.admanager_v1.types.proposal_service import ( + BatchArchiveProposalsRequest, + BatchArchiveProposalsResponse, + BatchCreateProposalsRequest, + BatchCreateProposalsResponse, + BatchDiscardDraftProposalsRequest, + BatchDiscardDraftProposalsResponse, + BatchPauseProposalsRequest, + BatchPauseProposalsResponse, + BatchPushToOrderProposalsRequest, + BatchPushToOrderProposalsResponse, + BatchRedraftProposalsRequest, + BatchRedraftProposalsResponse, + BatchRequestBuyerAcceptProposalsRequest, + BatchRequestBuyerAcceptProposalsResponse, + BatchRequestBuyerReviewProposalsRequest, + BatchRequestBuyerReviewProposalsResponse, + BatchReserveProposalsRequest, + BatchReserveProposalsResponse, + BatchResumeProposalsRequest, + BatchResumeProposalsResponse, + BatchTerminateProposalsRequest, + BatchTerminateProposalsResponse, + BatchUnarchiveProposalsRequest, + BatchUnarchiveProposalsResponse, + BatchUpdateProposalsRequest, + BatchUpdateProposalsResponse, + CreateProposalRequest, + FetchMarketplaceCommentsRequest, + FetchMarketplaceCommentsResponse, + GetProposalRequest, + ListProposalsRequest, + ListProposalsResponse, + UpdateProposalRequest, +) from google.ads.admanager_v1.types.reach_partner_enum import ReachPartnerEnum from google.ads.admanager_v1.types.report_definition import ReportDefinition from google.ads.admanager_v1.types.report_delivery import ScheduleOptions @@ -1288,6 +1435,7 @@ ListSuggestedAdUnitsRequest, ListSuggestedAdUnitsResponse, ) +from google.ads.admanager_v1.types.supply_path_type_enum import SupplyPathTypeEnum from google.ads.admanager_v1.types.target_platform_enum import TargetPlatformEnum from google.ads.admanager_v1.types.targeted_video_bumper_type_enum import ( TargetedVideoBumperTypeEnum, @@ -1298,21 +1446,29 @@ BandwidthTargeting, BrowserLanguageTargeting, BrowserTargeting, + BuyerUserListTargeting, CmsMetadataTargeting, ContentTargeting, + ContextualTargeting, CustomTargeting, CustomTargetingClause, CustomTargetingLiteral, DataSegmentTargeting, + DateTimeRangeTargeting, + DayPart, + DayPartTargeting, DeviceCapabilityTargeting, DeviceCategoryTargeting, DeviceManufacturerTargeting, FirstPartyMobileApplicationTargeting, GeoTargeting, + InventorySizeTargeting, InventoryTargeting, + InventoryUrlTargeting, MobileApplicationTargeting, MobileCarrierTargeting, OperatingSystemTargeting, + PublisherProvidedSignalsTargeting, RequestFormatTargeting, RequestPlatformTargeting, Targeting, @@ -1383,6 +1539,20 @@ ThirdPartyMeasurementSettings, ) from google.ads.admanager_v1.types.time_unit_enum import TimeUnitEnum +from google.ads.admanager_v1.types.traffic_forecast_segment_messages import ( + TrafficForecastSegment, +) +from google.ads.admanager_v1.types.traffic_forecast_segment_service import ( + BatchCreateTrafficForecastSegmentsRequest, + BatchCreateTrafficForecastSegmentsResponse, + BatchUpdateTrafficForecastSegmentsRequest, + BatchUpdateTrafficForecastSegmentsResponse, + CreateTrafficForecastSegmentRequest, + GetTrafficForecastSegmentRequest, + ListTrafficForecastSegmentsRequest, + ListTrafficForecastSegmentsResponse, + UpdateTrafficForecastSegmentRequest, +) from google.ads.admanager_v1.types.user_messages import User from google.ads.admanager_v1.types.user_service import ( BatchActivateUsersRequest, @@ -1423,6 +1593,43 @@ UpdateViewabilityProviderRequest, ) from google.ads.admanager_v1.types.web_property import WebProperty +from google.ads.admanager_v1.types.yield_enums import ( + YieldEntityStatusEnum, + YieldIntegrationTypeEnum, + YieldPartnerSettingStatusEnum, + YieldPlatformEnum, +) +from google.ads.admanager_v1.types.yield_environment_type_enum import ( + YieldEnvironmentTypeEnum, +) +from google.ads.admanager_v1.types.yield_format_enum import YieldFormatEnum +from google.ads.admanager_v1.types.yield_group_messages import YieldAdSource, YieldGroup +from google.ads.admanager_v1.types.yield_group_service import ( + BatchActivateYieldGroupsRequest, + BatchActivateYieldGroupsResponse, + BatchArchiveYieldGroupsRequest, + BatchArchiveYieldGroupsResponse, + BatchCreateYieldGroupsRequest, + BatchCreateYieldGroupsResponse, + BatchDeactivateYieldGroupsRequest, + BatchDeactivateYieldGroupsResponse, + BatchUpdateYieldGroupsRequest, + BatchUpdateYieldGroupsResponse, + CreateYieldGroupRequest, + GetYieldGroupRequest, + ListYieldGroupsRequest, + ListYieldGroupsResponse, + UpdateYieldGroupRequest, +) +from google.ads.admanager_v1.types.yield_partner_messages import ( + YieldPartner, + YieldPartnerSettings, +) +from google.ads.admanager_v1.types.yield_partner_service import ( + GetYieldPartnerRequest, + ListYieldPartnersRequest, + ListYieldPartnersResponse, +) __all__ = ( "AdBreakServiceClient", @@ -1431,12 +1638,14 @@ "AdSpotServiceClient", "AdUnitServiceClient", "ApplicationServiceClient", + "AudienceSegmentCategoryServiceClient", "AudienceSegmentServiceClient", "BandwidthGroupServiceClient", "BreakTemplateServiceClient", "BrowserLanguageServiceClient", "BrowserServiceClient", "CdnConfigServiceClient", + "ChangeEventServiceClient", "ChildPublisherServiceClient", "CmsMetadataKeyServiceClient", "CmsMetadataValueServiceClient", @@ -1459,6 +1668,7 @@ "DeviceCategoryServiceClient", "DeviceManufacturerServiceClient", "EntitySignalsMappingServiceClient", + "ForecastAdjustmentServiceClient", "ForecastServiceClient", "GeoTargetServiceClient", "LabelServiceClient", @@ -1481,6 +1691,7 @@ "PrivateAuctionDealServiceClient", "PrivateAuctionServiceClient", "ProgrammaticBuyerServiceClient", + "ProposalServiceClient", "ReportServiceClient", "RichMediaAdsCompanyServiceClient", "RoleServiceClient", @@ -1491,8 +1702,11 @@ "TaxonomyCategoryServiceClient", "TeamServiceClient", "ThirdPartyCompanyServiceClient", + "TrafficForecastSegmentServiceClient", "UserServiceClient", "ViewabilityProviderServiceClient", + "YieldGroupServiceClient", + "YieldPartnerServiceClient", "AdBreak", "AdBreakOptimizationTypeEnum", "CreateAdBreakRequest", @@ -1501,6 +1715,7 @@ "ListAdBreaksRequest", "ListAdBreaksResponse", "UpdateAdBreakRequest", + "AdCategory", "AdReviewCenterAdStatusEnum", "ArcCreativeFormatEnum", "ManualAdReviewCenterAdStatusEnum", @@ -1576,6 +1791,7 @@ "ListAdUnitsResponse", "UpdateAdUnitRequest", "AdManagerError", + "AllocationDeliveryProfile", "ApplicationApprovalStatusEnum", "ApplicationPlatformEnum", "ApplicationStoreEnum", @@ -1597,6 +1813,10 @@ "AppliedLabel", "AssetImageDensityEnum", "Asset", + "AudienceSegmentCategory", + "GetAudienceSegmentCategoryRequest", + "ListAudienceSegmentCategoriesRequest", + "ListAudienceSegmentCategoriesResponse", "AudienceSegmentApprovalStatusEnum", "AudienceSegmentLicenseTypeEnum", "AudienceSegmentStatusEnum", @@ -1667,6 +1887,12 @@ "CdnConfigTypeEnum", "CdnSecurityPolicyTypeEnum", "CdnSecurityPolicyOriginForwardingEnum", + "ChangeEventResourceTypeEnum", + "OperationTypeEnum", + "ChangeEvent", + "GetChangeEventRequest", + "ListChangeEventsRequest", + "ListChangeEventsResponse", "ChildContentEligibilityEnum", "ChildPublisher", "BatchCreateChildPublishersRequest", @@ -1788,11 +2014,17 @@ "CreativePlaceholderCompanion", "BatchActivateCreativesRequest", "BatchActivateCreativesResponse", + "BatchCreateCreativesRequest", + "BatchCreateCreativesResponse", "BatchDeactivateCreativesRequest", "BatchDeactivateCreativesResponse", + "BatchUpdateCreativesRequest", + "BatchUpdateCreativesResponse", + "CreateCreativeRequest", "GetCreativeRequest", "ListCreativesRequest", "ListCreativesResponse", + "UpdateCreativeRequest", "CreativeSet", "CreateCreativeSetRequest", "GetCreativeSetRequest", @@ -1938,6 +2170,7 @@ "DaiSession", "GetDaiSessionRequest", "DateRange", + "DaypartingTimeZoneEnum", "DealBuyerPermissionTypeEnum", "DealPriorityTierEnum", "CompanionDeliveryOptionEnum", @@ -1972,6 +2205,27 @@ "EnvironmentTypeEnum", "ExchangeSyndicationProductEnum", "ExclusionScopeEnum", + "ForecastAdjustmentStatusEnum", + "ForecastAdjustmentVolumeTypeEnum", + "DailyVolumeSettings", + "ForecastAdjustment", + "HistoricalBasisVolumeSettings", + "TotalVolumeSettings", + "BatchActivateForecastAdjustmentsRequest", + "BatchActivateForecastAdjustmentsResponse", + "BatchCreateForecastAdjustmentsRequest", + "BatchCreateForecastAdjustmentsResponse", + "BatchDeactivateForecastAdjustmentsRequest", + "BatchDeactivateForecastAdjustmentsResponse", + "BatchUpdateForecastAdjustmentsRequest", + "BatchUpdateForecastAdjustmentsResponse", + "CalculateDailyAdOpportunityCountsRequest", + "CalculateDailyAdOpportunityCountsResponse", + "CreateForecastAdjustmentRequest", + "GetForecastAdjustmentRequest", + "ListForecastAdjustmentsRequest", + "ListForecastAdjustmentsResponse", + "UpdateForecastAdjustmentRequest", "AlternativeUnitTypeForecast", "AvailabilityForecast", "AvailabilityForecastOptions", @@ -1984,6 +2238,8 @@ "ForecastBreakdownEntry", "ForecastBreakdownOptions", "ForecastBreakdownTarget", + "ForecastingLineItem", + "ForecastingLineItemList", "GrpDemographicBreakdown", "LineItemDeliveryForecast", "TargetingCriteriaBreakdown", @@ -2009,6 +2265,7 @@ "GrpProviderEnum", "GrpSettings", "GrpTargetGenderEnum", + "InventoryUrl", "LabelTypeEnum", "Label", "BatchActivateLabelsRequest", @@ -2028,9 +2285,22 @@ "LineItemCreativeAssociationStatusEnum", "LineItemCreativeAssociation", "LineItemCreativeAssociationStats", + "BatchActivateLineItemCreativeAssociationsRequest", + "BatchActivateLineItemCreativeAssociationsResponse", + "BatchCreateLineItemCreativeAssociationsRequest", + "BatchCreateLineItemCreativeAssociationsResponse", + "BatchDeactivateLineItemCreativeAssociationsRequest", + "BatchDeactivateLineItemCreativeAssociationsResponse", + "BatchDeleteLineItemCreativeAssociationsRequest", + "BatchUpdateLineItemCreativeAssociationsRequest", + "BatchUpdateLineItemCreativeAssociationsResponse", + "CreateLineItemCreativeAssociationRequest", "GetLineItemCreativeAssociationRequest", "ListLineItemCreativeAssociationsRequest", "ListLineItemCreativeAssociationsResponse", + "PreviewLineItemCreativeAssociationRequest", + "PreviewLineItemCreativeAssociationResponse", + "UpdateLineItemCreativeAssociationRequest", "LineItemDealInfo", "LineItemDeliveryForecastSourceEnum", "LineItemDiscount", @@ -2258,6 +2528,48 @@ "GetProgrammaticBuyerRequest", "ListProgrammaticBuyersRequest", "ListProgrammaticBuyersResponse", + "BuyerRfpTypeEnum", + "ProposalCompanyAssociationTypeEnum", + "ProposalEnvironmentTypeEnum", + "BuyerRfp", + "MarketplaceComment", + "Proposal", + "ProposalCompanyAssociation", + "ProposalMarketplaceInfo", + "ProposalNegotiationStatusEnum", + "BatchArchiveProposalsRequest", + "BatchArchiveProposalsResponse", + "BatchCreateProposalsRequest", + "BatchCreateProposalsResponse", + "BatchDiscardDraftProposalsRequest", + "BatchDiscardDraftProposalsResponse", + "BatchPauseProposalsRequest", + "BatchPauseProposalsResponse", + "BatchPushToOrderProposalsRequest", + "BatchPushToOrderProposalsResponse", + "BatchRedraftProposalsRequest", + "BatchRedraftProposalsResponse", + "BatchRequestBuyerAcceptProposalsRequest", + "BatchRequestBuyerAcceptProposalsResponse", + "BatchRequestBuyerReviewProposalsRequest", + "BatchRequestBuyerReviewProposalsResponse", + "BatchReserveProposalsRequest", + "BatchReserveProposalsResponse", + "BatchResumeProposalsRequest", + "BatchResumeProposalsResponse", + "BatchTerminateProposalsRequest", + "BatchTerminateProposalsResponse", + "BatchUnarchiveProposalsRequest", + "BatchUnarchiveProposalsResponse", + "BatchUpdateProposalsRequest", + "BatchUpdateProposalsResponse", + "CreateProposalRequest", + "FetchMarketplaceCommentsRequest", + "FetchMarketplaceCommentsResponse", + "GetProposalRequest", + "ListProposalsRequest", + "ListProposalsResponse", + "UpdateProposalRequest", "ReachPartnerEnum", "ReportDefinition", "ScheduleOptions", @@ -2330,6 +2642,7 @@ "GetSuggestedAdUnitRequest", "ListSuggestedAdUnitsRequest", "ListSuggestedAdUnitsResponse", + "SupplyPathTypeEnum", "TargetPlatformEnum", "TargetedVideoBumperTypeEnum", "AdUnitTargeting", @@ -2337,21 +2650,29 @@ "BandwidthTargeting", "BrowserLanguageTargeting", "BrowserTargeting", + "BuyerUserListTargeting", "CmsMetadataTargeting", "ContentTargeting", + "ContextualTargeting", "CustomTargeting", "CustomTargetingClause", "CustomTargetingLiteral", "DataSegmentTargeting", + "DateTimeRangeTargeting", + "DayPart", + "DayPartTargeting", "DeviceCapabilityTargeting", "DeviceCategoryTargeting", "DeviceManufacturerTargeting", "FirstPartyMobileApplicationTargeting", "GeoTargeting", + "InventorySizeTargeting", "InventoryTargeting", + "InventoryUrlTargeting", "MobileApplicationTargeting", "MobileCarrierTargeting", "OperatingSystemTargeting", + "PublisherProvidedSignalsTargeting", "RequestFormatTargeting", "RequestPlatformTargeting", "Targeting", @@ -2404,6 +2725,16 @@ "ThirdPartyDataDeclarationTypeEnum", "ThirdPartyMeasurementSettings", "TimeUnitEnum", + "TrafficForecastSegment", + "BatchCreateTrafficForecastSegmentsRequest", + "BatchCreateTrafficForecastSegmentsResponse", + "BatchUpdateTrafficForecastSegmentsRequest", + "BatchUpdateTrafficForecastSegmentsResponse", + "CreateTrafficForecastSegmentRequest", + "GetTrafficForecastSegmentRequest", + "ListTrafficForecastSegmentsRequest", + "ListTrafficForecastSegmentsResponse", + "UpdateTrafficForecastSegmentRequest", "User", "BatchActivateUsersRequest", "BatchActivateUsersResponse", @@ -2434,4 +2765,32 @@ "ListViewabilityProvidersResponse", "UpdateViewabilityProviderRequest", "WebProperty", + "YieldEntityStatusEnum", + "YieldIntegrationTypeEnum", + "YieldPartnerSettingStatusEnum", + "YieldPlatformEnum", + "YieldEnvironmentTypeEnum", + "YieldFormatEnum", + "YieldAdSource", + "YieldGroup", + "BatchActivateYieldGroupsRequest", + "BatchActivateYieldGroupsResponse", + "BatchArchiveYieldGroupsRequest", + "BatchArchiveYieldGroupsResponse", + "BatchCreateYieldGroupsRequest", + "BatchCreateYieldGroupsResponse", + "BatchDeactivateYieldGroupsRequest", + "BatchDeactivateYieldGroupsResponse", + "BatchUpdateYieldGroupsRequest", + "BatchUpdateYieldGroupsResponse", + "CreateYieldGroupRequest", + "GetYieldGroupRequest", + "ListYieldGroupsRequest", + "ListYieldGroupsResponse", + "UpdateYieldGroupRequest", + "YieldPartner", + "YieldPartnerSettings", + "GetYieldPartnerRequest", + "ListYieldPartnersRequest", + "ListYieldPartnersResponse", ) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/__init__.py b/packages/google-ads-admanager/google/ads/admanager_v1/__init__.py index 746b2ac0d048..cb7c02066d70 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/__init__.py +++ b/packages/google-ads-admanager/google/ads/admanager_v1/__init__.py @@ -32,12 +32,14 @@ "google.ads.admanager_v1.services.ad_spot_service", "google.ads.admanager_v1.services.ad_unit_service", "google.ads.admanager_v1.services.application_service", + "google.ads.admanager_v1.services.audience_segment_category_service", "google.ads.admanager_v1.services.audience_segment_service", "google.ads.admanager_v1.services.bandwidth_group_service", "google.ads.admanager_v1.services.break_template_service", "google.ads.admanager_v1.services.browser_language_service", "google.ads.admanager_v1.services.browser_service", "google.ads.admanager_v1.services.cdn_config_service", + "google.ads.admanager_v1.services.change_event_service", "google.ads.admanager_v1.services.child_publisher_service", "google.ads.admanager_v1.services.cms_metadata_key_service", "google.ads.admanager_v1.services.cms_metadata_value_service", @@ -60,6 +62,7 @@ "google.ads.admanager_v1.services.device_category_service", "google.ads.admanager_v1.services.device_manufacturer_service", "google.ads.admanager_v1.services.entity_signals_mapping_service", + "google.ads.admanager_v1.services.forecast_adjustment_service", "google.ads.admanager_v1.services.forecast_service", "google.ads.admanager_v1.services.geo_target_service", "google.ads.admanager_v1.services.label_service", @@ -82,6 +85,7 @@ "google.ads.admanager_v1.services.private_auction_deal_service", "google.ads.admanager_v1.services.private_auction_service", "google.ads.admanager_v1.services.programmatic_buyer_service", + "google.ads.admanager_v1.services.proposal_service", "google.ads.admanager_v1.services.report_service", "google.ads.admanager_v1.services.rich_media_ads_company_service", "google.ads.admanager_v1.services.role_service", @@ -92,11 +96,15 @@ "google.ads.admanager_v1.services.taxonomy_category_service", "google.ads.admanager_v1.services.team_service", "google.ads.admanager_v1.services.third_party_company_service", + "google.ads.admanager_v1.services.traffic_forecast_segment_service", "google.ads.admanager_v1.services.user_service", "google.ads.admanager_v1.services.viewability_provider_service", + "google.ads.admanager_v1.services.yield_group_service", + "google.ads.admanager_v1.services.yield_partner_service", "google.ads.admanager_v1.types.ad_break_messages", "google.ads.admanager_v1.types.ad_break_optimization_type_enum", "google.ads.admanager_v1.types.ad_break_service", + "google.ads.admanager_v1.types.ad_category_messages", "google.ads.admanager_v1.types.ad_review_center_ad_enums", "google.ads.admanager_v1.types.ad_review_center_ad_messages", "google.ads.admanager_v1.types.ad_review_center_ad_service", @@ -115,12 +123,15 @@ "google.ads.admanager_v1.types.ad_unit_messages", "google.ads.admanager_v1.types.ad_unit_service", "google.ads.admanager_v1.types.admanager_error", + "google.ads.admanager_v1.types.allocation_delivery_profile_messages", "google.ads.admanager_v1.types.application_enums", "google.ads.admanager_v1.types.application_messages", "google.ads.admanager_v1.types.application_service", "google.ads.admanager_v1.types.applied_label", "google.ads.admanager_v1.types.asset_enums", "google.ads.admanager_v1.types.asset_messages", + "google.ads.admanager_v1.types.audience_segment_category_messages", + "google.ads.admanager_v1.types.audience_segment_category_service", "google.ads.admanager_v1.types.audience_segment_enums", "google.ads.admanager_v1.types.audience_segment_messages", "google.ads.admanager_v1.types.audience_segment_service", @@ -139,6 +150,9 @@ "google.ads.admanager_v1.types.cdn_config_type_enum", "google.ads.admanager_v1.types.cdn_security_policy_enum", "google.ads.admanager_v1.types.cdn_security_policy_origin_forwarding_enum", + "google.ads.admanager_v1.types.change_event_enums", + "google.ads.admanager_v1.types.change_event_messages", + "google.ads.admanager_v1.types.change_event_service", "google.ads.admanager_v1.types.child_content_eligibility_enum", "google.ads.admanager_v1.types.child_publisher_messages", "google.ads.admanager_v1.types.child_publisher_service", @@ -202,6 +216,7 @@ "google.ads.admanager_v1.types.dai_session_messages", "google.ads.admanager_v1.types.dai_session_service", "google.ads.admanager_v1.types.date_range", + "google.ads.admanager_v1.types.dayparting_time_zone_enum", "google.ads.admanager_v1.types.deal_buyer_permission_type_enum", "google.ads.admanager_v1.types.deal_priority_tier_enum", "google.ads.admanager_v1.types.delivery_enums", @@ -219,6 +234,9 @@ "google.ads.admanager_v1.types.environment_type_enum", "google.ads.admanager_v1.types.exchange_syndication_product_enum", "google.ads.admanager_v1.types.exclusion_scope_enum", + "google.ads.admanager_v1.types.forecast_adjustment_enums", + "google.ads.admanager_v1.types.forecast_adjustment_messages", + "google.ads.admanager_v1.types.forecast_adjustment_service", "google.ads.admanager_v1.types.forecast_messages", "google.ads.admanager_v1.types.forecast_service", "google.ads.admanager_v1.types.forecasting_enums", @@ -230,6 +248,7 @@ "google.ads.admanager_v1.types.grp_provider_enum", "google.ads.admanager_v1.types.grp_settings", "google.ads.admanager_v1.types.grp_target_gender_enum", + "google.ads.admanager_v1.types.inventory_url_messages", "google.ads.admanager_v1.types.label_enums", "google.ads.admanager_v1.types.label_messages", "google.ads.admanager_v1.types.label_service", @@ -289,6 +308,11 @@ "google.ads.admanager_v1.types.private_marketplace_enums", "google.ads.admanager_v1.types.programmatic_buyer_messages", "google.ads.admanager_v1.types.programmatic_buyer_service", + "google.ads.admanager_v1.types.proposal_enums", + "google.ads.admanager_v1.types.proposal_environment_type_enum", + "google.ads.admanager_v1.types.proposal_messages", + "google.ads.admanager_v1.types.proposal_negotiation_status_enum", + "google.ads.admanager_v1.types.proposal_service", "google.ads.admanager_v1.types.reach_partner_enum", "google.ads.admanager_v1.types.report_definition", "google.ads.admanager_v1.types.report_delivery", @@ -317,6 +341,7 @@ "google.ads.admanager_v1.types.slate_service", "google.ads.admanager_v1.types.suggested_ad_unit_messages", "google.ads.admanager_v1.types.suggested_ad_unit_service", + "google.ads.admanager_v1.types.supply_path_type_enum", "google.ads.admanager_v1.types.target_platform_enum", "google.ads.admanager_v1.types.targeted_video_bumper_type_enum", "google.ads.admanager_v1.types.targeting", @@ -336,6 +361,8 @@ "google.ads.admanager_v1.types.third_party_data_declaration_type_enum", "google.ads.admanager_v1.types.third_party_measurement_settings", "google.ads.admanager_v1.types.time_unit_enum", + "google.ads.admanager_v1.types.traffic_forecast_segment_messages", + "google.ads.admanager_v1.types.traffic_forecast_segment_service", "google.ads.admanager_v1.types.user_messages", "google.ads.admanager_v1.types.user_service", "google.ads.admanager_v1.types.vast_redirect_type_enum", @@ -346,6 +373,13 @@ "google.ads.admanager_v1.types.viewability_provider_messages", "google.ads.admanager_v1.types.viewability_provider_service", "google.ads.admanager_v1.types.web_property", + "google.ads.admanager_v1.types.yield_enums", + "google.ads.admanager_v1.types.yield_environment_type_enum", + "google.ads.admanager_v1.types.yield_format_enum", + "google.ads.admanager_v1.types.yield_group_messages", + "google.ads.admanager_v1.types.yield_group_service", + "google.ads.admanager_v1.types.yield_partner_messages", + "google.ads.admanager_v1.types.yield_partner_service", } @@ -355,12 +389,16 @@ from .services.ad_spot_service import AdSpotServiceClient from .services.ad_unit_service import AdUnitServiceClient from .services.application_service import ApplicationServiceClient +from .services.audience_segment_category_service import ( + AudienceSegmentCategoryServiceClient, +) from .services.audience_segment_service import AudienceSegmentServiceClient from .services.bandwidth_group_service import BandwidthGroupServiceClient from .services.break_template_service import BreakTemplateServiceClient from .services.browser_language_service import BrowserLanguageServiceClient from .services.browser_service import BrowserServiceClient from .services.cdn_config_service import CdnConfigServiceClient +from .services.change_event_service import ChangeEventServiceClient from .services.child_publisher_service import ChildPublisherServiceClient from .services.cms_metadata_key_service import CmsMetadataKeyServiceClient from .services.cms_metadata_value_service import CmsMetadataValueServiceClient @@ -383,6 +421,7 @@ from .services.device_category_service import DeviceCategoryServiceClient from .services.device_manufacturer_service import DeviceManufacturerServiceClient from .services.entity_signals_mapping_service import EntitySignalsMappingServiceClient +from .services.forecast_adjustment_service import ForecastAdjustmentServiceClient from .services.forecast_service import ForecastServiceClient from .services.geo_target_service import GeoTargetServiceClient from .services.label_service import LabelServiceClient @@ -409,6 +448,7 @@ from .services.private_auction_deal_service import PrivateAuctionDealServiceClient from .services.private_auction_service import PrivateAuctionServiceClient from .services.programmatic_buyer_service import ProgrammaticBuyerServiceClient +from .services.proposal_service import ProposalServiceClient from .services.report_service import ReportServiceClient from .services.rich_media_ads_company_service import RichMediaAdsCompanyServiceClient from .services.role_service import RoleServiceClient @@ -419,8 +459,13 @@ from .services.taxonomy_category_service import TaxonomyCategoryServiceClient from .services.team_service import TeamServiceClient from .services.third_party_company_service import ThirdPartyCompanyServiceClient +from .services.traffic_forecast_segment_service import ( + TrafficForecastSegmentServiceClient, +) from .services.user_service import UserServiceClient from .services.viewability_provider_service import ViewabilityProviderServiceClient +from .services.yield_group_service import YieldGroupServiceClient +from .services.yield_partner_service import YieldPartnerServiceClient from .types.ad_break_messages import AdBreak from .types.ad_break_optimization_type_enum import AdBreakOptimizationTypeEnum from .types.ad_break_service import ( @@ -431,6 +476,7 @@ ListAdBreaksResponse, UpdateAdBreakRequest, ) +from .types.ad_category_messages import AdCategory from .types.ad_review_center_ad_enums import ( AdReviewCenterAdStatusEnum, ArcCreativeFormatEnum, @@ -515,6 +561,7 @@ UpdateAdUnitRequest, ) from .types.admanager_error import AdManagerError +from .types.allocation_delivery_profile_messages import AllocationDeliveryProfile from .types.application_enums import ( ApplicationApprovalStatusEnum, ApplicationPlatformEnum, @@ -540,6 +587,12 @@ from .types.applied_label import AppliedLabel from .types.asset_enums import AssetImageDensityEnum from .types.asset_messages import Asset +from .types.audience_segment_category_messages import AudienceSegmentCategory +from .types.audience_segment_category_service import ( + GetAudienceSegmentCategoryRequest, + ListAudienceSegmentCategoriesRequest, + ListAudienceSegmentCategoriesResponse, +) from .types.audience_segment_enums import ( AudienceSegmentApprovalStatusEnum, AudienceSegmentLicenseTypeEnum, @@ -627,6 +680,13 @@ from .types.cdn_security_policy_origin_forwarding_enum import ( CdnSecurityPolicyOriginForwardingEnum, ) +from .types.change_event_enums import ChangeEventResourceTypeEnum, OperationTypeEnum +from .types.change_event_messages import ChangeEvent +from .types.change_event_service import ( + GetChangeEventRequest, + ListChangeEventsRequest, + ListChangeEventsResponse, +) from .types.child_content_eligibility_enum import ChildContentEligibilityEnum from .types.child_publisher_messages import ChildPublisher from .types.child_publisher_service import ( @@ -769,11 +829,17 @@ from .types.creative_service import ( BatchActivateCreativesRequest, BatchActivateCreativesResponse, + BatchCreateCreativesRequest, + BatchCreateCreativesResponse, BatchDeactivateCreativesRequest, BatchDeactivateCreativesResponse, + BatchUpdateCreativesRequest, + BatchUpdateCreativesResponse, + CreateCreativeRequest, GetCreativeRequest, ListCreativesRequest, ListCreativesResponse, + UpdateCreativeRequest, ) from .types.creative_set_messages import CreativeSet from .types.creative_set_service import ( @@ -955,6 +1021,7 @@ from .types.dai_session_messages import DaiSession from .types.dai_session_service import GetDaiSessionRequest from .types.date_range import DateRange +from .types.dayparting_time_zone_enum import DaypartingTimeZoneEnum from .types.deal_buyer_permission_type_enum import DealBuyerPermissionTypeEnum from .types.deal_priority_tier_enum import DealPriorityTierEnum from .types.delivery_enums import ( @@ -999,6 +1066,33 @@ from .types.environment_type_enum import EnvironmentTypeEnum from .types.exchange_syndication_product_enum import ExchangeSyndicationProductEnum from .types.exclusion_scope_enum import ExclusionScopeEnum +from .types.forecast_adjustment_enums import ( + ForecastAdjustmentStatusEnum, + ForecastAdjustmentVolumeTypeEnum, +) +from .types.forecast_adjustment_messages import ( + DailyVolumeSettings, + ForecastAdjustment, + HistoricalBasisVolumeSettings, + TotalVolumeSettings, +) +from .types.forecast_adjustment_service import ( + BatchActivateForecastAdjustmentsRequest, + BatchActivateForecastAdjustmentsResponse, + BatchCreateForecastAdjustmentsRequest, + BatchCreateForecastAdjustmentsResponse, + BatchDeactivateForecastAdjustmentsRequest, + BatchDeactivateForecastAdjustmentsResponse, + BatchUpdateForecastAdjustmentsRequest, + BatchUpdateForecastAdjustmentsResponse, + CalculateDailyAdOpportunityCountsRequest, + CalculateDailyAdOpportunityCountsResponse, + CreateForecastAdjustmentRequest, + GetForecastAdjustmentRequest, + ListForecastAdjustmentsRequest, + ListForecastAdjustmentsResponse, + UpdateForecastAdjustmentRequest, +) from .types.forecast_messages import ( AlternativeUnitTypeForecast, AvailabilityForecast, @@ -1012,6 +1106,8 @@ ForecastBreakdownEntry, ForecastBreakdownOptions, ForecastBreakdownTarget, + ForecastingLineItem, + ForecastingLineItemList, GrpDemographicBreakdown, LineItemDeliveryForecast, TargetingCriteriaBreakdown, @@ -1043,6 +1139,7 @@ from .types.grp_provider_enum import GrpProviderEnum from .types.grp_settings import GrpSettings from .types.grp_target_gender_enum import GrpTargetGenderEnum +from .types.inventory_url_messages import InventoryUrl from .types.label_enums import LabelTypeEnum from .types.label_messages import Label from .types.label_service import ( @@ -1069,9 +1166,22 @@ LineItemCreativeAssociationStats, ) from .types.line_item_creative_association_service import ( + BatchActivateLineItemCreativeAssociationsRequest, + BatchActivateLineItemCreativeAssociationsResponse, + BatchCreateLineItemCreativeAssociationsRequest, + BatchCreateLineItemCreativeAssociationsResponse, + BatchDeactivateLineItemCreativeAssociationsRequest, + BatchDeactivateLineItemCreativeAssociationsResponse, + BatchDeleteLineItemCreativeAssociationsRequest, + BatchUpdateLineItemCreativeAssociationsRequest, + BatchUpdateLineItemCreativeAssociationsResponse, + CreateLineItemCreativeAssociationRequest, GetLineItemCreativeAssociationRequest, ListLineItemCreativeAssociationsRequest, ListLineItemCreativeAssociationsResponse, + PreviewLineItemCreativeAssociationRequest, + PreviewLineItemCreativeAssociationResponse, + UpdateLineItemCreativeAssociationRequest, ) from .types.line_item_deal_info import LineItemDealInfo from .types.line_item_delivery_forecast_source_enum import ( @@ -1344,6 +1454,51 @@ ListProgrammaticBuyersRequest, ListProgrammaticBuyersResponse, ) +from .types.proposal_enums import BuyerRfpTypeEnum, ProposalCompanyAssociationTypeEnum +from .types.proposal_environment_type_enum import ProposalEnvironmentTypeEnum +from .types.proposal_messages import ( + BuyerRfp, + MarketplaceComment, + Proposal, + ProposalCompanyAssociation, + ProposalMarketplaceInfo, +) +from .types.proposal_negotiation_status_enum import ProposalNegotiationStatusEnum +from .types.proposal_service import ( + BatchArchiveProposalsRequest, + BatchArchiveProposalsResponse, + BatchCreateProposalsRequest, + BatchCreateProposalsResponse, + BatchDiscardDraftProposalsRequest, + BatchDiscardDraftProposalsResponse, + BatchPauseProposalsRequest, + BatchPauseProposalsResponse, + BatchPushToOrderProposalsRequest, + BatchPushToOrderProposalsResponse, + BatchRedraftProposalsRequest, + BatchRedraftProposalsResponse, + BatchRequestBuyerAcceptProposalsRequest, + BatchRequestBuyerAcceptProposalsResponse, + BatchRequestBuyerReviewProposalsRequest, + BatchRequestBuyerReviewProposalsResponse, + BatchReserveProposalsRequest, + BatchReserveProposalsResponse, + BatchResumeProposalsRequest, + BatchResumeProposalsResponse, + BatchTerminateProposalsRequest, + BatchTerminateProposalsResponse, + BatchUnarchiveProposalsRequest, + BatchUnarchiveProposalsResponse, + BatchUpdateProposalsRequest, + BatchUpdateProposalsResponse, + CreateProposalRequest, + FetchMarketplaceCommentsRequest, + FetchMarketplaceCommentsResponse, + GetProposalRequest, + ListProposalsRequest, + ListProposalsResponse, + UpdateProposalRequest, +) from .types.reach_partner_enum import ReachPartnerEnum from .types.report_definition import ReportDefinition from .types.report_delivery import ScheduleOptions @@ -1427,6 +1582,7 @@ ListSuggestedAdUnitsRequest, ListSuggestedAdUnitsResponse, ) +from .types.supply_path_type_enum import SupplyPathTypeEnum from .types.target_platform_enum import TargetPlatformEnum from .types.targeted_video_bumper_type_enum import TargetedVideoBumperTypeEnum from .types.targeting import ( @@ -1435,21 +1591,29 @@ BandwidthTargeting, BrowserLanguageTargeting, BrowserTargeting, + BuyerUserListTargeting, CmsMetadataTargeting, ContentTargeting, + ContextualTargeting, CustomTargeting, CustomTargetingClause, CustomTargetingLiteral, DataSegmentTargeting, + DateTimeRangeTargeting, + DayPart, + DayPartTargeting, DeviceCapabilityTargeting, DeviceCategoryTargeting, DeviceManufacturerTargeting, FirstPartyMobileApplicationTargeting, GeoTargeting, + InventorySizeTargeting, InventoryTargeting, + InventoryUrlTargeting, MobileApplicationTargeting, MobileCarrierTargeting, OperatingSystemTargeting, + PublisherProvidedSignalsTargeting, RequestFormatTargeting, RequestPlatformTargeting, Targeting, @@ -1514,6 +1678,18 @@ ) from .types.third_party_measurement_settings import ThirdPartyMeasurementSettings from .types.time_unit_enum import TimeUnitEnum +from .types.traffic_forecast_segment_messages import TrafficForecastSegment +from .types.traffic_forecast_segment_service import ( + BatchCreateTrafficForecastSegmentsRequest, + BatchCreateTrafficForecastSegmentsResponse, + BatchUpdateTrafficForecastSegmentsRequest, + BatchUpdateTrafficForecastSegmentsResponse, + CreateTrafficForecastSegmentRequest, + GetTrafficForecastSegmentRequest, + ListTrafficForecastSegmentsRequest, + ListTrafficForecastSegmentsResponse, + UpdateTrafficForecastSegmentRequest, +) from .types.user_messages import User from .types.user_service import ( BatchActivateUsersRequest, @@ -1548,6 +1724,38 @@ UpdateViewabilityProviderRequest, ) from .types.web_property import WebProperty +from .types.yield_enums import ( + YieldEntityStatusEnum, + YieldIntegrationTypeEnum, + YieldPartnerSettingStatusEnum, + YieldPlatformEnum, +) +from .types.yield_environment_type_enum import YieldEnvironmentTypeEnum +from .types.yield_format_enum import YieldFormatEnum +from .types.yield_group_messages import YieldAdSource, YieldGroup +from .types.yield_group_service import ( + BatchActivateYieldGroupsRequest, + BatchActivateYieldGroupsResponse, + BatchArchiveYieldGroupsRequest, + BatchArchiveYieldGroupsResponse, + BatchCreateYieldGroupsRequest, + BatchCreateYieldGroupsResponse, + BatchDeactivateYieldGroupsRequest, + BatchDeactivateYieldGroupsResponse, + BatchUpdateYieldGroupsRequest, + BatchUpdateYieldGroupsResponse, + CreateYieldGroupRequest, + GetYieldGroupRequest, + ListYieldGroupsRequest, + ListYieldGroupsResponse, + UpdateYieldGroupRequest, +) +from .types.yield_partner_messages import YieldPartner, YieldPartnerSettings +from .types.yield_partner_service import ( + GetYieldPartnerRequest, + ListYieldPartnersRequest, + ListYieldPartnersResponse, +) __all__ = ( "ActivateCustomTargetingValueRequest", @@ -1559,6 +1767,7 @@ "AdBreakOptimizationTypeEnum", "AdBreakServiceClient", "AdBreakStateEnum", + "AdCategory", "AdExchangeCreativeDetails", "AdManagerError", "AdMediaDeliveryConfig", @@ -1587,6 +1796,7 @@ "AdUnitSize", "AdUnitStatusEnum", "AdUnitTargeting", + "AllocationDeliveryProfile", "AlternativeUnitTypeForecast", "Application", "ApplicationApprovalStatusEnum", @@ -1601,6 +1811,8 @@ "AssetImageDensityEnum", "AudienceSegment", "AudienceSegmentApprovalStatusEnum", + "AudienceSegmentCategory", + "AudienceSegmentCategoryServiceClient", "AudienceSegmentLicenseTypeEnum", "AudienceSegmentServiceClient", "AudienceSegmentStatusEnum", @@ -1643,8 +1855,12 @@ "BatchActivateDaiAuthenticationKeysResponse", "BatchActivateDaiEncodingProfilesRequest", "BatchActivateDaiEncodingProfilesResponse", + "BatchActivateForecastAdjustmentsRequest", + "BatchActivateForecastAdjustmentsResponse", "BatchActivateLabelsRequest", "BatchActivateLabelsResponse", + "BatchActivateLineItemCreativeAssociationsRequest", + "BatchActivateLineItemCreativeAssociationsResponse", "BatchActivateLineItemsRequest", "BatchActivateLineItemsResponse", "BatchActivateLiveStreamsRequest", @@ -1657,6 +1873,8 @@ "BatchActivateTeamsResponse", "BatchActivateUsersRequest", "BatchActivateUsersResponse", + "BatchActivateYieldGroupsRequest", + "BatchActivateYieldGroupsResponse", "BatchAdReviewCenterAdsOperationMetadata", "BatchAllowAdReviewCenterAdsRequest", "BatchAllowAdReviewCenterAdsResponse", @@ -1690,8 +1908,12 @@ "BatchArchiveOrdersResponse", "BatchArchivePlacementsRequest", "BatchArchivePlacementsResponse", + "BatchArchiveProposalsRequest", + "BatchArchiveProposalsResponse", "BatchArchiveSlatesRequest", "BatchArchiveSlatesResponse", + "BatchArchiveYieldGroupsRequest", + "BatchArchiveYieldGroupsResponse", "BatchBlockAdReviewCenterAdsRequest", "BatchBlockAdReviewCenterAdsResponse", "BatchCreateAdRulesRequest", @@ -1716,6 +1938,8 @@ "BatchCreateContactsResponse", "BatchCreateCreativeWrappersRequest", "BatchCreateCreativeWrappersResponse", + "BatchCreateCreativesRequest", + "BatchCreateCreativesResponse", "BatchCreateCustomFieldsRequest", "BatchCreateCustomFieldsResponse", "BatchCreateCustomTargetingKeysRequest", @@ -1728,8 +1952,12 @@ "BatchCreateDaiEncodingProfilesResponse", "BatchCreateEntitySignalsMappingsRequest", "BatchCreateEntitySignalsMappingsResponse", + "BatchCreateForecastAdjustmentsRequest", + "BatchCreateForecastAdjustmentsResponse", "BatchCreateLabelsRequest", "BatchCreateLabelsResponse", + "BatchCreateLineItemCreativeAssociationsRequest", + "BatchCreateLineItemCreativeAssociationsResponse", "BatchCreateLineItemsRequest", "BatchCreateLineItemsResponse", "BatchCreateLiveStreamsRequest", @@ -1740,6 +1968,8 @@ "BatchCreateOrdersResponse", "BatchCreatePlacementsRequest", "BatchCreatePlacementsResponse", + "BatchCreateProposalsRequest", + "BatchCreateProposalsResponse", "BatchCreateSitesRequest", "BatchCreateSitesResponse", "BatchCreateSlatesRequest", @@ -1748,10 +1978,14 @@ "BatchCreateTargetingPresetsResponse", "BatchCreateTeamsRequest", "BatchCreateTeamsResponse", + "BatchCreateTrafficForecastSegmentsRequest", + "BatchCreateTrafficForecastSegmentsResponse", "BatchCreateUsersRequest", "BatchCreateUsersResponse", "BatchCreateViewabilityProvidersRequest", "BatchCreateViewabilityProvidersResponse", + "BatchCreateYieldGroupsRequest", + "BatchCreateYieldGroupsResponse", "BatchDeactivateAdRulesRequest", "BatchDeactivateAdRulesResponse", "BatchDeactivateAdUnitsRequest", @@ -1776,8 +2010,12 @@ "BatchDeactivateCustomTargetingValuesResponse", "BatchDeactivateDaiAuthenticationKeysRequest", "BatchDeactivateDaiAuthenticationKeysResponse", + "BatchDeactivateForecastAdjustmentsRequest", + "BatchDeactivateForecastAdjustmentsResponse", "BatchDeactivateLabelsRequest", "BatchDeactivateLabelsResponse", + "BatchDeactivateLineItemCreativeAssociationsRequest", + "BatchDeactivateLineItemCreativeAssociationsResponse", "BatchDeactivateNativeStylesRequest", "BatchDeactivateNativeStylesResponse", "BatchDeactivatePlacementsRequest", @@ -1790,7 +2028,10 @@ "BatchDeactivateTeamsResponse", "BatchDeactivateUsersRequest", "BatchDeactivateUsersResponse", + "BatchDeactivateYieldGroupsRequest", + "BatchDeactivateYieldGroupsResponse", "BatchDeleteAdRulesRequest", + "BatchDeleteLineItemCreativeAssociationsRequest", "BatchDeleteLineItemsRequest", "BatchDeleteOrdersRequest", "BatchDeleteOrdersResponse", @@ -1798,6 +2039,8 @@ "BatchDisapproveOrdersResponse", "BatchDisapproveOrdersWithoutReservationChangesRequest", "BatchDisapproveOrdersWithoutReservationChangesResponse", + "BatchDiscardDraftProposalsRequest", + "BatchDiscardDraftProposalsResponse", "BatchPauseAdsLiveStreamsRequest", "BatchPauseAdsLiveStreamsResponse", "BatchPauseLineItemsRequest", @@ -1806,8 +2049,14 @@ "BatchPauseLiveStreamsResponse", "BatchPauseOrdersRequest", "BatchPauseOrdersResponse", + "BatchPauseProposalsRequest", + "BatchPauseProposalsResponse", "BatchPopulateAudienceSegmentsRequest", "BatchPopulateAudienceSegmentsResponse", + "BatchPushToOrderProposalsRequest", + "BatchPushToOrderProposalsResponse", + "BatchRedraftProposalsRequest", + "BatchRedraftProposalsResponse", "BatchRefreshMasterPlaylistsRequest", "BatchRefreshMasterPlaylistsResponse", "BatchRejectAudienceSegmentsRequest", @@ -1818,12 +2067,18 @@ "BatchReleaseLineItemsResponse", "BatchRenegotiateChildPublisherAgreementsRequest", "BatchRenegotiateChildPublisherAgreementsResponse", + "BatchRequestBuyerAcceptProposalsRequest", + "BatchRequestBuyerAcceptProposalsResponse", + "BatchRequestBuyerReviewProposalsRequest", + "BatchRequestBuyerReviewProposalsResponse", "BatchResendChildPublisherInvitationEmailsRequest", "BatchResendChildPublisherInvitationEmailsResponse", "BatchReserveAndOverbookLineItemsRequest", "BatchReserveAndOverbookLineItemsResponse", "BatchReserveLineItemsRequest", "BatchReserveLineItemsResponse", + "BatchReserveProposalsRequest", + "BatchReserveProposalsResponse", "BatchResumeAndOverbookLineItemsRequest", "BatchResumeAndOverbookLineItemsResponse", "BatchResumeAndOverbookOrdersRequest", @@ -1832,6 +2087,8 @@ "BatchResumeLineItemsResponse", "BatchResumeOrdersRequest", "BatchResumeOrdersResponse", + "BatchResumeProposalsRequest", + "BatchResumeProposalsResponse", "BatchRetractOrdersRequest", "BatchRetractOrdersResponse", "BatchRetractOrdersWithoutReservationChangesRequest", @@ -1844,12 +2101,16 @@ "BatchSubmitOrdersForApprovalWithoutReservationChangesResponse", "BatchSubmitSitesForApprovalRequest", "BatchSubmitSitesForApprovalResponse", + "BatchTerminateProposalsRequest", + "BatchTerminateProposalsResponse", "BatchUnarchiveApplicationsRequest", "BatchUnarchiveApplicationsResponse", "BatchUnarchiveLineItemsRequest", "BatchUnarchiveLineItemsResponse", "BatchUnarchiveOrdersRequest", "BatchUnarchiveOrdersResponse", + "BatchUnarchiveProposalsRequest", + "BatchUnarchiveProposalsResponse", "BatchUnarchiveSlatesRequest", "BatchUnarchiveSlatesResponse", "BatchUpdateAdRulesRequest", @@ -1874,6 +2135,8 @@ "BatchUpdateContactsResponse", "BatchUpdateCreativeWrappersRequest", "BatchUpdateCreativeWrappersResponse", + "BatchUpdateCreativesRequest", + "BatchUpdateCreativesResponse", "BatchUpdateCustomFieldsRequest", "BatchUpdateCustomFieldsResponse", "BatchUpdateCustomTargetingKeysRequest", @@ -1886,8 +2149,12 @@ "BatchUpdateDaiEncodingProfilesResponse", "BatchUpdateEntitySignalsMappingsRequest", "BatchUpdateEntitySignalsMappingsResponse", + "BatchUpdateForecastAdjustmentsRequest", + "BatchUpdateForecastAdjustmentsResponse", "BatchUpdateLabelsRequest", "BatchUpdateLabelsResponse", + "BatchUpdateLineItemCreativeAssociationsRequest", + "BatchUpdateLineItemCreativeAssociationsResponse", "BatchUpdateLineItemsRequest", "BatchUpdateLineItemsResponse", "BatchUpdateLiveStreamsRequest", @@ -1900,6 +2167,8 @@ "BatchUpdatePartnersResponse", "BatchUpdatePlacementsRequest", "BatchUpdatePlacementsResponse", + "BatchUpdateProposalsRequest", + "BatchUpdateProposalsResponse", "BatchUpdateSitesRequest", "BatchUpdateSitesResponse", "BatchUpdateSlatesRequest", @@ -1908,10 +2177,14 @@ "BatchUpdateTargetingPresetsResponse", "BatchUpdateTeamsRequest", "BatchUpdateTeamsResponse", + "BatchUpdateTrafficForecastSegmentsRequest", + "BatchUpdateTrafficForecastSegmentsResponse", "BatchUpdateUsersRequest", "BatchUpdateUsersResponse", "BatchUpdateViewabilityProvidersRequest", "BatchUpdateViewabilityProvidersResponse", + "BatchUpdateYieldGroupsRequest", + "BatchUpdateYieldGroupsResponse", "BatchWithdrawChildPublishersRequest", "BatchWithdrawChildPublishersResponse", "BrandLiftPartnerEnum", @@ -1926,6 +2199,11 @@ "BrowserServiceClient", "BrowserTargeting", "BuyerPlacementConfig", + "BuyerRfp", + "BuyerRfpTypeEnum", + "BuyerUserListTargeting", + "CalculateDailyAdOpportunityCountsRequest", + "CalculateDailyAdOpportunityCountsResponse", "CdnConfig", "CdnConfigServiceClient", "CdnConfigStatusEnum", @@ -1933,6 +2211,9 @@ "CdnSecurityPolicy", "CdnSecurityPolicyOriginForwardingEnum", "CdnSecurityPolicyTypeEnum", + "ChangeEvent", + "ChangeEventResourceTypeEnum", + "ChangeEventServiceClient", "ChildContentEligibilityEnum", "ChildPublisher", "ChildPublisherAddressVerificationStatusEnum", @@ -1969,6 +2250,7 @@ "ContentStatusEnum", "ContentStatusSourceEnum", "ContentTargeting", + "ContextualTargeting", "ConversionEventEnum", "CreateAdBreakRequest", "CreateAdRuleRequest", @@ -1981,6 +2263,7 @@ "CreateChildPublisherRequest", "CreateCompanyRequest", "CreateContactRequest", + "CreateCreativeRequest", "CreateCreativeSetRequest", "CreateCreativeWrapperRequest", "CreateCustomFieldRequest", @@ -1989,7 +2272,9 @@ "CreateDaiAuthenticationKeyRequest", "CreateDaiEncodingProfileRequest", "CreateEntitySignalsMappingRequest", + "CreateForecastAdjustmentRequest", "CreateLabelRequest", + "CreateLineItemCreativeAssociationRequest", "CreateLineItemRequest", "CreateLiveStreamRequest", "CreateNativeStyleRequest", @@ -1997,13 +2282,16 @@ "CreatePlacementRequest", "CreatePrivateAuctionDealRequest", "CreatePrivateAuctionRequest", + "CreateProposalRequest", "CreateReportRequest", "CreateSiteRequest", "CreateSlateRequest", "CreateTargetingPresetRequest", "CreateTeamRequest", + "CreateTrafficForecastSegmentRequest", "CreateUserRequest", "CreateViewabilityProviderRequest", + "CreateYieldGroupRequest", "Creative", "CreativeAsset", "CreativeDestinationUrlTypeEnum", @@ -2069,9 +2357,14 @@ "DaiIngestStatusEnum", "DaiSession", "DaiSessionServiceClient", + "DailyVolumeSettings", "DashBridge", "DataSegmentTargeting", "DateRange", + "DateTimeRangeTargeting", + "DayPart", + "DayPartTargeting", + "DaypartingTimeZoneEnum", "DeactivateCustomTargetingValueRequest", "DeactivateTargetingPresetRequest", "DealBuyerPermissionTypeEnum", @@ -2107,11 +2400,17 @@ "ExistingLineItemList", "FetchAdReviewCenterCustomLabelsRequest", "FetchAdReviewCenterCustomLabelsResponse", + "FetchMarketplaceCommentsRequest", + "FetchMarketplaceCommentsResponse", "FetchMcmEarningsRequest", "FetchMcmEarningsResponse", "FetchReportResultRowsRequest", "FetchReportResultRowsResponse", "FirstPartyMobileApplicationTargeting", + "ForecastAdjustment", + "ForecastAdjustmentServiceClient", + "ForecastAdjustmentStatusEnum", + "ForecastAdjustmentVolumeTypeEnum", "ForecastBreakdown", "ForecastBreakdownEntry", "ForecastBreakdownOptions", @@ -2120,6 +2419,8 @@ "ForecastingGrpAgeEnum", "ForecastingGrpGenderEnum", "ForecastingGrpUnitEnum", + "ForecastingLineItem", + "ForecastingLineItemList", "ForecastingTargetingDimensionEnum", "FrequencyCap", "GeoTarget", @@ -2130,12 +2431,14 @@ "GetAdSpotRequest", "GetAdUnitRequest", "GetApplicationRequest", + "GetAudienceSegmentCategoryRequest", "GetAudienceSegmentRequest", "GetBandwidthGroupRequest", "GetBreakTemplateRequest", "GetBrowserLanguageRequest", "GetBrowserRequest", "GetCdnConfigRequest", + "GetChangeEventRequest", "GetChildPublisherRequest", "GetCmsMetadataKeyRequest", "GetCmsMetadataValueRequest", @@ -2159,6 +2462,7 @@ "GetDeviceCategoryRequest", "GetDeviceManufacturerRequest", "GetEntitySignalsMappingRequest", + "GetForecastAdjustmentRequest", "GetGeoTargetRequest", "GetLabelRequest", "GetLineItemCreativeAssociationRequest", @@ -2179,6 +2483,7 @@ "GetPrivateAuctionDealRequest", "GetPrivateAuctionRequest", "GetProgrammaticBuyerRequest", + "GetProposalRequest", "GetReportRequest", "GetRichMediaAdsCompanyRequest", "GetRoleRequest", @@ -2189,14 +2494,18 @@ "GetTaxonomyCategoryRequest", "GetTeamRequest", "GetThirdPartyCompanyRequest", + "GetTrafficForecastSegmentRequest", "GetUserRequest", "GetViewabilityProviderRequest", + "GetYieldGroupRequest", + "GetYieldPartnerRequest", "Goal", "GoalTypeEnum", "GrpDemographicBreakdown", "GrpProviderEnum", "GrpSettings", "GrpTargetGenderEnum", + "HistoricalBasisVolumeSettings", "HlsMasterPlaylistRefreshTypeEnum", "HlsSettings", "HlsSettingsPlaylistTypeEnum", @@ -2206,7 +2515,10 @@ "ImageRedirectCreativeDetails", "ImageRedirectOverlayCreativeDetails", "InternalRedirectCreativeDetails", + "InventorySizeTargeting", "InventoryTargeting", + "InventoryUrl", + "InventoryUrlTargeting", "Label", "LabelFrequencyCap", "LabelServiceClient", @@ -2246,6 +2558,8 @@ "ListAdUnitsResponse", "ListApplicationsRequest", "ListApplicationsResponse", + "ListAudienceSegmentCategoriesRequest", + "ListAudienceSegmentCategoriesResponse", "ListAudienceSegmentsRequest", "ListAudienceSegmentsResponse", "ListBandwidthGroupsRequest", @@ -2258,6 +2572,8 @@ "ListBrowsersResponse", "ListCdnConfigsRequest", "ListCdnConfigsResponse", + "ListChangeEventsRequest", + "ListChangeEventsResponse", "ListChildPublishersRequest", "ListChildPublishersResponse", "ListCmsMetadataKeysRequest", @@ -2300,6 +2616,8 @@ "ListDeviceManufacturersResponse", "ListEntitySignalsMappingsRequest", "ListEntitySignalsMappingsResponse", + "ListForecastAdjustmentsRequest", + "ListForecastAdjustmentsResponse", "ListGeoTargetsRequest", "ListGeoTargetsResponse", "ListLabelsRequest", @@ -2340,6 +2658,8 @@ "ListPrivateAuctionsResponse", "ListProgrammaticBuyersRequest", "ListProgrammaticBuyersResponse", + "ListProposalsRequest", + "ListProposalsResponse", "ListReportsRequest", "ListReportsResponse", "ListRichMediaAdsCompaniesRequest", @@ -2360,10 +2680,16 @@ "ListTeamsResponse", "ListThirdPartyCompaniesRequest", "ListThirdPartyCompaniesResponse", + "ListTrafficForecastSegmentsRequest", + "ListTrafficForecastSegmentsResponse", "ListUsersRequest", "ListUsersResponse", "ListViewabilityProvidersRequest", "ListViewabilityProvidersResponse", + "ListYieldGroupsRequest", + "ListYieldGroupsResponse", + "ListYieldPartnersRequest", + "ListYieldPartnersResponse", "LiveStream", "LiveStreamConditioning", "LiveStreamEvent", @@ -2371,6 +2697,7 @@ "LiveStreamEventStreamingFormatEnum", "LiveStreamServiceClient", "ManualAdReviewCenterAdStatusEnum", + "MarketplaceComment", "MasterPlaylistSettings", "McmEarnings", "McmEarningsProductTypeEnum", @@ -2397,6 +2724,7 @@ "OperatingSystemTargeting", "OperatingSystemVersion", "OperatingSystemVersionServiceClient", + "OperationTypeEnum", "Order", "OrderServiceClient", "OrderStatusEnum", @@ -2410,6 +2738,8 @@ "PrefetchSettings", "PrefetchStageTypeEnum", "PrerollSettings", + "PreviewLineItemCreativeAssociationRequest", + "PreviewLineItemCreativeAssociationResponse", "PrivateAuction", "PrivateAuctionDeal", "PrivateAuctionDealServiceClient", @@ -2418,7 +2748,15 @@ "ProgrammaticBuyer", "ProgrammaticBuyerServiceClient", "ProgrammaticCreativeDetails", + "Proposal", + "ProposalCompanyAssociation", + "ProposalCompanyAssociationTypeEnum", + "ProposalEnvironmentTypeEnum", + "ProposalMarketplaceInfo", + "ProposalNegotiationStatusEnum", + "ProposalServiceClient", "ProvisionTestNetworkRequest", + "PublisherProvidedSignalsTargeting", "ReachPartnerEnum", "RefreshRateTypeEnum", "RenegotiateChildPublisherAgreementRequest", @@ -2474,6 +2812,7 @@ "StitchingTypeEnum", "SuggestedAdUnit", "SuggestedAdUnitServiceClient", + "SupplyPathTypeEnum", "TargetPlatformEnum", "TargetWindowEnum", "TargetedVideoBumperTypeEnum", @@ -2501,7 +2840,10 @@ "ThirdPartyMeasurementSettings", "TimeSeries", "TimeUnitEnum", + "TotalVolumeSettings", "TrackingPingFindingTypeEnum", + "TrafficForecastSegment", + "TrafficForecastSegmentServiceClient", "UnitTypeEnum", "UpdateAdBreakRequest", "UpdateAdRuleRequest", @@ -2514,6 +2856,7 @@ "UpdateChildPublisherRequest", "UpdateCompanyRequest", "UpdateContactRequest", + "UpdateCreativeRequest", "UpdateCreativeSetRequest", "UpdateCreativeWrapperRequest", "UpdateCustomFieldRequest", @@ -2522,7 +2865,9 @@ "UpdateDaiAuthenticationKeyRequest", "UpdateDaiEncodingProfileRequest", "UpdateEntitySignalsMappingRequest", + "UpdateForecastAdjustmentRequest", "UpdateLabelRequest", + "UpdateLineItemCreativeAssociationRequest", "UpdateLineItemRequest", "UpdateLiveStreamRequest", "UpdateNativeStyleRequest", @@ -2532,13 +2877,16 @@ "UpdatePlacementRequest", "UpdatePrivateAuctionDealRequest", "UpdatePrivateAuctionRequest", + "UpdateProposalRequest", "UpdateReportRequest", "UpdateSiteRequest", "UpdateSlateRequest", "UpdateTargetingPresetRequest", "UpdateTeamRequest", + "UpdateTrafficForecastSegmentRequest", "UpdateUserRequest", "UpdateViewabilityProviderRequest", + "UpdateYieldGroupRequest", "User", "UserDomainTargeting", "UserServiceClient", @@ -2559,6 +2907,18 @@ "ViewabilityProviderServiceClient", "WebProperty", "WebviewClaimingStatusEnum", + "YieldAdSource", + "YieldEntityStatusEnum", + "YieldEnvironmentTypeEnum", + "YieldFormatEnum", + "YieldGroup", + "YieldGroupServiceClient", + "YieldIntegrationTypeEnum", + "YieldPartner", + "YieldPartnerServiceClient", + "YieldPartnerSettingStatusEnum", + "YieldPartnerSettings", + "YieldPlatformEnum", ) api_core.check_python_version("google.ads.admanager_v1") diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/gapic_metadata.json b/packages/google-ads-admanager/google/ads/admanager_v1/gapic_metadata.json index 2bb6de9ec1a8..dcb2dc9f479b 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/gapic_metadata.json +++ b/packages/google-ads-admanager/google/ads/admanager_v1/gapic_metadata.json @@ -274,6 +274,25 @@ } } }, + "AudienceSegmentCategoryService": { + "clients": { + "rest": { + "libraryClient": "AudienceSegmentCategoryServiceClient", + "rpcs": { + "GetAudienceSegmentCategory": { + "methods": [ + "get_audience_segment_category" + ] + }, + "ListAudienceSegmentCategories": { + "methods": [ + "list_audience_segment_categories" + ] + } + } + } + } + }, "AudienceSegmentService": { "clients": { "rest": { @@ -483,6 +502,25 @@ } } }, + "ChangeEventService": { + "clients": { + "rest": { + "libraryClient": "ChangeEventServiceClient", + "rpcs": { + "GetChangeEvent": { + "methods": [ + "get_change_event" + ] + }, + "ListChangeEvents": { + "methods": [ + "list_change_events" + ] + } + } + } + } + }, "ChildPublisherService": { "clients": { "rest": { @@ -755,11 +793,26 @@ "batch_activate_creatives" ] }, + "BatchCreateCreatives": { + "methods": [ + "batch_create_creatives" + ] + }, "BatchDeactivateCreatives": { "methods": [ "batch_deactivate_creatives" ] }, + "BatchUpdateCreatives": { + "methods": [ + "batch_update_creatives" + ] + }, + "CreateCreative": { + "methods": [ + "create_creative" + ] + }, "GetCreative": { "methods": [ "get_creative" @@ -769,6 +822,11 @@ "methods": [ "list_creatives" ] + }, + "UpdateCreative": { + "methods": [ + "update_creative" + ] } } } @@ -1226,6 +1284,60 @@ } } }, + "ForecastAdjustmentService": { + "clients": { + "rest": { + "libraryClient": "ForecastAdjustmentServiceClient", + "rpcs": { + "BatchActivateForecastAdjustments": { + "methods": [ + "batch_activate_forecast_adjustments" + ] + }, + "BatchCreateForecastAdjustments": { + "methods": [ + "batch_create_forecast_adjustments" + ] + }, + "BatchDeactivateForecastAdjustments": { + "methods": [ + "batch_deactivate_forecast_adjustments" + ] + }, + "BatchUpdateForecastAdjustments": { + "methods": [ + "batch_update_forecast_adjustments" + ] + }, + "CalculateDailyAdOpportunityCounts": { + "methods": [ + "calculate_daily_ad_opportunity_counts" + ] + }, + "CreateForecastAdjustment": { + "methods": [ + "create_forecast_adjustment" + ] + }, + "GetForecastAdjustment": { + "methods": [ + "get_forecast_adjustment" + ] + }, + "ListForecastAdjustments": { + "methods": [ + "list_forecast_adjustments" + ] + }, + "UpdateForecastAdjustment": { + "methods": [ + "update_forecast_adjustment" + ] + } + } + } + } + }, "ForecastService": { "clients": { "rest": { @@ -1323,6 +1435,36 @@ "rest": { "libraryClient": "LineItemCreativeAssociationServiceClient", "rpcs": { + "BatchActivateLineItemCreativeAssociations": { + "methods": [ + "batch_activate_line_item_creative_associations" + ] + }, + "BatchCreateLineItemCreativeAssociations": { + "methods": [ + "batch_create_line_item_creative_associations" + ] + }, + "BatchDeactivateLineItemCreativeAssociations": { + "methods": [ + "batch_deactivate_line_item_creative_associations" + ] + }, + "BatchDeleteLineItemCreativeAssociations": { + "methods": [ + "batch_delete_line_item_creative_associations" + ] + }, + "BatchUpdateLineItemCreativeAssociations": { + "methods": [ + "batch_update_line_item_creative_associations" + ] + }, + "CreateLineItemCreativeAssociation": { + "methods": [ + "create_line_item_creative_association" + ] + }, "GetLineItemCreativeAssociation": { "methods": [ "get_line_item_creative_association" @@ -1332,6 +1474,16 @@ "methods": [ "list_line_item_creative_associations" ] + }, + "PreviewLineItemCreativeAssociation": { + "methods": [ + "preview_line_item_creative_association" + ] + }, + "UpdateLineItemCreativeAssociation": { + "methods": [ + "update_line_item_creative_association" + ] } } } @@ -1994,6 +2146,105 @@ } } }, + "ProposalService": { + "clients": { + "rest": { + "libraryClient": "ProposalServiceClient", + "rpcs": { + "BatchArchiveProposals": { + "methods": [ + "batch_archive_proposals" + ] + }, + "BatchCreateProposals": { + "methods": [ + "batch_create_proposals" + ] + }, + "BatchDiscardDraftProposals": { + "methods": [ + "batch_discard_draft_proposals" + ] + }, + "BatchPauseProposals": { + "methods": [ + "batch_pause_proposals" + ] + }, + "BatchPushToOrderProposals": { + "methods": [ + "batch_push_to_order_proposals" + ] + }, + "BatchRedraftProposals": { + "methods": [ + "batch_redraft_proposals" + ] + }, + "BatchRequestBuyerAcceptProposals": { + "methods": [ + "batch_request_buyer_accept_proposals" + ] + }, + "BatchRequestBuyerReviewProposals": { + "methods": [ + "batch_request_buyer_review_proposals" + ] + }, + "BatchReserveProposals": { + "methods": [ + "batch_reserve_proposals" + ] + }, + "BatchResumeProposals": { + "methods": [ + "batch_resume_proposals" + ] + }, + "BatchTerminateProposals": { + "methods": [ + "batch_terminate_proposals" + ] + }, + "BatchUnarchiveProposals": { + "methods": [ + "batch_unarchive_proposals" + ] + }, + "BatchUpdateProposals": { + "methods": [ + "batch_update_proposals" + ] + }, + "CreateProposal": { + "methods": [ + "create_proposal" + ] + }, + "FetchMarketplaceComments": { + "methods": [ + "fetch_marketplace_comments" + ] + }, + "GetProposal": { + "methods": [ + "get_proposal" + ] + }, + "ListProposals": { + "methods": [ + "list_proposals" + ] + }, + "UpdateProposal": { + "methods": [ + "update_proposal" + ] + } + } + } + } + }, "ReportService": { "clients": { "rest": { @@ -2324,6 +2575,45 @@ } } }, + "TrafficForecastSegmentService": { + "clients": { + "rest": { + "libraryClient": "TrafficForecastSegmentServiceClient", + "rpcs": { + "BatchCreateTrafficForecastSegments": { + "methods": [ + "batch_create_traffic_forecast_segments" + ] + }, + "BatchUpdateTrafficForecastSegments": { + "methods": [ + "batch_update_traffic_forecast_segments" + ] + }, + "CreateTrafficForecastSegment": { + "methods": [ + "create_traffic_forecast_segment" + ] + }, + "GetTrafficForecastSegment": { + "methods": [ + "get_traffic_forecast_segment" + ] + }, + "ListTrafficForecastSegments": { + "methods": [ + "list_traffic_forecast_segments" + ] + }, + "UpdateTrafficForecastSegment": { + "methods": [ + "update_traffic_forecast_segment" + ] + } + } + } + } + }, "UserService": { "clients": { "rest": { @@ -2411,6 +2701,79 @@ } } } + }, + "YieldGroupService": { + "clients": { + "rest": { + "libraryClient": "YieldGroupServiceClient", + "rpcs": { + "BatchActivateYieldGroups": { + "methods": [ + "batch_activate_yield_groups" + ] + }, + "BatchArchiveYieldGroups": { + "methods": [ + "batch_archive_yield_groups" + ] + }, + "BatchCreateYieldGroups": { + "methods": [ + "batch_create_yield_groups" + ] + }, + "BatchDeactivateYieldGroups": { + "methods": [ + "batch_deactivate_yield_groups" + ] + }, + "BatchUpdateYieldGroups": { + "methods": [ + "batch_update_yield_groups" + ] + }, + "CreateYieldGroup": { + "methods": [ + "create_yield_group" + ] + }, + "GetYieldGroup": { + "methods": [ + "get_yield_group" + ] + }, + "ListYieldGroups": { + "methods": [ + "list_yield_groups" + ] + }, + "UpdateYieldGroup": { + "methods": [ + "update_yield_group" + ] + } + } + } + } + }, + "YieldPartnerService": { + "clients": { + "rest": { + "libraryClient": "YieldPartnerServiceClient", + "rpcs": { + "GetYieldPartner": { + "methods": [ + "get_yield_partner" + ] + }, + "ListYieldPartners": { + "methods": [ + "list_yield_partners" + ] + } + } + } + } } } } diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/ad_rule_service/client.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/ad_rule_service/client.py index a62a58c34573..3bb360408812 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/services/ad_rule_service/client.py +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/ad_rule_service/client.py @@ -174,6 +174,25 @@ def transport(self) -> AdRuleServiceTransport: """ return self._transport + @staticmethod + def ad_category_path( + network_code: str, + ad_category: str, + ) -> str: + """Returns a fully-qualified ad_category string.""" + return "networks/{network_code}/adCategories/{ad_category}".format( + network_code=network_code, + ad_category=ad_category, + ) + + @staticmethod + def parse_ad_category_path(path: str) -> Dict[str, str]: + """Parses a ad_category path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/adCategories/(?P.+?)$", path + ) + return m.groupdict() if m else {} + @staticmethod def ad_rule_path( network_code: str, @@ -191,6 +210,23 @@ def parse_ad_rule_path(path: str) -> Dict[str, str]: m = re.match(r"^networks/(?P.+?)/adRules/(?P.+?)$", path) return m.groupdict() if m else {} + @staticmethod + def ad_spot_path( + network_code: str, + ad_spot: str, + ) -> str: + """Returns a fully-qualified ad_spot string.""" + return "networks/{network_code}/adSpots/{ad_spot}".format( + network_code=network_code, + ad_spot=ad_spot, + ) + + @staticmethod + def parse_ad_spot_path(path: str) -> Dict[str, str]: + """Parses a ad_spot path into its component segments.""" + m = re.match(r"^networks/(?P.+?)/adSpots/(?P.+?)$", path) + return m.groupdict() if m else {} + @staticmethod def ad_unit_path( network_code: str, @@ -363,6 +399,26 @@ def parse_content_bundle_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def content_label_path( + network_code: str, + content_label: str, + ) -> str: + """Returns a fully-qualified content_label string.""" + return "networks/{network_code}/contentLabels/{content_label}".format( + network_code=network_code, + content_label=content_label, + ) + + @staticmethod + def parse_content_label_path(path: str) -> Dict[str, str]: + """Parses a content_label path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/contentLabels/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def custom_targeting_key_path( network_code: str, @@ -486,6 +542,26 @@ def parse_geo_target_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def inventory_url_path( + network_code: str, + inventory_url: str, + ) -> str: + """Returns a fully-qualified inventory_url string.""" + return "networks/{network_code}/inventoryUrls/{inventory_url}".format( + network_code=network_code, + inventory_url=inventory_url, + ) + + @staticmethod + def parse_inventory_url_path(path: str) -> Dict[str, str]: + """Parses a inventory_url path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/inventoryUrls/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def mobile_carrier_path( network_code: str, @@ -620,6 +696,26 @@ def parse_placement_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def taxonomy_category_path( + network_code: str, + taxonomy_category: str, + ) -> str: + """Returns a fully-qualified taxonomy_category string.""" + return "networks/{network_code}/taxonomyCategories/{taxonomy_category}".format( + network_code=network_code, + taxonomy_category=taxonomy_category, + ) + + @staticmethod + def parse_taxonomy_category_path(path: str) -> Dict[str, str]: + """Parses a taxonomy_category path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/taxonomyCategories/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def common_billing_account_path( billing_account: str, diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/__init__.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/__init__.py new file mode 100644 index 000000000000..ed4a752a8b46 --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/__init__.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +from .client import AudienceSegmentCategoryServiceClient + +__all__ = ("AudienceSegmentCategoryServiceClient",) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/client.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/client.py new file mode 100644 index 000000000000..2adeabb4d638 --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/client.py @@ -0,0 +1,1022 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +import json +import logging as std_logging +import os +import re +import warnings +from collections import OrderedDict +from http import HTTPStatus +from typing import ( + Callable, + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, + cast, +) + +import google.protobuf +from google.api_core import client_options as client_options_lib +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.exceptions import MutualTLSChannelError # type: ignore +from google.auth.transport import mtls # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.ads.admanager_v1 import gapic_version as package_version +from google.ads.admanager_v1._compat import ( + get_api_endpoint, + get_default_mtls_endpoint, + get_universe_domain, + read_environment_variables, + should_use_client_cert, +) + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object, None] # type: ignore + +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = std_logging.getLogger(__name__) + +from google.longrunning import operations_pb2 # type: ignore + +from google.ads.admanager_v1.services.audience_segment_category_service import pagers +from google.ads.admanager_v1.types import ( + audience_segment_category_messages, + audience_segment_category_service, +) + +from .transports.base import ( + DEFAULT_CLIENT_INFO, + AudienceSegmentCategoryServiceTransport, +) +from .transports.rest import AudienceSegmentCategoryServiceRestTransport + + +class AudienceSegmentCategoryServiceClientMeta(type): + """Metaclass for the AudienceSegmentCategoryService client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + + _transport_registry = OrderedDict() # type: Dict[str, Type[AudienceSegmentCategoryServiceTransport]] + _transport_registry["rest"] = AudienceSegmentCategoryServiceRestTransport + + def get_transport_class( + cls, + label: Optional[str] = None, + ) -> Type[AudienceSegmentCategoryServiceTransport]: + """Returns an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class AudienceSegmentCategoryServiceClient( + metaclass=AudienceSegmentCategoryServiceClientMeta +): + """Provides methods for handling ``AudienceSegmentCategory`` objects.""" + + # Note: DEFAULT_ENDPOINT is deprecated. Use _DEFAULT_ENDPOINT_TEMPLATE instead. + DEFAULT_ENDPOINT = "admanager.googleapis.com" + DEFAULT_MTLS_ENDPOINT = get_default_mtls_endpoint(DEFAULT_ENDPOINT) + + _DEFAULT_ENDPOINT_TEMPLATE = "admanager.{UNIVERSE_DOMAIN}" + _DEFAULT_UNIVERSE = "googleapis.com" + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + AudienceSegmentCategoryServiceClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + @classmethod + def from_service_account_file(cls, filename: str, *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: + AudienceSegmentCategoryServiceClient: 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 + + @property + def transport(self) -> AudienceSegmentCategoryServiceTransport: + """Returns the transport used by the client instance. + + Returns: + AudienceSegmentCategoryServiceTransport: The transport used by the client + instance. + """ + return self._transport + + @staticmethod + def audience_segment_category_path( + network_code: str, + audience_segment_category: str, + ) -> str: + """Returns a fully-qualified audience_segment_category string.""" + return "networks/{network_code}/audienceSegmentCategories/{audience_segment_category}".format( + network_code=network_code, + audience_segment_category=audience_segment_category, + ) + + @staticmethod + def parse_audience_segment_category_path(path: str) -> Dict[str, str]: + """Parses a audience_segment_category path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/audienceSegmentCategories/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def network_path( + network_code: str, + ) -> str: + """Returns a fully-qualified network string.""" + return "networks/{network_code}".format( + network_code=network_code, + ) + + @staticmethod + def parse_network_path(path: str) -> Dict[str, str]: + """Parses a network path into its component segments.""" + m = re.match(r"^networks/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_billing_account_path( + billing_account: str, + ) -> str: + """Returns a fully-qualified billing_account string.""" + return "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + + @staticmethod + def parse_common_billing_account_path(path: str) -> Dict[str, str]: + """Parse a billing_account path into its component segments.""" + m = re.match(r"^billingAccounts/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_folder_path( + folder: str, + ) -> str: + """Returns a fully-qualified folder string.""" + return "folders/{folder}".format( + folder=folder, + ) + + @staticmethod + def parse_common_folder_path(path: str) -> Dict[str, str]: + """Parse a folder path into its component segments.""" + m = re.match(r"^folders/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_organization_path( + organization: str, + ) -> str: + """Returns a fully-qualified organization string.""" + return "organizations/{organization}".format( + organization=organization, + ) + + @staticmethod + def parse_common_organization_path(path: str) -> Dict[str, str]: + """Parse a organization path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_project_path( + project: str, + ) -> str: + """Returns a fully-qualified project string.""" + return "projects/{project}".format( + project=project, + ) + + @staticmethod + def parse_common_project_path(path: str) -> Dict[str, str]: + """Parse a project path into its component segments.""" + m = re.match(r"^projects/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_location_path( + project: str, + location: str, + ) -> str: + """Returns a fully-qualified location string.""" + return "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + + @staticmethod + def parse_common_location_path(path: str) -> Dict[str, str]: + """Parse a location path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[client_options_lib.ClientOptions] = None + ): + """Deprecated. Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variable is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + + warnings.warn( + "get_mtls_endpoint_and_cert_source is deprecated. Use the api_endpoint property instead.", + DeprecationWarning, + ) + if client_options is None: + client_options = client_options_lib.ClientOptions() + use_client_cert = should_use_client_cert() + use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") + if use_mtls_endpoint not in ("auto", "never", "always"): + raise MutualTLSChannelError( + "Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`" + ) + + # Figure out the client cert source to use. + client_cert_source = None + if use_client_cert: + if client_options.client_cert_source: + client_cert_source = client_options.client_cert_source + elif mtls.has_default_client_cert_source(): + client_cert_source = mtls.default_client_cert_source() + + # Figure out which api endpoint to use. + if client_options.api_endpoint is not None: + api_endpoint = client_options.api_endpoint + elif use_mtls_endpoint == "always" or ( + use_mtls_endpoint == "auto" and client_cert_source + ): + api_endpoint = cls.DEFAULT_MTLS_ENDPOINT # type: ignore + else: + api_endpoint = cls.DEFAULT_ENDPOINT + + return api_endpoint, client_cert_source + + @staticmethod + def _get_client_cert_source(provided_cert_source, use_cert_flag): + """Return the client cert source to be used by the client. + + Args: + provided_cert_source (bytes): The client certificate source provided. + use_cert_flag (bool): A flag indicating whether to use the client certificate. + + Returns: + bytes or None: The client cert source to be used by the client. + """ + client_cert_source = None + if use_cert_flag: + if provided_cert_source: + client_cert_source = provided_cert_source + elif mtls.has_default_client_cert_source(): + client_cert_source = mtls.default_client_cert_source() + return client_cert_source + + def _validate_universe_domain(self): + """Validates client's and credentials' universe domains are consistent. + + Returns: + bool: True iff the configured universe domain is valid. + + Raises: + ValueError: If the configured universe domain is not valid. + """ + + # NOTE (b/349488459): universe validation is disabled until further notice. + return True + + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + + @property + def api_endpoint(self) -> str: + """Return the API endpoint used by the client instance. + + Returns: + str: The API endpoint used by the client instance. + """ + return self._api_endpoint + + @property + def universe_domain(self) -> str: + """Return the universe domain used by the client instance. + + Returns: + str: The universe domain used by the client instance. + """ + return self._universe_domain + + def __init__( + self, + *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Optional[ + Union[ + str, + AudienceSegmentCategoryServiceTransport, + Callable[..., AudienceSegmentCategoryServiceTransport], + ] + ] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the audience segment category service client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Optional[Union[str,AudienceSegmentCategoryServiceTransport,Callable[..., AudienceSegmentCategoryServiceTransport]]]): + The transport to use, or a Callable that constructs and returns a new transport. + If a Callable is given, it will be called with the same set of initialization + arguments as used in the AudienceSegmentCategoryServiceTransport constructor. + If set to None, a transport is chosen automatically. + client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): + Custom options for the client. + + 1. The ``api_endpoint`` property can be used to override the + default endpoint provided by the client when ``transport`` is + not explicitly provided. Only if this property is not set and + ``transport`` was not explicitly provided, the endpoint is + determined by the GOOGLE_API_USE_MTLS_ENDPOINT environment + variable, which have one of the following values: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto-switch to the + default mTLS endpoint if client certificate is present; this is + the default value). + + 2. If the GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide a client certificate for mTLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + + 3. The ``universe_domain`` property can be used to override the + default "googleapis.com" universe. Note that the ``api_endpoint`` + property still takes precedence; and ``universe_domain`` is + currently not supported for mTLS. + + 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. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + """ + self._client_options = client_options + if isinstance(self._client_options, dict): + self._client_options = client_options_lib.from_dict(self._client_options) + if self._client_options is None: + self._client_options = client_options_lib.ClientOptions() + self._client_options = cast( + client_options_lib.ClientOptions, self._client_options + ) + + universe_domain_opt = getattr(self._client_options, "universe_domain", None) + + self._use_client_cert, self._use_mtls_endpoint, self._universe_domain_env = ( + read_environment_variables() + ) + self._client_cert_source = ( + AudienceSegmentCategoryServiceClient._get_client_cert_source( + self._client_options.client_cert_source, self._use_client_cert + ) + ) + self._universe_domain = get_universe_domain( + universe_domain_opt, + self._universe_domain_env, + default_universe=AudienceSegmentCategoryServiceClient._DEFAULT_UNIVERSE, + ) + self._api_endpoint: str = "" # updated below, depending on `transport` + + # Initialize the universe domain validation. + self._is_universe_domain_valid = False + + if CLIENT_LOGGING_SUPPORTED: # pragma: NO COVER + # Setup logging. + client_logging.initialize_logging() + + api_key_value = getattr(self._client_options, "api_key", None) + if api_key_value and credentials: + raise ValueError( + "client_options.api_key and credentials are mutually exclusive" + ) + + # Save or instantiate the transport. + # Ordinarily, we provide the transport, but allowing a custom transport + # instance provides an extensibility point for unusual situations. + transport_provided = isinstance( + transport, AudienceSegmentCategoryServiceTransport + ) + if transport_provided: + # transport is a AudienceSegmentCategoryServiceTransport instance. + if credentials or self._client_options.credentials_file or api_key_value: + raise ValueError( + "When providing a transport instance, " + "provide its credentials directly." + ) + if self._client_options.scopes: + raise ValueError( + "When providing a transport instance, provide its scopes directly." + ) + self._transport = cast(AudienceSegmentCategoryServiceTransport, transport) + self._api_endpoint = self._transport.host + + self._api_endpoint = self._api_endpoint or get_api_endpoint( + api_override=self._client_options.api_endpoint, + universe_domain=self._universe_domain, + default_universe=AudienceSegmentCategoryServiceClient._DEFAULT_UNIVERSE, + default_mtls_endpoint=AudienceSegmentCategoryServiceClient.DEFAULT_MTLS_ENDPOINT, + default_endpoint_template=AudienceSegmentCategoryServiceClient._DEFAULT_ENDPOINT_TEMPLATE, + use_mtls=self._use_mtls_endpoint == "always" + or (self._use_mtls_endpoint == "auto" and self._client_cert_source), + ) + + if not transport_provided: + import google.auth._default # type: ignore + + if api_key_value and hasattr( + google.auth._default, "get_api_key_credentials" + ): + credentials = google.auth._default.get_api_key_credentials( + api_key_value + ) + + transport_init: Union[ + Type[AudienceSegmentCategoryServiceTransport], + Callable[..., AudienceSegmentCategoryServiceTransport], + ] = ( + AudienceSegmentCategoryServiceClient.get_transport_class(transport) + if isinstance(transport, str) or transport is None + else cast( + Callable[..., AudienceSegmentCategoryServiceTransport], transport + ) + ) + # initialize with the provided callable or the passed in class + self._transport = transport_init( + credentials=credentials, + credentials_file=self._client_options.credentials_file, + host=self._api_endpoint, + scopes=self._client_options.scopes, + client_cert_source_for_mtls=self._client_cert_source, + quota_project_id=self._client_options.quota_project_id, + client_info=client_info, + always_use_jwt_access=True, + api_audience=self._client_options.api_audience, + ) + + if "async" not in str(self._transport): + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + std_logging.DEBUG + ): # pragma: NO COVER + _LOGGER.debug( + "Created client `google.ads.admanager_v1.AudienceSegmentCategoryServiceClient`.", + extra={ + "serviceName": "google.ads.admanager.v1.AudienceSegmentCategoryService", + "universeDomain": getattr( + self._transport._credentials, "universe_domain", "" + ), + "credentialsType": f"{type(self._transport._credentials).__module__}.{type(self._transport._credentials).__qualname__}", + "credentialsInfo": getattr( + self.transport._credentials, "get_cred_info", lambda: None + )(), + } + if hasattr(self._transport, "_credentials") + else { + "serviceName": "google.ads.admanager.v1.AudienceSegmentCategoryService", + "credentialsType": None, + }, + ) + + def get_audience_segment_category( + self, + request: Optional[ + Union[ + audience_segment_category_service.GetAudienceSegmentCategoryRequest, + dict, + ] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> audience_segment_category_messages.AudienceSegmentCategory: + r"""Retrieves a ``AudienceSegmentCategory`` object. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_get_audience_segment_category(): + # Create a client + client = admanager_v1.AudienceSegmentCategoryServiceClient() + + # Initialize request argument(s) + request = admanager_v1.GetAudienceSegmentCategoryRequest( + name="name_value", + ) + + # Make the request + response = client.get_audience_segment_category(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.GetAudienceSegmentCategoryRequest, dict]): + The request object. Request object for ``GetAudienceSegmentCategory`` + method. + name (str): + Required. The resource name of the + AudienceSegmentCategory. Format: + ``networks/{network_code}/audienceSegmentCategories/{audience_segment_category_id}`` + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.AudienceSegmentCategory: + The category of an audience segment. + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [name] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, audience_segment_category_service.GetAudienceSegmentCategoryRequest + ): + request = ( + audience_segment_category_service.GetAudienceSegmentCategoryRequest( + request + ) + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.get_audience_segment_category + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_audience_segment_categories( + self, + request: Optional[ + Union[ + audience_segment_category_service.ListAudienceSegmentCategoriesRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> pagers.ListAudienceSegmentCategoriesPager: + r"""Lists ``AudienceSegmentCategory`` objects. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_list_audience_segment_categories(): + # Create a client + client = admanager_v1.AudienceSegmentCategoryServiceClient() + + # Initialize request argument(s) + request = admanager_v1.ListAudienceSegmentCategoriesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_audience_segment_categories(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.ListAudienceSegmentCategoriesRequest, dict]): + The request object. Request object for ``ListAudienceSegmentCategories`` + method. + parent (str): + Required. The parent, which owns this collection of + AudienceSegmentCategories. Format: + ``networks/{network_code}`` + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.services.audience_segment_category_service.pagers.ListAudienceSegmentCategoriesPager: + Response object for ListAudienceSegmentCategoriesRequest containing + matching AudienceSegmentCategory objects. + + Iterating over this object will yield results and + resolve additional pages automatically. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, + audience_segment_category_service.ListAudienceSegmentCategoriesRequest, + ): + request = ( + audience_segment_category_service.ListAudienceSegmentCategoriesRequest( + request + ) + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.list_audience_segment_categories + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListAudienceSegmentCategoriesPager( + method=rpc, + request=request, + response=response, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def __enter__(self) -> "AudienceSegmentCategoryServiceClient": + return self + + def __exit__(self, type, value, traceback): + """Releases underlying transport's resources. + + .. warning:: + ONLY use as a context manager if the transport is NOT shared + with other clients! Exiting the with block will CLOSE the transport + and may cause errors in other clients! + """ + self.transport.close() + + def get_operation( + self, + request: Optional[Union[operations_pb2.GetOperationRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> operations_pb2.Operation: + r"""Gets the latest state of a long-running operation. + + Args: + request (:class:`~.operations_pb2.GetOperationRequest`): + The request object. Request message for + `GetOperation` method. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + Returns: + ~.operations_pb2.Operation: + An ``Operation`` object. + """ + # Create or coerce a protobuf request object. + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if request is None: + request_pb = operations_pb2.GetOperationRequest() + elif isinstance(request, dict): + request_pb = operations_pb2.GetOperationRequest(**request) + else: + request_pb = request + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_operation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request_pb.name),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + try: + # Send the request. + response = rpc( + request_pb, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e + + def cancel_operation( + self, + request: Optional[Union[operations_pb2.CancelOperationRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> None: + r"""Starts asynchronous cancellation on a long-running operation. + + The server makes a best effort to cancel the operation, but success + is not guaranteed. If the server doesn't support this method, it returns + `google.rpc.Code.UNIMPLEMENTED`. + + Args: + request (:class:`~.operations_pb2.CancelOperationRequest`): + The request object. Request message for + `CancelOperation` method. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + Returns: + None + """ + # Create or coerce a protobuf request object. + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if request is None: + request_pb = operations_pb2.CancelOperationRequest() + elif isinstance(request, dict): + request_pb = operations_pb2.CancelOperationRequest(**request) + else: + request_pb = request + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.cancel_operation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request_pb.name),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + rpc( + request_pb, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) +DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + +__all__ = ("AudienceSegmentCategoryServiceClient",) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/pagers.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/pagers.py new file mode 100644 index 000000000000..05aec7a08c3d --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/pagers.py @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +from typing import ( + Any, + AsyncIterator, + Awaitable, + Callable, + Iterator, + Optional, + Sequence, + Tuple, + Union, +) + +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.api_core import retry_async as retries_async + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] + OptionalAsyncRetry = Union[ + retries_async.AsyncRetry, gapic_v1.method._MethodDefault, None + ] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object, None] # type: ignore + OptionalAsyncRetry = Union[retries_async.AsyncRetry, object, None] # type: ignore + +from google.ads.admanager_v1.types import ( + audience_segment_category_messages, + audience_segment_category_service, +) + + +class ListAudienceSegmentCategoriesPager: + """A pager for iterating through ``list_audience_segment_categories`` requests. + + This class thinly wraps an initial + :class:`google.ads.admanager_v1.types.ListAudienceSegmentCategoriesResponse` object, and + provides an ``__iter__`` method to iterate through its + ``audience_segment_categories`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListAudienceSegmentCategories`` requests and continue to iterate + through the ``audience_segment_categories`` field on the + corresponding responses. + + All the usual :class:`google.ads.admanager_v1.types.ListAudienceSegmentCategoriesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[ + ..., audience_segment_category_service.ListAudienceSegmentCategoriesResponse + ], + request: audience_segment_category_service.ListAudienceSegmentCategoriesRequest, + response: audience_segment_category_service.ListAudienceSegmentCategoriesResponse, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.ads.admanager_v1.types.ListAudienceSegmentCategoriesRequest): + The initial request object. + response (google.ads.admanager_v1.types.ListAudienceSegmentCategoriesResponse): + The initial response object. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + """ + self._method = method + self._request = ( + audience_segment_category_service.ListAudienceSegmentCategoriesRequest( + request + ) + ) + self._response = response + self._retry = retry + self._timeout = timeout + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages( + self, + ) -> Iterator[ + audience_segment_category_service.ListAudienceSegmentCategoriesResponse + ]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method( + self._request, + retry=self._retry, + timeout=self._timeout, + metadata=self._metadata, + ) + yield self._response + + def __iter__( + self, + ) -> Iterator[audience_segment_category_messages.AudienceSegmentCategory]: + for page in self.pages: + yield from page.audience_segment_categories + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/README.rst b/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/README.rst new file mode 100644 index 000000000000..89fdf77f6fa1 --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/README.rst @@ -0,0 +1,10 @@ + +transport inheritance structure +_______________________________ + +``AudienceSegmentCategoryServiceTransport`` is the ABC for all transports. + +- public child ``AudienceSegmentCategoryServiceGrpcTransport`` for sync gRPC transport (defined in ``grpc.py``). +- public child ``AudienceSegmentCategoryServiceGrpcAsyncIOTransport`` for async gRPC transport (defined in ``grpc_asyncio.py``). +- private child ``_BaseAudienceSegmentCategoryServiceRestTransport`` for base REST transport with inner classes ``_BaseMETHOD`` (defined in ``rest_base.py``). +- public child ``AudienceSegmentCategoryServiceRestTransport`` for sync REST transport with inner classes ``METHOD`` derived from the parent's corresponding ``_BaseMETHOD`` classes (defined in ``rest.py``). diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/__init__.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/__init__.py new file mode 100644 index 000000000000..05fd14dca785 --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/__init__.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +from collections import OrderedDict +from typing import Dict, Type + +from .base import AudienceSegmentCategoryServiceTransport +from .rest import ( + AudienceSegmentCategoryServiceRestInterceptor, + AudienceSegmentCategoryServiceRestTransport, +) + +# Compile a registry of transports. +_transport_registry = OrderedDict() # type: Dict[str, Type[AudienceSegmentCategoryServiceTransport]] +_transport_registry["rest"] = AudienceSegmentCategoryServiceRestTransport + +__all__ = ( + "AudienceSegmentCategoryServiceTransport", + "AudienceSegmentCategoryServiceRestTransport", + "AudienceSegmentCategoryServiceRestInterceptor", +) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/base.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/base.py new file mode 100644 index 000000000000..b10d6ed0af5f --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/base.py @@ -0,0 +1,230 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +import abc +from typing import Awaitable, Callable, Dict, Optional, Sequence, Union + +import google.api_core +import google.auth # type: ignore +import google.protobuf +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.auth import credentials as ga_credentials # type: ignore +from google.longrunning import operations_pb2 # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.ads.admanager_v1 import gapic_version as package_version +from google.ads.admanager_v1.types import ( + audience_segment_category_messages, + audience_segment_category_service, +) + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) +DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + + +class AudienceSegmentCategoryServiceTransport(abc.ABC): + """Abstract transport class for AudienceSegmentCategoryService.""" + + AUTH_SCOPES = ( + "https://www.googleapis.com/auth/admanager", + "https://www.googleapis.com/auth/admanager.readonly", + ) + + DEFAULT_HOST: str = "admanager.googleapis.com" + + def __init__( + self, + *, + host: str = DEFAULT_HOST, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + **kwargs, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to (default: 'admanager.googleapis.com'). + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + credentials_file (Optional[str]): Deprecated. A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. This argument will be + removed in the next major version of this library. + scopes (Optional[Sequence[str]]): A list of scopes. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + api_audience (Optional[str]): The intended audience for the API calls + to the service that will be set when using certain 3rd party + authentication flows. Audience is typically a resource identifier. + If not set, the host value will be used as a default. + """ + + # Save the scopes. + self._scopes = scopes + if not hasattr(self, "_ignore_credentials"): + self._ignore_credentials: bool = False + + # If no credentials are provided, then determine the appropriate + # defaults. + if credentials and credentials_file: + raise core_exceptions.DuplicateCredentialArgs( + "'credentials_file' and 'credentials' are mutually exclusive" + ) + + if credentials_file is not None: + credentials, _ = google.auth.load_credentials_from_file( + credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + default_scopes=self.AUTH_SCOPES, + ) + elif credentials is None and not self._ignore_credentials: + credentials, _ = google.auth.default( + scopes=scopes, + quota_project_id=quota_project_id, + default_scopes=self.AUTH_SCOPES, + ) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience( + api_audience if api_audience else host + ) + + # If the credentials are service account credentials, then always try to use self signed JWT. + if ( + always_use_jwt_access + and isinstance(credentials, service_account.Credentials) + and hasattr(service_account.Credentials, "with_always_use_jwt_access") + ): + credentials = credentials.with_always_use_jwt_access(True) + + # Save the credentials. + self._credentials = credentials + + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + + self._wrapped_methods: Dict[Callable, Callable] = {} + + @property + def host(self): + return self._host + + def _prep_wrapped_messages(self, client_info): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.get_audience_segment_category: gapic_v1.method.wrap_method( + self.get_audience_segment_category, + default_timeout=None, + client_info=client_info, + ), + self.list_audience_segment_categories: gapic_v1.method.wrap_method( + self.list_audience_segment_categories, + default_timeout=None, + client_info=client_info, + ), + self.cancel_operation: gapic_v1.method.wrap_method( + self.cancel_operation, + default_timeout=None, + client_info=client_info, + ), + self.get_operation: gapic_v1.method.wrap_method( + self.get_operation, + default_timeout=None, + client_info=client_info, + ), + } + + def close(self): + """Closes resources associated with the transport. + + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! + """ + raise NotImplementedError() + + @property + def get_audience_segment_category( + self, + ) -> Callable[ + [audience_segment_category_service.GetAudienceSegmentCategoryRequest], + Union[ + audience_segment_category_messages.AudienceSegmentCategory, + Awaitable[audience_segment_category_messages.AudienceSegmentCategory], + ], + ]: + raise NotImplementedError() + + @property + def list_audience_segment_categories( + self, + ) -> Callable[ + [audience_segment_category_service.ListAudienceSegmentCategoriesRequest], + Union[ + audience_segment_category_service.ListAudienceSegmentCategoriesResponse, + Awaitable[ + audience_segment_category_service.ListAudienceSegmentCategoriesResponse + ], + ], + ]: + raise NotImplementedError() + + @property + def get_operation( + self, + ) -> Callable[ + [operations_pb2.GetOperationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def cancel_operation( + self, + ) -> Callable[ + [operations_pb2.CancelOperationRequest], + None, + ]: + raise NotImplementedError() + + @property + def kind(self) -> str: + raise NotImplementedError() + + +__all__ = ("AudienceSegmentCategoryServiceTransport",) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/rest.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/rest.py new file mode 100644 index 000000000000..0999d504de4c --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/rest.py @@ -0,0 +1,957 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +import dataclasses +import json # type: ignore +import logging +import warnings +from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union + +import google.protobuf +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1, rest_helpers, rest_streaming +from google.api_core import retry as retries +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.requests import AuthorizedSession # type: ignore +from google.longrunning import operations_pb2 # type: ignore +from google.protobuf import json_format +from requests import __version__ as requests_version + +from google.ads.admanager_v1._compat import transcode_request +from google.ads.admanager_v1.types import ( + audience_segment_category_messages, + audience_segment_category_service, +) + +from .base import DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO +from .rest_base import _BaseAudienceSegmentCategoryServiceRestTransport + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object, None] # type: ignore + +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = logging.getLogger(__name__) + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, + grpc_version=None, + rest_version=f"requests@{requests_version}", +) + +DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + + +class AudienceSegmentCategoryServiceRestInterceptor: + """Interceptor for AudienceSegmentCategoryService. + + Interceptors are used to manipulate requests, request metadata, and responses + in arbitrary ways. + Example use cases include: + * Logging + * Verifying requests according to service or custom semantics + * Stripping extraneous information from responses + + These use cases and more can be enabled by injecting an + instance of a custom subclass when constructing the AudienceSegmentCategoryServiceRestTransport. + + .. code-block:: python + class MyCustomAudienceSegmentCategoryServiceInterceptor(AudienceSegmentCategoryServiceRestInterceptor): + def pre_get_audience_segment_category(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_audience_segment_category(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_audience_segment_categories(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_audience_segment_categories(self, response): + logging.log(f"Received response: {response}") + return response + + transport = AudienceSegmentCategoryServiceRestTransport(interceptor=MyCustomAudienceSegmentCategoryServiceInterceptor()) + client = AudienceSegmentCategoryServiceClient(transport=transport) + + + """ + + def pre_get_audience_segment_category( + self, + request: audience_segment_category_service.GetAudienceSegmentCategoryRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + audience_segment_category_service.GetAudienceSegmentCategoryRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for get_audience_segment_category + + Override in a subclass to manipulate the request or metadata + before they are sent to the AudienceSegmentCategoryService server. + """ + return request, metadata + + def post_get_audience_segment_category( + self, response: audience_segment_category_messages.AudienceSegmentCategory + ) -> audience_segment_category_messages.AudienceSegmentCategory: + """Post-rpc interceptor for get_audience_segment_category + + DEPRECATED. Please use the `post_get_audience_segment_category_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the AudienceSegmentCategoryService server but before + it is returned to user code. This `post_get_audience_segment_category` interceptor runs + before the `post_get_audience_segment_category_with_metadata` interceptor. + """ + return response + + def post_get_audience_segment_category_with_metadata( + self, + response: audience_segment_category_messages.AudienceSegmentCategory, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + audience_segment_category_messages.AudienceSegmentCategory, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for get_audience_segment_category + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AudienceSegmentCategoryService server but before it is returned to user code. + + We recommend only using this `post_get_audience_segment_category_with_metadata` + interceptor in new development instead of the `post_get_audience_segment_category` interceptor. + When both interceptors are used, this `post_get_audience_segment_category_with_metadata` interceptor runs after the + `post_get_audience_segment_category` interceptor. The (possibly modified) response returned by + `post_get_audience_segment_category` will be passed to + `post_get_audience_segment_category_with_metadata`. + """ + return response, metadata + + def pre_list_audience_segment_categories( + self, + request: audience_segment_category_service.ListAudienceSegmentCategoriesRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + audience_segment_category_service.ListAudienceSegmentCategoriesRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for list_audience_segment_categories + + Override in a subclass to manipulate the request or metadata + before they are sent to the AudienceSegmentCategoryService server. + """ + return request, metadata + + def post_list_audience_segment_categories( + self, + response: audience_segment_category_service.ListAudienceSegmentCategoriesResponse, + ) -> audience_segment_category_service.ListAudienceSegmentCategoriesResponse: + """Post-rpc interceptor for list_audience_segment_categories + + DEPRECATED. Please use the `post_list_audience_segment_categories_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the AudienceSegmentCategoryService server but before + it is returned to user code. This `post_list_audience_segment_categories` interceptor runs + before the `post_list_audience_segment_categories_with_metadata` interceptor. + """ + return response + + def post_list_audience_segment_categories_with_metadata( + self, + response: audience_segment_category_service.ListAudienceSegmentCategoriesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + audience_segment_category_service.ListAudienceSegmentCategoriesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_audience_segment_categories + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AudienceSegmentCategoryService server but before it is returned to user code. + + We recommend only using this `post_list_audience_segment_categories_with_metadata` + interceptor in new development instead of the `post_list_audience_segment_categories` interceptor. + When both interceptors are used, this `post_list_audience_segment_categories_with_metadata` interceptor runs after the + `post_list_audience_segment_categories` interceptor. The (possibly modified) response returned by + `post_list_audience_segment_categories` will be passed to + `post_list_audience_segment_categories_with_metadata`. + """ + return response, metadata + + def pre_cancel_operation( + self, + request: operations_pb2.CancelOperationRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + operations_pb2.CancelOperationRequest, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Pre-rpc interceptor for cancel_operation + + Override in a subclass to manipulate the request or metadata + before they are sent to the AudienceSegmentCategoryService server. + """ + return request, metadata + + def post_cancel_operation(self, response: None) -> None: + """Post-rpc interceptor for cancel_operation + + Override in a subclass to manipulate the response + after it is returned by the AudienceSegmentCategoryService server but before + it is returned to user code. + """ + return response + + def pre_get_operation( + self, + request: operations_pb2.GetOperationRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + operations_pb2.GetOperationRequest, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Pre-rpc interceptor for get_operation + + Override in a subclass to manipulate the request or metadata + before they are sent to the AudienceSegmentCategoryService server. + """ + return request, metadata + + def post_get_operation( + self, response: operations_pb2.Operation + ) -> operations_pb2.Operation: + """Post-rpc interceptor for get_operation + + Override in a subclass to manipulate the response + after it is returned by the AudienceSegmentCategoryService server but before + it is returned to user code. + """ + return response + + +@dataclasses.dataclass +class AudienceSegmentCategoryServiceRestStub: + _session: AuthorizedSession + _host: str + _interceptor: AudienceSegmentCategoryServiceRestInterceptor + + +class AudienceSegmentCategoryServiceRestTransport( + _BaseAudienceSegmentCategoryServiceRestTransport +): + """REST backend synchronous transport for AudienceSegmentCategoryService. + + Provides methods for handling ``AudienceSegmentCategory`` objects. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends JSON representations of protocol buffers over HTTP/1.1 + """ + + def __init__( + self, + *, + host: str = "admanager.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + url_scheme: str = "https", + interceptor: Optional[AudienceSegmentCategoryServiceRestInterceptor] = None, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to (default: 'admanager.googleapis.com'). + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + + credentials_file (Optional[str]): Deprecated. A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. This argument will be + removed in the next major version of this library. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client + certificate to configure mutual TLS HTTP channel. It is ignored + if ``channel`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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 are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + interceptor (Optional[AudienceSegmentCategoryServiceRestInterceptor]): Interceptor used + to manipulate requests, request metadata, and responses. + api_audience (Optional[str]): The intended audience for the API calls + to the service that will be set when using certain 3rd party + authentication flows. Audience is typically a resource identifier. + If not set, the host value will be used as a default. + """ + # Run the base constructor + # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. + # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the + # credentials object + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + url_scheme=url_scheme, + api_audience=api_audience, + ) + self._session = AuthorizedSession( + self._credentials, default_host=self.DEFAULT_HOST + ) + if client_cert_source_for_mtls: + self._session.configure_mtls_channel(client_cert_source_for_mtls) + self._interceptor = ( + interceptor or AudienceSegmentCategoryServiceRestInterceptor() + ) + self._prep_wrapped_messages(client_info) + + class _GetAudienceSegmentCategory( + _BaseAudienceSegmentCategoryServiceRestTransport._BaseGetAudienceSegmentCategory, + AudienceSegmentCategoryServiceRestStub, + ): + def __hash__(self): + return hash( + "AudienceSegmentCategoryServiceRestTransport.GetAudienceSegmentCategory" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response + + def __call__( + self, + request: audience_segment_category_service.GetAudienceSegmentCategoryRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> audience_segment_category_messages.AudienceSegmentCategory: + r"""Call the get audience segment + category method over HTTP. + + Args: + request (~.audience_segment_category_service.GetAudienceSegmentCategoryRequest): + The request object. Request object for ``GetAudienceSegmentCategory`` + method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.audience_segment_category_messages.AudienceSegmentCategory: + The category of an audience segment. + """ + + http_options = _BaseAudienceSegmentCategoryServiceRestTransport._BaseGetAudienceSegmentCategory._get_http_options() + request, metadata = self._interceptor.pre_get_audience_segment_category( + request, metadata + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseAudienceSegmentCategoryServiceRestTransport._BaseGetAudienceSegmentCategory, + "_BaseGetAudienceSegmentCategory__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.AudienceSegmentCategoryServiceClient.GetAudienceSegmentCategory", + extra={ + "serviceName": "google.ads.admanager.v1.AudienceSegmentCategoryService", + "rpcName": "GetAudienceSegmentCategory", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = AudienceSegmentCategoryServiceRestTransport._GetAudienceSegmentCategory._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = audience_segment_category_messages.AudienceSegmentCategory() + pb_resp = audience_segment_category_messages.AudienceSegmentCategory.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_get_audience_segment_category(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = ( + self._interceptor.post_get_audience_segment_category_with_metadata( + resp, response_metadata + ) + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = audience_segment_category_messages.AudienceSegmentCategory.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.AudienceSegmentCategoryServiceClient.get_audience_segment_category", + extra={ + "serviceName": "google.ads.admanager.v1.AudienceSegmentCategoryService", + "rpcName": "GetAudienceSegmentCategory", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _ListAudienceSegmentCategories( + _BaseAudienceSegmentCategoryServiceRestTransport._BaseListAudienceSegmentCategories, + AudienceSegmentCategoryServiceRestStub, + ): + def __hash__(self): + return hash( + "AudienceSegmentCategoryServiceRestTransport.ListAudienceSegmentCategories" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response + + def __call__( + self, + request: audience_segment_category_service.ListAudienceSegmentCategoriesRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> audience_segment_category_service.ListAudienceSegmentCategoriesResponse: + r"""Call the list audience segment + categories method over HTTP. + + Args: + request (~.audience_segment_category_service.ListAudienceSegmentCategoriesRequest): + The request object. Request object for ``ListAudienceSegmentCategories`` + method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.audience_segment_category_service.ListAudienceSegmentCategoriesResponse: + Response object for + ``ListAudienceSegmentCategoriesRequest`` containing + matching ``AudienceSegmentCategory`` objects. + + """ + + http_options = _BaseAudienceSegmentCategoryServiceRestTransport._BaseListAudienceSegmentCategories._get_http_options() + request, metadata = self._interceptor.pre_list_audience_segment_categories( + request, metadata + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseAudienceSegmentCategoryServiceRestTransport._BaseListAudienceSegmentCategories, + "_BaseListAudienceSegmentCategories__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.AudienceSegmentCategoryServiceClient.ListAudienceSegmentCategories", + extra={ + "serviceName": "google.ads.admanager.v1.AudienceSegmentCategoryService", + "rpcName": "ListAudienceSegmentCategories", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = AudienceSegmentCategoryServiceRestTransport._ListAudienceSegmentCategories._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = audience_segment_category_service.ListAudienceSegmentCategoriesResponse() + pb_resp = audience_segment_category_service.ListAudienceSegmentCategoriesResponse.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_list_audience_segment_categories(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = ( + self._interceptor.post_list_audience_segment_categories_with_metadata( + resp, response_metadata + ) + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = audience_segment_category_service.ListAudienceSegmentCategoriesResponse.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.AudienceSegmentCategoryServiceClient.list_audience_segment_categories", + extra={ + "serviceName": "google.ads.admanager.v1.AudienceSegmentCategoryService", + "rpcName": "ListAudienceSegmentCategories", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + @property + def get_audience_segment_category( + self, + ) -> Callable[ + [audience_segment_category_service.GetAudienceSegmentCategoryRequest], + audience_segment_category_messages.AudienceSegmentCategory, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetAudienceSegmentCategory( + self._session, self._host, self._interceptor + ) # type: ignore + + @property + def list_audience_segment_categories( + self, + ) -> Callable[ + [audience_segment_category_service.ListAudienceSegmentCategoriesRequest], + audience_segment_category_service.ListAudienceSegmentCategoriesResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListAudienceSegmentCategories( + self._session, self._host, self._interceptor + ) # type: ignore + + @property + def cancel_operation(self): + return self._CancelOperation(self._session, self._host, self._interceptor) # type: ignore + + class _CancelOperation( + _BaseAudienceSegmentCategoryServiceRestTransport._BaseCancelOperation, + AudienceSegmentCategoryServiceRestStub, + ): + def __hash__(self): + return hash("AudienceSegmentCategoryServiceRestTransport.CancelOperation") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response + + def __call__( + self, + request: operations_pb2.CancelOperationRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> None: + r"""Call the cancel operation method over HTTP. + + Args: + request (operations_pb2.CancelOperationRequest): + The request object for CancelOperation method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + """ + + http_options = _BaseAudienceSegmentCategoryServiceRestTransport._BaseCancelOperation._get_http_options() + request, metadata = self._interceptor.pre_cancel_operation( + request, metadata + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseAudienceSegmentCategoryServiceRestTransport._BaseCancelOperation, + "_BaseCancelOperation__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=False, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = json_format.MessageToJson(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.AudienceSegmentCategoryServiceClient.CancelOperation", + extra={ + "serviceName": "google.ads.admanager.v1.AudienceSegmentCategoryService", + "rpcName": "CancelOperation", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = AudienceSegmentCategoryServiceRestTransport._CancelOperation._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + return self._interceptor.post_cancel_operation(None) + + @property + def get_operation(self): + return self._GetOperation(self._session, self._host, self._interceptor) # type: ignore + + class _GetOperation( + _BaseAudienceSegmentCategoryServiceRestTransport._BaseGetOperation, + AudienceSegmentCategoryServiceRestStub, + ): + def __hash__(self): + return hash("AudienceSegmentCategoryServiceRestTransport.GetOperation") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response + + def __call__( + self, + request: operations_pb2.GetOperationRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> operations_pb2.Operation: + r"""Call the get operation method over HTTP. + + Args: + request (operations_pb2.GetOperationRequest): + The request object for GetOperation method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + operations_pb2.Operation: Response from GetOperation method. + """ + + http_options = _BaseAudienceSegmentCategoryServiceRestTransport._BaseGetOperation._get_http_options() + request, metadata = self._interceptor.pre_get_operation(request, metadata) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseAudienceSegmentCategoryServiceRestTransport._BaseGetOperation, + "_BaseGetOperation__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=False, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = json_format.MessageToJson(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.AudienceSegmentCategoryServiceClient.GetOperation", + extra={ + "serviceName": "google.ads.admanager.v1.AudienceSegmentCategoryService", + "rpcName": "GetOperation", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = ( + AudienceSegmentCategoryServiceRestTransport._GetOperation._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + ) + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + content = response.content.decode("utf-8") + resp = operations_pb2.Operation() + resp = json_format.Parse(content, resp) + resp = self._interceptor.post_get_operation(resp) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = json_format.MessageToJson(resp) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.AudienceSegmentCategoryServiceAsyncClient.GetOperation", + extra={ + "serviceName": "google.ads.admanager.v1.AudienceSegmentCategoryService", + "rpcName": "GetOperation", + "httpResponse": http_response, + "metadata": http_response["headers"], + }, + ) + return resp + + @property + def kind(self) -> str: + return "rest" + + def close(self): + self._session.close() + + +__all__ = ("AudienceSegmentCategoryServiceRestTransport",) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/rest_base.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/rest_base.py new file mode 100644 index 000000000000..079bb7a794b0 --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/audience_segment_category_service/transports/rest_base.py @@ -0,0 +1,157 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +import json # type: ignore +import re +from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union + +from google.api_core import gapic_v1, path_template +from google.longrunning import operations_pb2 # type: ignore +from google.protobuf import json_format + +from google.ads.admanager_v1.types import ( + audience_segment_category_messages, + audience_segment_category_service, +) + +from .base import DEFAULT_CLIENT_INFO, AudienceSegmentCategoryServiceTransport + + +class _BaseAudienceSegmentCategoryServiceRestTransport( + AudienceSegmentCategoryServiceTransport +): + """Base REST backend transport for AudienceSegmentCategoryService. + + Note: This class is not meant to be used directly. Use its sync and + async sub-classes instead. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends JSON representations of protocol buffers over HTTP/1.1 + """ + + def __init__( + self, + *, + host: str = "admanager.googleapis.com", + credentials: Optional[Any] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + url_scheme: str = "https", + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + Args: + host (Optional[str]): + The hostname to connect to (default: 'admanager.googleapis.com'). + credentials (Optional[Any]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + 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 are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + """ + # Run the base constructor + maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) + if maybe_url_match is None: + raise ValueError( + f"Unexpected hostname structure: {host}" + ) # pragma: NO COVER + + url_match_items = maybe_url_match.groupdict() + + host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host + + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + class _BaseGetAudienceSegmentCategory: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{name=networks/*/audienceSegmentCategories/*}", + }, + ] + return http_options + + class _BaseListAudienceSegmentCategories: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{parent=networks/*}/audienceSegmentCategories", + }, + ] + return http_options + + class _BaseCancelOperation: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{name=networks/*/operations/reports/runs/*}:cancel", + }, + ] + return http_options + + class _BaseGetOperation: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{name=networks/*/operations/reports/runs/*}", + }, + ] + return http_options + + +__all__ = ("_BaseAudienceSegmentCategoryServiceRestTransport",) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/__init__.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/__init__.py new file mode 100644 index 000000000000..8b5c20fab21e --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/__init__.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +from .client import ChangeEventServiceClient + +__all__ = ("ChangeEventServiceClient",) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/client.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/client.py new file mode 100644 index 000000000000..2d7b75882a6b --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/client.py @@ -0,0 +1,1002 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +import json +import logging as std_logging +import os +import re +import warnings +from collections import OrderedDict +from http import HTTPStatus +from typing import ( + Callable, + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, + cast, +) + +import google.protobuf +from google.api_core import client_options as client_options_lib +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.exceptions import MutualTLSChannelError # type: ignore +from google.auth.transport import mtls # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.ads.admanager_v1 import gapic_version as package_version +from google.ads.admanager_v1._compat import ( + get_api_endpoint, + get_default_mtls_endpoint, + get_universe_domain, + read_environment_variables, + should_use_client_cert, +) + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object, None] # type: ignore + +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = std_logging.getLogger(__name__) + +import google.protobuf.timestamp_pb2 as timestamp_pb2 # type: ignore +from google.longrunning import operations_pb2 # type: ignore + +from google.ads.admanager_v1.services.change_event_service import pagers +from google.ads.admanager_v1.types import ( + change_event_enums, + change_event_messages, + change_event_service, +) + +from .transports.base import DEFAULT_CLIENT_INFO, ChangeEventServiceTransport +from .transports.rest import ChangeEventServiceRestTransport + + +class ChangeEventServiceClientMeta(type): + """Metaclass for the ChangeEventService client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + + _transport_registry = OrderedDict() # type: Dict[str, Type[ChangeEventServiceTransport]] + _transport_registry["rest"] = ChangeEventServiceRestTransport + + def get_transport_class( + cls, + label: Optional[str] = None, + ) -> Type[ChangeEventServiceTransport]: + """Returns an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class ChangeEventServiceClient(metaclass=ChangeEventServiceClientMeta): + """Provides methods for handling ``ChangeEvent`` objects.""" + + # Note: DEFAULT_ENDPOINT is deprecated. Use _DEFAULT_ENDPOINT_TEMPLATE instead. + DEFAULT_ENDPOINT = "admanager.googleapis.com" + DEFAULT_MTLS_ENDPOINT = get_default_mtls_endpoint(DEFAULT_ENDPOINT) + + _DEFAULT_ENDPOINT_TEMPLATE = "admanager.{UNIVERSE_DOMAIN}" + _DEFAULT_UNIVERSE = "googleapis.com" + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + ChangeEventServiceClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + @classmethod + def from_service_account_file(cls, filename: str, *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: + ChangeEventServiceClient: 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 + + @property + def transport(self) -> ChangeEventServiceTransport: + """Returns the transport used by the client instance. + + Returns: + ChangeEventServiceTransport: The transport used by the client + instance. + """ + return self._transport + + @staticmethod + def change_event_path( + network_code: str, + change_event: str, + ) -> str: + """Returns a fully-qualified change_event string.""" + return "networks/{network_code}/changeEvents/{change_event}".format( + network_code=network_code, + change_event=change_event, + ) + + @staticmethod + def parse_change_event_path(path: str) -> Dict[str, str]: + """Parses a change_event path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/changeEvents/(?P.+?)$", path + ) + return m.groupdict() if m else {} + + @staticmethod + def network_path( + network_code: str, + ) -> str: + """Returns a fully-qualified network string.""" + return "networks/{network_code}".format( + network_code=network_code, + ) + + @staticmethod + def parse_network_path(path: str) -> Dict[str, str]: + """Parses a network path into its component segments.""" + m = re.match(r"^networks/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def user_path( + network_code: str, + user: str, + ) -> str: + """Returns a fully-qualified user string.""" + return "networks/{network_code}/users/{user}".format( + network_code=network_code, + user=user, + ) + + @staticmethod + def parse_user_path(path: str) -> Dict[str, str]: + """Parses a user path into its component segments.""" + m = re.match(r"^networks/(?P.+?)/users/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_billing_account_path( + billing_account: str, + ) -> str: + """Returns a fully-qualified billing_account string.""" + return "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + + @staticmethod + def parse_common_billing_account_path(path: str) -> Dict[str, str]: + """Parse a billing_account path into its component segments.""" + m = re.match(r"^billingAccounts/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_folder_path( + folder: str, + ) -> str: + """Returns a fully-qualified folder string.""" + return "folders/{folder}".format( + folder=folder, + ) + + @staticmethod + def parse_common_folder_path(path: str) -> Dict[str, str]: + """Parse a folder path into its component segments.""" + m = re.match(r"^folders/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_organization_path( + organization: str, + ) -> str: + """Returns a fully-qualified organization string.""" + return "organizations/{organization}".format( + organization=organization, + ) + + @staticmethod + def parse_common_organization_path(path: str) -> Dict[str, str]: + """Parse a organization path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_project_path( + project: str, + ) -> str: + """Returns a fully-qualified project string.""" + return "projects/{project}".format( + project=project, + ) + + @staticmethod + def parse_common_project_path(path: str) -> Dict[str, str]: + """Parse a project path into its component segments.""" + m = re.match(r"^projects/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_location_path( + project: str, + location: str, + ) -> str: + """Returns a fully-qualified location string.""" + return "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + + @staticmethod + def parse_common_location_path(path: str) -> Dict[str, str]: + """Parse a location path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[client_options_lib.ClientOptions] = None + ): + """Deprecated. Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variable is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + + warnings.warn( + "get_mtls_endpoint_and_cert_source is deprecated. Use the api_endpoint property instead.", + DeprecationWarning, + ) + if client_options is None: + client_options = client_options_lib.ClientOptions() + use_client_cert = should_use_client_cert() + use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") + if use_mtls_endpoint not in ("auto", "never", "always"): + raise MutualTLSChannelError( + "Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`" + ) + + # Figure out the client cert source to use. + client_cert_source = None + if use_client_cert: + if client_options.client_cert_source: + client_cert_source = client_options.client_cert_source + elif mtls.has_default_client_cert_source(): + client_cert_source = mtls.default_client_cert_source() + + # Figure out which api endpoint to use. + if client_options.api_endpoint is not None: + api_endpoint = client_options.api_endpoint + elif use_mtls_endpoint == "always" or ( + use_mtls_endpoint == "auto" and client_cert_source + ): + api_endpoint = cls.DEFAULT_MTLS_ENDPOINT # type: ignore + else: + api_endpoint = cls.DEFAULT_ENDPOINT + + return api_endpoint, client_cert_source + + @staticmethod + def _get_client_cert_source(provided_cert_source, use_cert_flag): + """Return the client cert source to be used by the client. + + Args: + provided_cert_source (bytes): The client certificate source provided. + use_cert_flag (bool): A flag indicating whether to use the client certificate. + + Returns: + bytes or None: The client cert source to be used by the client. + """ + client_cert_source = None + if use_cert_flag: + if provided_cert_source: + client_cert_source = provided_cert_source + elif mtls.has_default_client_cert_source(): + client_cert_source = mtls.default_client_cert_source() + return client_cert_source + + def _validate_universe_domain(self): + """Validates client's and credentials' universe domains are consistent. + + Returns: + bool: True iff the configured universe domain is valid. + + Raises: + ValueError: If the configured universe domain is not valid. + """ + + # NOTE (b/349488459): universe validation is disabled until further notice. + return True + + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + + @property + def api_endpoint(self) -> str: + """Return the API endpoint used by the client instance. + + Returns: + str: The API endpoint used by the client instance. + """ + return self._api_endpoint + + @property + def universe_domain(self) -> str: + """Return the universe domain used by the client instance. + + Returns: + str: The universe domain used by the client instance. + """ + return self._universe_domain + + def __init__( + self, + *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Optional[ + Union[ + str, + ChangeEventServiceTransport, + Callable[..., ChangeEventServiceTransport], + ] + ] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the change event service client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Optional[Union[str,ChangeEventServiceTransport,Callable[..., ChangeEventServiceTransport]]]): + The transport to use, or a Callable that constructs and returns a new transport. + If a Callable is given, it will be called with the same set of initialization + arguments as used in the ChangeEventServiceTransport constructor. + If set to None, a transport is chosen automatically. + client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): + Custom options for the client. + + 1. The ``api_endpoint`` property can be used to override the + default endpoint provided by the client when ``transport`` is + not explicitly provided. Only if this property is not set and + ``transport`` was not explicitly provided, the endpoint is + determined by the GOOGLE_API_USE_MTLS_ENDPOINT environment + variable, which have one of the following values: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto-switch to the + default mTLS endpoint if client certificate is present; this is + the default value). + + 2. If the GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide a client certificate for mTLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + + 3. The ``universe_domain`` property can be used to override the + default "googleapis.com" universe. Note that the ``api_endpoint`` + property still takes precedence; and ``universe_domain`` is + currently not supported for mTLS. + + 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. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + """ + self._client_options = client_options + if isinstance(self._client_options, dict): + self._client_options = client_options_lib.from_dict(self._client_options) + if self._client_options is None: + self._client_options = client_options_lib.ClientOptions() + self._client_options = cast( + client_options_lib.ClientOptions, self._client_options + ) + + universe_domain_opt = getattr(self._client_options, "universe_domain", None) + + self._use_client_cert, self._use_mtls_endpoint, self._universe_domain_env = ( + read_environment_variables() + ) + self._client_cert_source = ChangeEventServiceClient._get_client_cert_source( + self._client_options.client_cert_source, self._use_client_cert + ) + self._universe_domain = get_universe_domain( + universe_domain_opt, + self._universe_domain_env, + default_universe=ChangeEventServiceClient._DEFAULT_UNIVERSE, + ) + self._api_endpoint: str = "" # updated below, depending on `transport` + + # Initialize the universe domain validation. + self._is_universe_domain_valid = False + + if CLIENT_LOGGING_SUPPORTED: # pragma: NO COVER + # Setup logging. + client_logging.initialize_logging() + + api_key_value = getattr(self._client_options, "api_key", None) + if api_key_value and credentials: + raise ValueError( + "client_options.api_key and credentials are mutually exclusive" + ) + + # Save or instantiate the transport. + # Ordinarily, we provide the transport, but allowing a custom transport + # instance provides an extensibility point for unusual situations. + transport_provided = isinstance(transport, ChangeEventServiceTransport) + if transport_provided: + # transport is a ChangeEventServiceTransport instance. + if credentials or self._client_options.credentials_file or api_key_value: + raise ValueError( + "When providing a transport instance, " + "provide its credentials directly." + ) + if self._client_options.scopes: + raise ValueError( + "When providing a transport instance, provide its scopes directly." + ) + self._transport = cast(ChangeEventServiceTransport, transport) + self._api_endpoint = self._transport.host + + self._api_endpoint = self._api_endpoint or get_api_endpoint( + api_override=self._client_options.api_endpoint, + universe_domain=self._universe_domain, + default_universe=ChangeEventServiceClient._DEFAULT_UNIVERSE, + default_mtls_endpoint=ChangeEventServiceClient.DEFAULT_MTLS_ENDPOINT, + default_endpoint_template=ChangeEventServiceClient._DEFAULT_ENDPOINT_TEMPLATE, + use_mtls=self._use_mtls_endpoint == "always" + or (self._use_mtls_endpoint == "auto" and self._client_cert_source), + ) + + if not transport_provided: + import google.auth._default # type: ignore + + if api_key_value and hasattr( + google.auth._default, "get_api_key_credentials" + ): + credentials = google.auth._default.get_api_key_credentials( + api_key_value + ) + + transport_init: Union[ + Type[ChangeEventServiceTransport], + Callable[..., ChangeEventServiceTransport], + ] = ( + ChangeEventServiceClient.get_transport_class(transport) + if isinstance(transport, str) or transport is None + else cast(Callable[..., ChangeEventServiceTransport], transport) + ) + # initialize with the provided callable or the passed in class + self._transport = transport_init( + credentials=credentials, + credentials_file=self._client_options.credentials_file, + host=self._api_endpoint, + scopes=self._client_options.scopes, + client_cert_source_for_mtls=self._client_cert_source, + quota_project_id=self._client_options.quota_project_id, + client_info=client_info, + always_use_jwt_access=True, + api_audience=self._client_options.api_audience, + ) + + if "async" not in str(self._transport): + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + std_logging.DEBUG + ): # pragma: NO COVER + _LOGGER.debug( + "Created client `google.ads.admanager_v1.ChangeEventServiceClient`.", + extra={ + "serviceName": "google.ads.admanager.v1.ChangeEventService", + "universeDomain": getattr( + self._transport._credentials, "universe_domain", "" + ), + "credentialsType": f"{type(self._transport._credentials).__module__}.{type(self._transport._credentials).__qualname__}", + "credentialsInfo": getattr( + self.transport._credentials, "get_cred_info", lambda: None + )(), + } + if hasattr(self._transport, "_credentials") + else { + "serviceName": "google.ads.admanager.v1.ChangeEventService", + "credentialsType": None, + }, + ) + + def get_change_event( + self, + request: Optional[ + Union[change_event_service.GetChangeEventRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> change_event_messages.ChangeEvent: + r"""Retrieves a ``ChangeEvent`` object. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_get_change_event(): + # Create a client + client = admanager_v1.ChangeEventServiceClient() + + # Initialize request argument(s) + request = admanager_v1.GetChangeEventRequest( + name="name_value", + ) + + # Make the request + response = client.get_change_event(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.GetChangeEventRequest, dict]): + The request object. Request object for ``GetChangeEvent`` method. + name (str): + Required. The resource name of the ChangeEvent. Format: + ``networks/{network_code}/changeEvents/{change_event_id}`` + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.ChangeEvent: + Represents a single entity change. + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [name] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance(request, change_event_service.GetChangeEventRequest): + request = change_event_service.GetChangeEventRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_change_event] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_change_events( + self, + request: Optional[ + Union[change_event_service.ListChangeEventsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> pagers.ListChangeEventsPager: + r"""Lists ``ChangeEvent`` objects. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_list_change_events(): + # Create a client + client = admanager_v1.ChangeEventServiceClient() + + # Initialize request argument(s) + request = admanager_v1.ListChangeEventsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_change_events(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.ListChangeEventsRequest, dict]): + The request object. Request object for ``ListChangeEvents`` method. + parent (str): + Required. The parent, which owns this collection of + ChangeEvents. Format: ``networks/{network_code}`` + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.services.change_event_service.pagers.ListChangeEventsPager: + Response object for ListChangeEventsRequest containing matching + ChangeEvent objects. + + Iterating over this object will yield results and + resolve additional pages automatically. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance(request, change_event_service.ListChangeEventsRequest): + request = change_event_service.ListChangeEventsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_change_events] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListChangeEventsPager( + method=rpc, + request=request, + response=response, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def __enter__(self) -> "ChangeEventServiceClient": + return self + + def __exit__(self, type, value, traceback): + """Releases underlying transport's resources. + + .. warning:: + ONLY use as a context manager if the transport is NOT shared + with other clients! Exiting the with block will CLOSE the transport + and may cause errors in other clients! + """ + self.transport.close() + + def get_operation( + self, + request: Optional[Union[operations_pb2.GetOperationRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> operations_pb2.Operation: + r"""Gets the latest state of a long-running operation. + + Args: + request (:class:`~.operations_pb2.GetOperationRequest`): + The request object. Request message for + `GetOperation` method. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + Returns: + ~.operations_pb2.Operation: + An ``Operation`` object. + """ + # Create or coerce a protobuf request object. + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if request is None: + request_pb = operations_pb2.GetOperationRequest() + elif isinstance(request, dict): + request_pb = operations_pb2.GetOperationRequest(**request) + else: + request_pb = request + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_operation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request_pb.name),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + try: + # Send the request. + response = rpc( + request_pb, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e + + def cancel_operation( + self, + request: Optional[Union[operations_pb2.CancelOperationRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> None: + r"""Starts asynchronous cancellation on a long-running operation. + + The server makes a best effort to cancel the operation, but success + is not guaranteed. If the server doesn't support this method, it returns + `google.rpc.Code.UNIMPLEMENTED`. + + Args: + request (:class:`~.operations_pb2.CancelOperationRequest`): + The request object. Request message for + `CancelOperation` method. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + Returns: + None + """ + # Create or coerce a protobuf request object. + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if request is None: + request_pb = operations_pb2.CancelOperationRequest() + elif isinstance(request, dict): + request_pb = operations_pb2.CancelOperationRequest(**request) + else: + request_pb = request + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.cancel_operation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request_pb.name),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + rpc( + request_pb, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) +DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + +__all__ = ("ChangeEventServiceClient",) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/pagers.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/pagers.py new file mode 100644 index 000000000000..f3cbebf1bd58 --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/pagers.py @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +from typing import ( + Any, + AsyncIterator, + Awaitable, + Callable, + Iterator, + Optional, + Sequence, + Tuple, + Union, +) + +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.api_core import retry_async as retries_async + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] + OptionalAsyncRetry = Union[ + retries_async.AsyncRetry, gapic_v1.method._MethodDefault, None + ] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object, None] # type: ignore + OptionalAsyncRetry = Union[retries_async.AsyncRetry, object, None] # type: ignore + +from google.ads.admanager_v1.types import change_event_messages, change_event_service + + +class ListChangeEventsPager: + """A pager for iterating through ``list_change_events`` requests. + + This class thinly wraps an initial + :class:`google.ads.admanager_v1.types.ListChangeEventsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``change_events`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListChangeEvents`` requests and continue to iterate + through the ``change_events`` field on the + corresponding responses. + + All the usual :class:`google.ads.admanager_v1.types.ListChangeEventsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., change_event_service.ListChangeEventsResponse], + request: change_event_service.ListChangeEventsRequest, + response: change_event_service.ListChangeEventsResponse, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.ads.admanager_v1.types.ListChangeEventsRequest): + The initial request object. + response (google.ads.admanager_v1.types.ListChangeEventsResponse): + The initial response object. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + """ + self._method = method + self._request = change_event_service.ListChangeEventsRequest(request) + self._response = response + self._retry = retry + self._timeout = timeout + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[change_event_service.ListChangeEventsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method( + self._request, + retry=self._retry, + timeout=self._timeout, + metadata=self._metadata, + ) + yield self._response + + def __iter__(self) -> Iterator[change_event_messages.ChangeEvent]: + for page in self.pages: + yield from page.change_events + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/README.rst b/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/README.rst new file mode 100644 index 000000000000..804de28f6f6a --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/README.rst @@ -0,0 +1,10 @@ + +transport inheritance structure +_______________________________ + +``ChangeEventServiceTransport`` is the ABC for all transports. + +- public child ``ChangeEventServiceGrpcTransport`` for sync gRPC transport (defined in ``grpc.py``). +- public child ``ChangeEventServiceGrpcAsyncIOTransport`` for async gRPC transport (defined in ``grpc_asyncio.py``). +- private child ``_BaseChangeEventServiceRestTransport`` for base REST transport with inner classes ``_BaseMETHOD`` (defined in ``rest_base.py``). +- public child ``ChangeEventServiceRestTransport`` for sync REST transport with inner classes ``METHOD`` derived from the parent's corresponding ``_BaseMETHOD`` classes (defined in ``rest.py``). diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/__init__.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/__init__.py new file mode 100644 index 000000000000..e7a4b4f5c91f --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/__init__.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +from collections import OrderedDict +from typing import Dict, Type + +from .base import ChangeEventServiceTransport +from .rest import ChangeEventServiceRestInterceptor, ChangeEventServiceRestTransport + +# Compile a registry of transports. +_transport_registry = OrderedDict() # type: Dict[str, Type[ChangeEventServiceTransport]] +_transport_registry["rest"] = ChangeEventServiceRestTransport + +__all__ = ( + "ChangeEventServiceTransport", + "ChangeEventServiceRestTransport", + "ChangeEventServiceRestInterceptor", +) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/base.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/base.py new file mode 100644 index 000000000000..bcc3e138d320 --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/base.py @@ -0,0 +1,225 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +import abc +from typing import Awaitable, Callable, Dict, Optional, Sequence, Union + +import google.api_core +import google.auth # type: ignore +import google.protobuf +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.auth import credentials as ga_credentials # type: ignore +from google.longrunning import operations_pb2 # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.ads.admanager_v1 import gapic_version as package_version +from google.ads.admanager_v1.types import change_event_messages, change_event_service + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) +DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + + +class ChangeEventServiceTransport(abc.ABC): + """Abstract transport class for ChangeEventService.""" + + AUTH_SCOPES = ( + "https://www.googleapis.com/auth/admanager", + "https://www.googleapis.com/auth/admanager.readonly", + ) + + DEFAULT_HOST: str = "admanager.googleapis.com" + + def __init__( + self, + *, + host: str = DEFAULT_HOST, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + **kwargs, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to (default: 'admanager.googleapis.com'). + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + credentials_file (Optional[str]): Deprecated. A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. This argument will be + removed in the next major version of this library. + scopes (Optional[Sequence[str]]): A list of scopes. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + api_audience (Optional[str]): The intended audience for the API calls + to the service that will be set when using certain 3rd party + authentication flows. Audience is typically a resource identifier. + If not set, the host value will be used as a default. + """ + + # Save the scopes. + self._scopes = scopes + if not hasattr(self, "_ignore_credentials"): + self._ignore_credentials: bool = False + + # If no credentials are provided, then determine the appropriate + # defaults. + if credentials and credentials_file: + raise core_exceptions.DuplicateCredentialArgs( + "'credentials_file' and 'credentials' are mutually exclusive" + ) + + if credentials_file is not None: + credentials, _ = google.auth.load_credentials_from_file( + credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + default_scopes=self.AUTH_SCOPES, + ) + elif credentials is None and not self._ignore_credentials: + credentials, _ = google.auth.default( + scopes=scopes, + quota_project_id=quota_project_id, + default_scopes=self.AUTH_SCOPES, + ) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience( + api_audience if api_audience else host + ) + + # If the credentials are service account credentials, then always try to use self signed JWT. + if ( + always_use_jwt_access + and isinstance(credentials, service_account.Credentials) + and hasattr(service_account.Credentials, "with_always_use_jwt_access") + ): + credentials = credentials.with_always_use_jwt_access(True) + + # Save the credentials. + self._credentials = credentials + + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + + self._wrapped_methods: Dict[Callable, Callable] = {} + + @property + def host(self): + return self._host + + def _prep_wrapped_messages(self, client_info): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.get_change_event: gapic_v1.method.wrap_method( + self.get_change_event, + default_timeout=None, + client_info=client_info, + ), + self.list_change_events: gapic_v1.method.wrap_method( + self.list_change_events, + default_timeout=None, + client_info=client_info, + ), + self.cancel_operation: gapic_v1.method.wrap_method( + self.cancel_operation, + default_timeout=None, + client_info=client_info, + ), + self.get_operation: gapic_v1.method.wrap_method( + self.get_operation, + default_timeout=None, + client_info=client_info, + ), + } + + def close(self): + """Closes resources associated with the transport. + + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! + """ + raise NotImplementedError() + + @property + def get_change_event( + self, + ) -> Callable[ + [change_event_service.GetChangeEventRequest], + Union[ + change_event_messages.ChangeEvent, + Awaitable[change_event_messages.ChangeEvent], + ], + ]: + raise NotImplementedError() + + @property + def list_change_events( + self, + ) -> Callable[ + [change_event_service.ListChangeEventsRequest], + Union[ + change_event_service.ListChangeEventsResponse, + Awaitable[change_event_service.ListChangeEventsResponse], + ], + ]: + raise NotImplementedError() + + @property + def get_operation( + self, + ) -> Callable[ + [operations_pb2.GetOperationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def cancel_operation( + self, + ) -> Callable[ + [operations_pb2.CancelOperationRequest], + None, + ]: + raise NotImplementedError() + + @property + def kind(self) -> str: + raise NotImplementedError() + + +__all__ = ("ChangeEventServiceTransport",) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/rest.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/rest.py new file mode 100644 index 000000000000..8cf29b145f07 --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/rest.py @@ -0,0 +1,924 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +import dataclasses +import json # type: ignore +import logging +import warnings +from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union + +import google.protobuf +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1, rest_helpers, rest_streaming +from google.api_core import retry as retries +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.requests import AuthorizedSession # type: ignore +from google.longrunning import operations_pb2 # type: ignore +from google.protobuf import json_format +from requests import __version__ as requests_version + +from google.ads.admanager_v1._compat import transcode_request +from google.ads.admanager_v1.types import change_event_messages, change_event_service + +from .base import DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO +from .rest_base import _BaseChangeEventServiceRestTransport + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object, None] # type: ignore + +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = logging.getLogger(__name__) + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, + grpc_version=None, + rest_version=f"requests@{requests_version}", +) + +DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + + +class ChangeEventServiceRestInterceptor: + """Interceptor for ChangeEventService. + + Interceptors are used to manipulate requests, request metadata, and responses + in arbitrary ways. + Example use cases include: + * Logging + * Verifying requests according to service or custom semantics + * Stripping extraneous information from responses + + These use cases and more can be enabled by injecting an + instance of a custom subclass when constructing the ChangeEventServiceRestTransport. + + .. code-block:: python + class MyCustomChangeEventServiceInterceptor(ChangeEventServiceRestInterceptor): + def pre_get_change_event(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_change_event(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_change_events(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_change_events(self, response): + logging.log(f"Received response: {response}") + return response + + transport = ChangeEventServiceRestTransport(interceptor=MyCustomChangeEventServiceInterceptor()) + client = ChangeEventServiceClient(transport=transport) + + + """ + + def pre_get_change_event( + self, + request: change_event_service.GetChangeEventRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + change_event_service.GetChangeEventRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for get_change_event + + Override in a subclass to manipulate the request or metadata + before they are sent to the ChangeEventService server. + """ + return request, metadata + + def post_get_change_event( + self, response: change_event_messages.ChangeEvent + ) -> change_event_messages.ChangeEvent: + """Post-rpc interceptor for get_change_event + + DEPRECATED. Please use the `post_get_change_event_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the ChangeEventService server but before + it is returned to user code. This `post_get_change_event` interceptor runs + before the `post_get_change_event_with_metadata` interceptor. + """ + return response + + def post_get_change_event_with_metadata( + self, + response: change_event_messages.ChangeEvent, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + change_event_messages.ChangeEvent, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_change_event + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ChangeEventService server but before it is returned to user code. + + We recommend only using this `post_get_change_event_with_metadata` + interceptor in new development instead of the `post_get_change_event` interceptor. + When both interceptors are used, this `post_get_change_event_with_metadata` interceptor runs after the + `post_get_change_event` interceptor. The (possibly modified) response returned by + `post_get_change_event` will be passed to + `post_get_change_event_with_metadata`. + """ + return response, metadata + + def pre_list_change_events( + self, + request: change_event_service.ListChangeEventsRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + change_event_service.ListChangeEventsRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for list_change_events + + Override in a subclass to manipulate the request or metadata + before they are sent to the ChangeEventService server. + """ + return request, metadata + + def post_list_change_events( + self, response: change_event_service.ListChangeEventsResponse + ) -> change_event_service.ListChangeEventsResponse: + """Post-rpc interceptor for list_change_events + + DEPRECATED. Please use the `post_list_change_events_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the ChangeEventService server but before + it is returned to user code. This `post_list_change_events` interceptor runs + before the `post_list_change_events_with_metadata` interceptor. + """ + return response + + def post_list_change_events_with_metadata( + self, + response: change_event_service.ListChangeEventsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + change_event_service.ListChangeEventsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_change_events + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ChangeEventService server but before it is returned to user code. + + We recommend only using this `post_list_change_events_with_metadata` + interceptor in new development instead of the `post_list_change_events` interceptor. + When both interceptors are used, this `post_list_change_events_with_metadata` interceptor runs after the + `post_list_change_events` interceptor. The (possibly modified) response returned by + `post_list_change_events` will be passed to + `post_list_change_events_with_metadata`. + """ + return response, metadata + + def pre_cancel_operation( + self, + request: operations_pb2.CancelOperationRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + operations_pb2.CancelOperationRequest, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Pre-rpc interceptor for cancel_operation + + Override in a subclass to manipulate the request or metadata + before they are sent to the ChangeEventService server. + """ + return request, metadata + + def post_cancel_operation(self, response: None) -> None: + """Post-rpc interceptor for cancel_operation + + Override in a subclass to manipulate the response + after it is returned by the ChangeEventService server but before + it is returned to user code. + """ + return response + + def pre_get_operation( + self, + request: operations_pb2.GetOperationRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + operations_pb2.GetOperationRequest, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Pre-rpc interceptor for get_operation + + Override in a subclass to manipulate the request or metadata + before they are sent to the ChangeEventService server. + """ + return request, metadata + + def post_get_operation( + self, response: operations_pb2.Operation + ) -> operations_pb2.Operation: + """Post-rpc interceptor for get_operation + + Override in a subclass to manipulate the response + after it is returned by the ChangeEventService server but before + it is returned to user code. + """ + return response + + +@dataclasses.dataclass +class ChangeEventServiceRestStub: + _session: AuthorizedSession + _host: str + _interceptor: ChangeEventServiceRestInterceptor + + +class ChangeEventServiceRestTransport(_BaseChangeEventServiceRestTransport): + """REST backend synchronous transport for ChangeEventService. + + Provides methods for handling ``ChangeEvent`` objects. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends JSON representations of protocol buffers over HTTP/1.1 + """ + + def __init__( + self, + *, + host: str = "admanager.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + url_scheme: str = "https", + interceptor: Optional[ChangeEventServiceRestInterceptor] = None, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to (default: 'admanager.googleapis.com'). + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + + credentials_file (Optional[str]): Deprecated. A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. This argument will be + removed in the next major version of this library. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client + certificate to configure mutual TLS HTTP channel. It is ignored + if ``channel`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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 are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + interceptor (Optional[ChangeEventServiceRestInterceptor]): Interceptor used + to manipulate requests, request metadata, and responses. + api_audience (Optional[str]): The intended audience for the API calls + to the service that will be set when using certain 3rd party + authentication flows. Audience is typically a resource identifier. + If not set, the host value will be used as a default. + """ + # Run the base constructor + # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. + # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the + # credentials object + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + url_scheme=url_scheme, + api_audience=api_audience, + ) + self._session = AuthorizedSession( + self._credentials, default_host=self.DEFAULT_HOST + ) + if client_cert_source_for_mtls: + self._session.configure_mtls_channel(client_cert_source_for_mtls) + self._interceptor = interceptor or ChangeEventServiceRestInterceptor() + self._prep_wrapped_messages(client_info) + + class _GetChangeEvent( + _BaseChangeEventServiceRestTransport._BaseGetChangeEvent, + ChangeEventServiceRestStub, + ): + def __hash__(self): + return hash("ChangeEventServiceRestTransport.GetChangeEvent") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response + + def __call__( + self, + request: change_event_service.GetChangeEventRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> change_event_messages.ChangeEvent: + r"""Call the get change event method over HTTP. + + Args: + request (~.change_event_service.GetChangeEventRequest): + The request object. Request object for ``GetChangeEvent`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.change_event_messages.ChangeEvent: + Represents a single entity change. + """ + + http_options = _BaseChangeEventServiceRestTransport._BaseGetChangeEvent._get_http_options() + request, metadata = self._interceptor.pre_get_change_event( + request, metadata + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseChangeEventServiceRestTransport._BaseGetChangeEvent, + "_BaseGetChangeEvent__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.ChangeEventServiceClient.GetChangeEvent", + extra={ + "serviceName": "google.ads.admanager.v1.ChangeEventService", + "rpcName": "GetChangeEvent", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = ChangeEventServiceRestTransport._GetChangeEvent._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = change_event_messages.ChangeEvent() + pb_resp = change_event_messages.ChangeEvent.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_get_change_event(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_change_event_with_metadata( + resp, response_metadata + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = change_event_messages.ChangeEvent.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.ChangeEventServiceClient.get_change_event", + extra={ + "serviceName": "google.ads.admanager.v1.ChangeEventService", + "rpcName": "GetChangeEvent", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _ListChangeEvents( + _BaseChangeEventServiceRestTransport._BaseListChangeEvents, + ChangeEventServiceRestStub, + ): + def __hash__(self): + return hash("ChangeEventServiceRestTransport.ListChangeEvents") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response + + def __call__( + self, + request: change_event_service.ListChangeEventsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> change_event_service.ListChangeEventsResponse: + r"""Call the list change events method over HTTP. + + Args: + request (~.change_event_service.ListChangeEventsRequest): + The request object. Request object for ``ListChangeEvents`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.change_event_service.ListChangeEventsResponse: + Response object for ``ListChangeEventsRequest`` + containing matching ``ChangeEvent`` objects. + + """ + + http_options = _BaseChangeEventServiceRestTransport._BaseListChangeEvents._get_http_options() + request, metadata = self._interceptor.pre_list_change_events( + request, metadata + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseChangeEventServiceRestTransport._BaseListChangeEvents, + "_BaseListChangeEvents__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.ChangeEventServiceClient.ListChangeEvents", + extra={ + "serviceName": "google.ads.admanager.v1.ChangeEventService", + "rpcName": "ListChangeEvents", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = ChangeEventServiceRestTransport._ListChangeEvents._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = change_event_service.ListChangeEventsResponse() + pb_resp = change_event_service.ListChangeEventsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_list_change_events(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_change_events_with_metadata( + resp, response_metadata + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = ( + change_event_service.ListChangeEventsResponse.to_json(response) + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.ChangeEventServiceClient.list_change_events", + extra={ + "serviceName": "google.ads.admanager.v1.ChangeEventService", + "rpcName": "ListChangeEvents", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + @property + def get_change_event( + self, + ) -> Callable[ + [change_event_service.GetChangeEventRequest], change_event_messages.ChangeEvent + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetChangeEvent(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_change_events( + self, + ) -> Callable[ + [change_event_service.ListChangeEventsRequest], + change_event_service.ListChangeEventsResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListChangeEvents(self._session, self._host, self._interceptor) # type: ignore + + @property + def cancel_operation(self): + return self._CancelOperation(self._session, self._host, self._interceptor) # type: ignore + + class _CancelOperation( + _BaseChangeEventServiceRestTransport._BaseCancelOperation, + ChangeEventServiceRestStub, + ): + def __hash__(self): + return hash("ChangeEventServiceRestTransport.CancelOperation") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response + + def __call__( + self, + request: operations_pb2.CancelOperationRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> None: + r"""Call the cancel operation method over HTTP. + + Args: + request (operations_pb2.CancelOperationRequest): + The request object for CancelOperation method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + """ + + http_options = _BaseChangeEventServiceRestTransport._BaseCancelOperation._get_http_options() + request, metadata = self._interceptor.pre_cancel_operation( + request, metadata + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseChangeEventServiceRestTransport._BaseCancelOperation, + "_BaseCancelOperation__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=False, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = json_format.MessageToJson(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.ChangeEventServiceClient.CancelOperation", + extra={ + "serviceName": "google.ads.admanager.v1.ChangeEventService", + "rpcName": "CancelOperation", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = ChangeEventServiceRestTransport._CancelOperation._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + return self._interceptor.post_cancel_operation(None) + + @property + def get_operation(self): + return self._GetOperation(self._session, self._host, self._interceptor) # type: ignore + + class _GetOperation( + _BaseChangeEventServiceRestTransport._BaseGetOperation, + ChangeEventServiceRestStub, + ): + def __hash__(self): + return hash("ChangeEventServiceRestTransport.GetOperation") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response + + def __call__( + self, + request: operations_pb2.GetOperationRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> operations_pb2.Operation: + r"""Call the get operation method over HTTP. + + Args: + request (operations_pb2.GetOperationRequest): + The request object for GetOperation method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + operations_pb2.Operation: Response from GetOperation method. + """ + + http_options = _BaseChangeEventServiceRestTransport._BaseGetOperation._get_http_options() + request, metadata = self._interceptor.pre_get_operation(request, metadata) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseChangeEventServiceRestTransport._BaseGetOperation, + "_BaseGetOperation__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=False, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = json_format.MessageToJson(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.ChangeEventServiceClient.GetOperation", + extra={ + "serviceName": "google.ads.admanager.v1.ChangeEventService", + "rpcName": "GetOperation", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = ChangeEventServiceRestTransport._GetOperation._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + content = response.content.decode("utf-8") + resp = operations_pb2.Operation() + resp = json_format.Parse(content, resp) + resp = self._interceptor.post_get_operation(resp) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = json_format.MessageToJson(resp) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.ChangeEventServiceAsyncClient.GetOperation", + extra={ + "serviceName": "google.ads.admanager.v1.ChangeEventService", + "rpcName": "GetOperation", + "httpResponse": http_response, + "metadata": http_response["headers"], + }, + ) + return resp + + @property + def kind(self) -> str: + return "rest" + + def close(self): + self._session.close() + + +__all__ = ("ChangeEventServiceRestTransport",) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/rest_base.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/rest_base.py new file mode 100644 index 000000000000..fa8643222162 --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/change_event_service/transports/rest_base.py @@ -0,0 +1,152 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +import json # type: ignore +import re +from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union + +from google.api_core import gapic_v1, path_template +from google.longrunning import operations_pb2 # type: ignore +from google.protobuf import json_format + +from google.ads.admanager_v1.types import change_event_messages, change_event_service + +from .base import DEFAULT_CLIENT_INFO, ChangeEventServiceTransport + + +class _BaseChangeEventServiceRestTransport(ChangeEventServiceTransport): + """Base REST backend transport for ChangeEventService. + + Note: This class is not meant to be used directly. Use its sync and + async sub-classes instead. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends JSON representations of protocol buffers over HTTP/1.1 + """ + + def __init__( + self, + *, + host: str = "admanager.googleapis.com", + credentials: Optional[Any] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + url_scheme: str = "https", + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + Args: + host (Optional[str]): + The hostname to connect to (default: 'admanager.googleapis.com'). + credentials (Optional[Any]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + 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 are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + """ + # Run the base constructor + maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) + if maybe_url_match is None: + raise ValueError( + f"Unexpected hostname structure: {host}" + ) # pragma: NO COVER + + url_match_items = maybe_url_match.groupdict() + + host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host + + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + class _BaseGetChangeEvent: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{name=networks/*/changeEvents/*}", + }, + ] + return http_options + + class _BaseListChangeEvents: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{parent=networks/*}/changeEvents", + }, + ] + return http_options + + class _BaseCancelOperation: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{name=networks/*/operations/reports/runs/*}:cancel", + }, + ] + return http_options + + class _BaseGetOperation: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{name=networks/*/operations/reports/runs/*}", + }, + ] + return http_options + + +__all__ = ("_BaseChangeEventServiceRestTransport",) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/creative_service/client.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/creative_service/client.py index 7152973f8cf1..40ceb8ff310b 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/services/creative_service/client.py +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/creative_service/client.py @@ -68,6 +68,7 @@ _LOGGER = std_logging.getLogger(__name__) +import google.protobuf.field_mask_pb2 as field_mask_pb2 # type: ignore import google.protobuf.timestamp_pb2 as timestamp_pb2 # type: ignore from google.longrunning import operations_pb2 # type: ignore @@ -951,6 +952,505 @@ def sample_list_creatives(): # Done; return the response. return response + def create_creative( + self, + request: Optional[Union[creative_service.CreateCreativeRequest, dict]] = None, + *, + parent: Optional[str] = None, + creative: Optional[creative_messages.Creative] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> creative_messages.Creative: + r"""Creates a ``Creative`` object. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_create_creative(): + # Create a client + client = admanager_v1.CreativeServiceClient() + + # Initialize request argument(s) + creative = admanager_v1.Creative() + creative.size.width = 544 + creative.size.height = 633 + creative.size.size_type = "AUDIO" + + request = admanager_v1.CreateCreativeRequest( + parent="parent_value", + creative=creative, + ) + + # Make the request + response = client.create_creative(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.CreateCreativeRequest, dict]): + The request object. Request object for ``CreateCreative`` method. + parent (str): + Required. The parent resource where this ``Creative`` + will be created. Format: ``networks/{network_code}`` + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + creative (google.ads.admanager_v1.types.Creative): + Required. The ``Creative`` to create. + This corresponds to the ``creative`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.Creative: + The Creative resource. + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent, creative] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance(request, creative_service.CreateCreativeRequest): + request = creative_service.CreateCreativeRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if creative is not None: + request.creative = creative + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_creative] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_creative( + self, + request: Optional[Union[creative_service.UpdateCreativeRequest, dict]] = None, + *, + creative: Optional[creative_messages.Creative] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> creative_messages.Creative: + r"""Updates a ``Creative`` object. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_update_creative(): + # Create a client + client = admanager_v1.CreativeServiceClient() + + # Initialize request argument(s) + creative = admanager_v1.Creative() + creative.size.width = 544 + creative.size.height = 633 + creative.size.size_type = "AUDIO" + + request = admanager_v1.UpdateCreativeRequest( + creative=creative, + ) + + # Make the request + response = client.update_creative(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.UpdateCreativeRequest, dict]): + The request object. Request object for ``UpdateCreative`` method. + creative (google.ads.admanager_v1.types.Creative): + Required. The ``Creative`` to update. + + The ``Creative``'s name is used to identify the + ``Creative`` to update. Format: + ``networks/{network_code}/creatives/{creative_id}`` + + This corresponds to the ``creative`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + Optional. The list of fields to + update. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.Creative: + The Creative resource. + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [creative, update_mask] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance(request, creative_service.UpdateCreativeRequest): + request = creative_service.UpdateCreativeRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if creative is not None: + request.creative = creative + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_creative] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("creative.name", request.creative.name),) + ), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def batch_create_creatives( + self, + request: Optional[ + Union[creative_service.BatchCreateCreativesRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + requests: Optional[ + MutableSequence[creative_service.CreateCreativeRequest] + ] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> creative_service.BatchCreateCreativesResponse: + r"""Creates ``Creative`` objects. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_batch_create_creatives(): + # Create a client + client = admanager_v1.CreativeServiceClient() + + # Initialize request argument(s) + requests = admanager_v1.CreateCreativeRequest() + requests.parent = "parent_value" + requests.creative.size.width = 544 + requests.creative.size.height = 633 + requests.creative.size.size_type = "AUDIO" + + request = admanager_v1.BatchCreateCreativesRequest( + parent="parent_value", + requests=requests, + ) + + # Make the request + response = client.batch_create_creatives(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.BatchCreateCreativesRequest, dict]): + The request object. Request object for ``BatchCreateCreatives`` method. + parent (str): + Required. The parent resource where ``Creatives`` will + be created. Format: ``networks/{network_code}`` The + parent field in the CreateCreativeRequest must match + this field. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + requests (MutableSequence[google.ads.admanager_v1.types.CreateCreativeRequest]): + Required. The ``Creative`` objects to create. A maximum + of 100 objects can be created in a batch. + + This corresponds to the ``requests`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.BatchCreateCreativesResponse: + Response object for BatchCreateCreatives method. + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent, requests] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance(request, creative_service.BatchCreateCreativesRequest): + request = creative_service.BatchCreateCreativesRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if requests is not None: + request.requests = requests + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.batch_create_creatives] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def batch_update_creatives( + self, + request: Optional[ + Union[creative_service.BatchUpdateCreativesRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + requests: Optional[ + MutableSequence[creative_service.UpdateCreativeRequest] + ] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> creative_service.BatchUpdateCreativesResponse: + r"""Batch updates ``Creative`` objects. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_batch_update_creatives(): + # Create a client + client = admanager_v1.CreativeServiceClient() + + # Initialize request argument(s) + requests = admanager_v1.UpdateCreativeRequest() + requests.creative.size.width = 544 + requests.creative.size.height = 633 + requests.creative.size.size_type = "AUDIO" + + request = admanager_v1.BatchUpdateCreativesRequest( + parent="parent_value", + requests=requests, + ) + + # Make the request + response = client.batch_update_creatives(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.BatchUpdateCreativesRequest, dict]): + The request object. Request object for ``BatchUpdateCreatives`` method. + parent (str): + Required. The parent resource where ``Creatives`` will + be updated. Format: ``networks/{network_code}`` The + parent field in the UpdateCreativeRequest must match + this field. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + requests (MutableSequence[google.ads.admanager_v1.types.UpdateCreativeRequest]): + Required. The ``Creative`` objects to update. A maximum + of 100 objects can be updated in a batch. + + This corresponds to the ``requests`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.BatchUpdateCreativesResponse: + Response object for BatchUpdateCreatives method. + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent, requests] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance(request, creative_service.BatchUpdateCreativesRequest): + request = creative_service.BatchUpdateCreativesRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if requests is not None: + request.requests = requests + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.batch_update_creatives] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + def batch_activate_creatives( self, request: Optional[ diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/creative_service/transports/base.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/creative_service/transports/base.py index 3e2263a59aa1..a1634ffd361c 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/services/creative_service/transports/base.py +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/creative_service/transports/base.py @@ -154,6 +154,26 @@ def _prep_wrapped_messages(self, client_info): default_timeout=None, client_info=client_info, ), + self.create_creative: gapic_v1.method.wrap_method( + self.create_creative, + default_timeout=None, + client_info=client_info, + ), + self.update_creative: gapic_v1.method.wrap_method( + self.update_creative, + default_timeout=None, + client_info=client_info, + ), + self.batch_create_creatives: gapic_v1.method.wrap_method( + self.batch_create_creatives, + default_timeout=None, + client_info=client_info, + ), + self.batch_update_creatives: gapic_v1.method.wrap_method( + self.batch_update_creatives, + default_timeout=None, + client_info=client_info, + ), self.batch_activate_creatives: gapic_v1.method.wrap_method( self.batch_activate_creatives, default_timeout=None, @@ -206,6 +226,48 @@ def list_creatives( ]: raise NotImplementedError() + @property + def create_creative( + self, + ) -> Callable[ + [creative_service.CreateCreativeRequest], + Union[creative_messages.Creative, Awaitable[creative_messages.Creative]], + ]: + raise NotImplementedError() + + @property + def update_creative( + self, + ) -> Callable[ + [creative_service.UpdateCreativeRequest], + Union[creative_messages.Creative, Awaitable[creative_messages.Creative]], + ]: + raise NotImplementedError() + + @property + def batch_create_creatives( + self, + ) -> Callable[ + [creative_service.BatchCreateCreativesRequest], + Union[ + creative_service.BatchCreateCreativesResponse, + Awaitable[creative_service.BatchCreateCreativesResponse], + ], + ]: + raise NotImplementedError() + + @property + def batch_update_creatives( + self, + ) -> Callable[ + [creative_service.BatchUpdateCreativesRequest], + Union[ + creative_service.BatchUpdateCreativesResponse, + Awaitable[creative_service.BatchUpdateCreativesResponse], + ], + ]: + raise NotImplementedError() + @property def batch_activate_creatives( self, diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/creative_service/transports/rest.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/creative_service/transports/rest.py index 9ac0fe2bded8..35b6d06c97ad 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/services/creative_service/transports/rest.py +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/creative_service/transports/rest.py @@ -81,6 +81,14 @@ def post_batch_activate_creatives(self, response): logging.log(f"Received response: {response}") return response + def pre_batch_create_creatives(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_batch_create_creatives(self, response): + logging.log(f"Received response: {response}") + return response + def pre_batch_deactivate_creatives(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -89,6 +97,22 @@ def post_batch_deactivate_creatives(self, response): logging.log(f"Received response: {response}") return response + def pre_batch_update_creatives(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_batch_update_creatives(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_create_creative(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_create_creative(self, response): + logging.log(f"Received response: {response}") + return response + def pre_get_creative(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -105,6 +129,14 @@ def post_list_creatives(self, response): logging.log(f"Received response: {response}") return response + def pre_update_creative(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_creative(self, response): + logging.log(f"Received response: {response}") + return response + transport = CreativeServiceRestTransport(interceptor=MyCustomCreativeServiceInterceptor()) client = CreativeServiceClient(transport=transport) @@ -163,6 +195,58 @@ def post_batch_activate_creatives_with_metadata( """ return response, metadata + def pre_batch_create_creatives( + self, + request: creative_service.BatchCreateCreativesRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + creative_service.BatchCreateCreativesRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for batch_create_creatives + + Override in a subclass to manipulate the request or metadata + before they are sent to the CreativeService server. + """ + return request, metadata + + def post_batch_create_creatives( + self, response: creative_service.BatchCreateCreativesResponse + ) -> creative_service.BatchCreateCreativesResponse: + """Post-rpc interceptor for batch_create_creatives + + DEPRECATED. Please use the `post_batch_create_creatives_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the CreativeService server but before + it is returned to user code. This `post_batch_create_creatives` interceptor runs + before the `post_batch_create_creatives_with_metadata` interceptor. + """ + return response + + def post_batch_create_creatives_with_metadata( + self, + response: creative_service.BatchCreateCreativesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + creative_service.BatchCreateCreativesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for batch_create_creatives + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the CreativeService server but before it is returned to user code. + + We recommend only using this `post_batch_create_creatives_with_metadata` + interceptor in new development instead of the `post_batch_create_creatives` interceptor. + When both interceptors are used, this `post_batch_create_creatives_with_metadata` interceptor runs after the + `post_batch_create_creatives` interceptor. The (possibly modified) response returned by + `post_batch_create_creatives` will be passed to + `post_batch_create_creatives_with_metadata`. + """ + return response, metadata + def pre_batch_deactivate_creatives( self, request: creative_service.BatchDeactivateCreativesRequest, @@ -215,6 +299,106 @@ def post_batch_deactivate_creatives_with_metadata( """ return response, metadata + def pre_batch_update_creatives( + self, + request: creative_service.BatchUpdateCreativesRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + creative_service.BatchUpdateCreativesRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for batch_update_creatives + + Override in a subclass to manipulate the request or metadata + before they are sent to the CreativeService server. + """ + return request, metadata + + def post_batch_update_creatives( + self, response: creative_service.BatchUpdateCreativesResponse + ) -> creative_service.BatchUpdateCreativesResponse: + """Post-rpc interceptor for batch_update_creatives + + DEPRECATED. Please use the `post_batch_update_creatives_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the CreativeService server but before + it is returned to user code. This `post_batch_update_creatives` interceptor runs + before the `post_batch_update_creatives_with_metadata` interceptor. + """ + return response + + def post_batch_update_creatives_with_metadata( + self, + response: creative_service.BatchUpdateCreativesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + creative_service.BatchUpdateCreativesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for batch_update_creatives + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the CreativeService server but before it is returned to user code. + + We recommend only using this `post_batch_update_creatives_with_metadata` + interceptor in new development instead of the `post_batch_update_creatives` interceptor. + When both interceptors are used, this `post_batch_update_creatives_with_metadata` interceptor runs after the + `post_batch_update_creatives` interceptor. The (possibly modified) response returned by + `post_batch_update_creatives` will be passed to + `post_batch_update_creatives_with_metadata`. + """ + return response, metadata + + def pre_create_creative( + self, + request: creative_service.CreateCreativeRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + creative_service.CreateCreativeRequest, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Pre-rpc interceptor for create_creative + + Override in a subclass to manipulate the request or metadata + before they are sent to the CreativeService server. + """ + return request, metadata + + def post_create_creative( + self, response: creative_messages.Creative + ) -> creative_messages.Creative: + """Post-rpc interceptor for create_creative + + DEPRECATED. Please use the `post_create_creative_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the CreativeService server but before + it is returned to user code. This `post_create_creative` interceptor runs + before the `post_create_creative_with_metadata` interceptor. + """ + return response + + def post_create_creative_with_metadata( + self, + response: creative_messages.Creative, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[creative_messages.Creative, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_creative + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the CreativeService server but before it is returned to user code. + + We recommend only using this `post_create_creative_with_metadata` + interceptor in new development instead of the `post_create_creative` interceptor. + When both interceptors are used, this `post_create_creative_with_metadata` interceptor runs after the + `post_create_creative` interceptor. The (possibly modified) response returned by + `post_create_creative` will be passed to + `post_create_creative_with_metadata`. + """ + return response, metadata + def pre_get_creative( self, request: creative_service.GetCreativeRequest, @@ -313,6 +497,54 @@ def post_list_creatives_with_metadata( """ return response, metadata + def pre_update_creative( + self, + request: creative_service.UpdateCreativeRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + creative_service.UpdateCreativeRequest, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Pre-rpc interceptor for update_creative + + Override in a subclass to manipulate the request or metadata + before they are sent to the CreativeService server. + """ + return request, metadata + + def post_update_creative( + self, response: creative_messages.Creative + ) -> creative_messages.Creative: + """Post-rpc interceptor for update_creative + + DEPRECATED. Please use the `post_update_creative_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the CreativeService server but before + it is returned to user code. This `post_update_creative` interceptor runs + before the `post_update_creative_with_metadata` interceptor. + """ + return response + + def post_update_creative_with_metadata( + self, + response: creative_messages.Creative, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[creative_messages.Creative, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_creative + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the CreativeService server but before it is returned to user code. + + We recommend only using this `post_update_creative_with_metadata` + interceptor in new development instead of the `post_update_creative` interceptor. + When both interceptors are used, this `post_update_creative_with_metadata` interceptor runs after the + `post_update_creative` interceptor. The (possibly modified) response returned by + `post_update_creative` will be passed to + `post_update_creative_with_metadata`. + """ + return response, metadata + def pre_cancel_operation( self, request: operations_pb2.CancelOperationRequest, @@ -609,12 +841,12 @@ def __call__( ) return resp - class _BatchDeactivateCreatives( - _BaseCreativeServiceRestTransport._BaseBatchDeactivateCreatives, + class _BatchCreateCreatives( + _BaseCreativeServiceRestTransport._BaseBatchCreateCreatives, CreativeServiceRestStub, ): def __hash__(self): - return hash("CreativeServiceRestTransport.BatchDeactivateCreatives") + return hash("CreativeServiceRestTransport.BatchCreateCreatives") @staticmethod def _get_response( @@ -641,41 +873,40 @@ def _get_response( def __call__( self, - request: creative_service.BatchDeactivateCreativesRequest, + request: creative_service.BatchCreateCreativesRequest, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Optional[float] = None, metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), - ) -> creative_service.BatchDeactivateCreativesResponse: - r"""Call the batch deactivate - creatives method over HTTP. + ) -> creative_service.BatchCreateCreativesResponse: + r"""Call the batch create creatives method over HTTP. - Args: - request (~.creative_service.BatchDeactivateCreativesRequest): - The request object. Request object for ``BatchDeactivateCreatives`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be - sent along with the request as metadata. Normally, each value must be of type `str`, - but for metadata keys ending with the suffix `-bin`, the corresponding values must - be of type `bytes`. + Args: + request (~.creative_service.BatchCreateCreativesRequest): + The request object. Request object for ``BatchCreateCreatives`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. - Returns: - ~.creative_service.BatchDeactivateCreativesResponse: - Response object for ``BatchDeactivateCreatives`` method. + Returns: + ~.creative_service.BatchCreateCreativesResponse: + Response object for ``BatchCreateCreatives`` method. """ - http_options = _BaseCreativeServiceRestTransport._BaseBatchDeactivateCreatives._get_http_options() - request, metadata = self._interceptor.pre_batch_deactivate_creatives( + http_options = _BaseCreativeServiceRestTransport._BaseBatchCreateCreatives._get_http_options() + request, metadata = self._interceptor.pre_batch_create_creatives( request, metadata ) transcoded_request, body, query_params = transcode_request( http_options, request, required_fields_default_values=getattr( - _BaseCreativeServiceRestTransport._BaseBatchDeactivateCreatives, - "_BaseBatchDeactivateCreatives__REQUIRED_FIELDS_DEFAULT_VALUES", + _BaseCreativeServiceRestTransport._BaseBatchCreateCreatives, + "_BaseBatchCreateCreatives__REQUIRED_FIELDS_DEFAULT_VALUES", None, ), rest_numeric_enums=True, @@ -699,26 +930,24 @@ def __call__( "headers": dict(metadata), } _LOGGER.debug( - f"Sending request for google.ads.admanager_v1.CreativeServiceClient.BatchDeactivateCreatives", + f"Sending request for google.ads.admanager_v1.CreativeServiceClient.BatchCreateCreatives", extra={ "serviceName": "google.ads.admanager.v1.CreativeService", - "rpcName": "BatchDeactivateCreatives", + "rpcName": "BatchCreateCreatives", "httpRequest": http_request, "metadata": http_request["headers"], }, ) # Send the request - response = ( - CreativeServiceRestTransport._BatchDeactivateCreatives._get_response( - self._host, - metadata, - query_params, - self._session, - timeout, - transcoded_request, - body, - ) + response = CreativeServiceRestTransport._BatchCreateCreatives._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -727,14 +956,14 @@ def __call__( raise core_exceptions.from_http_response(response) # Return the response - resp = creative_service.BatchDeactivateCreativesResponse() - pb_resp = creative_service.BatchDeactivateCreativesResponse.pb(resp) + resp = creative_service.BatchCreateCreativesResponse() + pb_resp = creative_service.BatchCreateCreativesResponse.pb(resp) json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_batch_deactivate_creatives(resp) + resp = self._interceptor.post_batch_create_creatives(resp) response_metadata = [(k, str(v)) for k, v in response.headers.items()] - resp, _ = self._interceptor.post_batch_deactivate_creatives_with_metadata( + resp, _ = self._interceptor.post_batch_create_creatives_with_metadata( resp, response_metadata ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( @@ -742,9 +971,7 @@ def __call__( ): # pragma: NO COVER try: response_payload = ( - creative_service.BatchDeactivateCreativesResponse.to_json( - response - ) + creative_service.BatchCreateCreativesResponse.to_json(response) ) except: response_payload = None @@ -754,21 +981,22 @@ def __call__( "status": response.status_code, } _LOGGER.debug( - "Received response for google.ads.admanager_v1.CreativeServiceClient.batch_deactivate_creatives", + "Received response for google.ads.admanager_v1.CreativeServiceClient.batch_create_creatives", extra={ "serviceName": "google.ads.admanager.v1.CreativeService", - "rpcName": "BatchDeactivateCreatives", + "rpcName": "BatchCreateCreatives", "metadata": http_response["headers"], "httpResponse": http_response, }, ) return resp - class _GetCreative( - _BaseCreativeServiceRestTransport._BaseGetCreative, CreativeServiceRestStub + class _BatchDeactivateCreatives( + _BaseCreativeServiceRestTransport._BaseBatchDeactivateCreatives, + CreativeServiceRestStub, ): def __hash__(self): - return hash("CreativeServiceRestTransport.GetCreative") + return hash("CreativeServiceRestTransport.BatchDeactivateCreatives") @staticmethod def _get_response( @@ -789,44 +1017,493 @@ def _get_response( timeout=timeout, headers=headers, params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, ) return response def __call__( self, - request: creative_service.GetCreativeRequest, + request: creative_service.BatchDeactivateCreativesRequest, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Optional[float] = None, metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), - ) -> creative_messages.Creative: - r"""Call the get creative method over HTTP. + ) -> creative_service.BatchDeactivateCreativesResponse: + r"""Call the batch deactivate + creatives method over HTTP. - Args: - request (~.creative_service.GetCreativeRequest): - The request object. Request object for ``GetCreative`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be - sent along with the request as metadata. Normally, each value must be of type `str`, - but for metadata keys ending with the suffix `-bin`, the corresponding values must - be of type `bytes`. + Args: + request (~.creative_service.BatchDeactivateCreativesRequest): + The request object. Request object for ``BatchDeactivateCreatives`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. - Returns: - ~.creative_messages.Creative: - The Creative resource. + Returns: + ~.creative_service.BatchDeactivateCreativesResponse: + Response object for ``BatchDeactivateCreatives`` method. """ - http_options = ( - _BaseCreativeServiceRestTransport._BaseGetCreative._get_http_options() + http_options = _BaseCreativeServiceRestTransport._BaseBatchDeactivateCreatives._get_http_options() + request, metadata = self._interceptor.pre_batch_deactivate_creatives( + request, metadata ) - request, metadata = self._interceptor.pre_get_creative(request, metadata) transcoded_request, body, query_params = transcode_request( http_options, request, required_fields_default_values=getattr( - _BaseCreativeServiceRestTransport._BaseGetCreative, + _BaseCreativeServiceRestTransport._BaseBatchDeactivateCreatives, + "_BaseBatchDeactivateCreatives__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.CreativeServiceClient.BatchDeactivateCreatives", + extra={ + "serviceName": "google.ads.admanager.v1.CreativeService", + "rpcName": "BatchDeactivateCreatives", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = ( + CreativeServiceRestTransport._BatchDeactivateCreatives._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, + ) + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = creative_service.BatchDeactivateCreativesResponse() + pb_resp = creative_service.BatchDeactivateCreativesResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_batch_deactivate_creatives(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_batch_deactivate_creatives_with_metadata( + resp, response_metadata + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = ( + creative_service.BatchDeactivateCreativesResponse.to_json( + response + ) + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.CreativeServiceClient.batch_deactivate_creatives", + extra={ + "serviceName": "google.ads.admanager.v1.CreativeService", + "rpcName": "BatchDeactivateCreatives", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _BatchUpdateCreatives( + _BaseCreativeServiceRestTransport._BaseBatchUpdateCreatives, + CreativeServiceRestStub, + ): + def __hash__(self): + return hash("CreativeServiceRestTransport.BatchUpdateCreatives") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response + + def __call__( + self, + request: creative_service.BatchUpdateCreativesRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> creative_service.BatchUpdateCreativesResponse: + r"""Call the batch update creatives method over HTTP. + + Args: + request (~.creative_service.BatchUpdateCreativesRequest): + The request object. Request object for ``BatchUpdateCreatives`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.creative_service.BatchUpdateCreativesResponse: + Response object for ``BatchUpdateCreatives`` method. + """ + + http_options = _BaseCreativeServiceRestTransport._BaseBatchUpdateCreatives._get_http_options() + request, metadata = self._interceptor.pre_batch_update_creatives( + request, metadata + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseCreativeServiceRestTransport._BaseBatchUpdateCreatives, + "_BaseBatchUpdateCreatives__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.CreativeServiceClient.BatchUpdateCreatives", + extra={ + "serviceName": "google.ads.admanager.v1.CreativeService", + "rpcName": "BatchUpdateCreatives", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = CreativeServiceRestTransport._BatchUpdateCreatives._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = creative_service.BatchUpdateCreativesResponse() + pb_resp = creative_service.BatchUpdateCreativesResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_batch_update_creatives(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_batch_update_creatives_with_metadata( + resp, response_metadata + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = ( + creative_service.BatchUpdateCreativesResponse.to_json(response) + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.CreativeServiceClient.batch_update_creatives", + extra={ + "serviceName": "google.ads.admanager.v1.CreativeService", + "rpcName": "BatchUpdateCreatives", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _CreateCreative( + _BaseCreativeServiceRestTransport._BaseCreateCreative, CreativeServiceRestStub + ): + def __hash__(self): + return hash("CreativeServiceRestTransport.CreateCreative") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response + + def __call__( + self, + request: creative_service.CreateCreativeRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> creative_messages.Creative: + r"""Call the create creative method over HTTP. + + Args: + request (~.creative_service.CreateCreativeRequest): + The request object. Request object for ``CreateCreative`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.creative_messages.Creative: + The Creative resource. + """ + + http_options = _BaseCreativeServiceRestTransport._BaseCreateCreative._get_http_options() + request, metadata = self._interceptor.pre_create_creative(request, metadata) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseCreativeServiceRestTransport._BaseCreateCreative, + "_BaseCreateCreative__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.CreativeServiceClient.CreateCreative", + extra={ + "serviceName": "google.ads.admanager.v1.CreativeService", + "rpcName": "CreateCreative", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = CreativeServiceRestTransport._CreateCreative._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = creative_messages.Creative() + pb_resp = creative_messages.Creative.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_create_creative(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_creative_with_metadata( + resp, response_metadata + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = creative_messages.Creative.to_json(response) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.CreativeServiceClient.create_creative", + extra={ + "serviceName": "google.ads.admanager.v1.CreativeService", + "rpcName": "CreateCreative", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _GetCreative( + _BaseCreativeServiceRestTransport._BaseGetCreative, CreativeServiceRestStub + ): + def __hash__(self): + return hash("CreativeServiceRestTransport.GetCreative") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response + + def __call__( + self, + request: creative_service.GetCreativeRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> creative_messages.Creative: + r"""Call the get creative method over HTTP. + + Args: + request (~.creative_service.GetCreativeRequest): + The request object. Request object for ``GetCreative`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.creative_messages.Creative: + The Creative resource. + """ + + http_options = ( + _BaseCreativeServiceRestTransport._BaseGetCreative._get_http_options() + ) + request, metadata = self._interceptor.pre_get_creative(request, metadata) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseCreativeServiceRestTransport._BaseGetCreative, "_BaseGetCreative__REQUIRED_FIELDS_DEFAULT_VALUES", None, ), @@ -1058,6 +1735,151 @@ def __call__( ) return resp + class _UpdateCreative( + _BaseCreativeServiceRestTransport._BaseUpdateCreative, CreativeServiceRestStub + ): + def __hash__(self): + return hash("CreativeServiceRestTransport.UpdateCreative") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response + + def __call__( + self, + request: creative_service.UpdateCreativeRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> creative_messages.Creative: + r"""Call the update creative method over HTTP. + + Args: + request (~.creative_service.UpdateCreativeRequest): + The request object. Request object for ``UpdateCreative`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.creative_messages.Creative: + The Creative resource. + """ + + http_options = _BaseCreativeServiceRestTransport._BaseUpdateCreative._get_http_options() + request, metadata = self._interceptor.pre_update_creative(request, metadata) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseCreativeServiceRestTransport._BaseUpdateCreative, + "_BaseUpdateCreative__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.CreativeServiceClient.UpdateCreative", + extra={ + "serviceName": "google.ads.admanager.v1.CreativeService", + "rpcName": "UpdateCreative", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = CreativeServiceRestTransport._UpdateCreative._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = creative_messages.Creative() + pb_resp = creative_messages.Creative.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_update_creative(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_creative_with_metadata( + resp, response_metadata + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = creative_messages.Creative.to_json(response) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.CreativeServiceClient.update_creative", + extra={ + "serviceName": "google.ads.admanager.v1.CreativeService", + "rpcName": "UpdateCreative", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + @property def batch_activate_creatives( self, @@ -1071,6 +1893,17 @@ def batch_activate_creatives( self._session, self._host, self._interceptor ) # type: ignore + @property + def batch_create_creatives( + self, + ) -> Callable[ + [creative_service.BatchCreateCreativesRequest], + creative_service.BatchCreateCreativesResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._BatchCreateCreatives(self._session, self._host, self._interceptor) # type: ignore + @property def batch_deactivate_creatives( self, @@ -1084,6 +1917,25 @@ def batch_deactivate_creatives( self._session, self._host, self._interceptor ) # type: ignore + @property + def batch_update_creatives( + self, + ) -> Callable[ + [creative_service.BatchUpdateCreativesRequest], + creative_service.BatchUpdateCreativesResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._BatchUpdateCreatives(self._session, self._host, self._interceptor) # type: ignore + + @property + def create_creative( + self, + ) -> Callable[[creative_service.CreateCreativeRequest], creative_messages.Creative]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._CreateCreative(self._session, self._host, self._interceptor) # type: ignore + @property def get_creative( self, @@ -1102,6 +1954,14 @@ def list_creatives( # In C++ this would require a dynamic_cast return self._ListCreatives(self._session, self._host, self._interceptor) # type: ignore + @property + def update_creative( + self, + ) -> Callable[[creative_service.UpdateCreativeRequest], creative_messages.Creative]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateCreative(self._session, self._host, self._interceptor) # type: ignore + @property def cancel_operation(self): return self._CancelOperation(self._session, self._host, self._interceptor) # type: ignore diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/creative_service/transports/rest_base.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/creative_service/transports/rest_base.py index 707971fba1f7..bca6f61b0a98 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/services/creative_service/transports/rest_base.py +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/creative_service/transports/rest_base.py @@ -105,6 +105,23 @@ def _get_http_options(): ] return http_options + class _BaseBatchCreateCreatives: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{parent=networks/*}/creatives:batchCreate", + "body": "*", + }, + ] + return http_options + class _BaseBatchDeactivateCreatives: def __hash__(self): # pragma: NO COVER return NotImplementedError("__hash__ must be implemented.") @@ -122,6 +139,40 @@ def _get_http_options(): ] return http_options + class _BaseBatchUpdateCreatives: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{parent=networks/*}/creatives:batchUpdate", + "body": "*", + }, + ] + return http_options + + class _BaseCreateCreative: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{parent=networks/*}/creatives", + "body": "creative", + }, + ] + return http_options + class _BaseGetCreative: def __hash__(self): # pragma: NO COVER return NotImplementedError("__hash__ must be implemented.") @@ -154,6 +205,23 @@ def _get_http_options(): ] return http_options + class _BaseUpdateCreative: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "patch", + "uri": "/v1/{creative.name=networks/*/creatives/*}", + "body": "creative", + }, + ] + return http_options + class _BaseCancelOperation: def __hash__(self): # pragma: NO COVER return NotImplementedError("__hash__ must be implemented.") diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/dai_authentication_key_service/client.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/dai_authentication_key_service/client.py index db307630175b..f88ed5f046b0 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/services/dai_authentication_key_service/client.py +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/dai_authentication_key_service/client.py @@ -69,6 +69,7 @@ _LOGGER = std_logging.getLogger(__name__) import google.protobuf.field_mask_pb2 as field_mask_pb2 # type: ignore +import google.protobuf.timestamp_pb2 as timestamp_pb2 # type: ignore from google.longrunning import operations_pb2 # type: ignore from google.ads.admanager_v1.services.dai_authentication_key_service import pagers diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/entity_signals_mapping_service/client.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/entity_signals_mapping_service/client.py index d3ef3bfc516f..aaf0026b302e 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/services/entity_signals_mapping_service/client.py +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/entity_signals_mapping_service/client.py @@ -173,6 +173,66 @@ def transport(self) -> EntitySignalsMappingServiceTransport: """ return self._transport + @staticmethod + def audience_segment_path( + network_code: str, + audience_segment: str, + ) -> str: + """Returns a fully-qualified audience_segment string.""" + return "networks/{network_code}/audienceSegments/{audience_segment}".format( + network_code=network_code, + audience_segment=audience_segment, + ) + + @staticmethod + def parse_audience_segment_path(path: str) -> Dict[str, str]: + """Parses a audience_segment path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/audienceSegments/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def content_bundle_path( + network_code: str, + content_bundle: str, + ) -> str: + """Returns a fully-qualified content_bundle string.""" + return "networks/{network_code}/contentBundles/{content_bundle}".format( + network_code=network_code, + content_bundle=content_bundle, + ) + + @staticmethod + def parse_content_bundle_path(path: str) -> Dict[str, str]: + """Parses a content_bundle path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/contentBundles/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def custom_targeting_value_path( + network_code: str, + custom_targeting_value: str, + ) -> str: + """Returns a fully-qualified custom_targeting_value string.""" + return "networks/{network_code}/customTargetingValues/{custom_targeting_value}".format( + network_code=network_code, + custom_targeting_value=custom_targeting_value, + ) + + @staticmethod + def parse_custom_targeting_value_path(path: str) -> Dict[str, str]: + """Parses a custom_targeting_value path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/customTargetingValues/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def entity_signals_mapping_path( network_code: str, @@ -208,6 +268,26 @@ def parse_network_path(path: str) -> Dict[str, str]: m = re.match(r"^networks/(?P.+?)$", path) return m.groupdict() if m else {} + @staticmethod + def taxonomy_category_path( + network_code: str, + taxonomy_category: str, + ) -> str: + """Returns a fully-qualified taxonomy_category string.""" + return "networks/{network_code}/taxonomyCategories/{taxonomy_category}".format( + network_code=network_code, + taxonomy_category=taxonomy_category, + ) + + @staticmethod + def parse_taxonomy_category_path(path: str) -> Dict[str, str]: + """Parses a taxonomy_category path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/taxonomyCategories/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def common_billing_account_path( billing_account: str, @@ -897,6 +977,7 @@ def sample_create_entity_signals_mapping(): # Initialize request argument(s) entity_signals_mapping = admanager_v1.EntitySignalsMapping() entity_signals_mapping.audience_segment_id = 1980 + entity_signals_mapping.audience_segment = "audience_segment_value" request = admanager_v1.CreateEntitySignalsMappingRequest( parent="parent_value", @@ -1030,6 +1111,7 @@ def sample_update_entity_signals_mapping(): # Initialize request argument(s) entity_signals_mapping = admanager_v1.EntitySignalsMapping() entity_signals_mapping.audience_segment_id = 1980 + entity_signals_mapping.audience_segment = "audience_segment_value" request = admanager_v1.UpdateEntitySignalsMappingRequest( entity_signals_mapping=entity_signals_mapping, @@ -1170,6 +1252,7 @@ def sample_batch_create_entity_signals_mappings(): requests = admanager_v1.CreateEntitySignalsMappingRequest() requests.parent = "parent_value" requests.entity_signals_mapping.audience_segment_id = 1980 + requests.entity_signals_mapping.audience_segment = "audience_segment_value" request = admanager_v1.BatchCreateEntitySignalsMappingsRequest( parent="parent_value", @@ -1313,6 +1396,7 @@ def sample_batch_update_entity_signals_mappings(): # Initialize request argument(s) requests = admanager_v1.UpdateEntitySignalsMappingRequest() requests.entity_signals_mapping.audience_segment_id = 1980 + requests.entity_signals_mapping.audience_segment = "audience_segment_value" request = admanager_v1.BatchUpdateEntitySignalsMappingsRequest( parent="parent_value", diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/__init__.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/__init__.py new file mode 100644 index 000000000000..a8436fbfe04b --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/__init__.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +from .client import ForecastAdjustmentServiceClient + +__all__ = ("ForecastAdjustmentServiceClient",) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/client.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/client.py new file mode 100644 index 000000000000..17f37e39b9b5 --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/client.py @@ -0,0 +1,2476 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +import json +import logging as std_logging +import os +import re +import warnings +from collections import OrderedDict +from http import HTTPStatus +from typing import ( + Callable, + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, + cast, +) + +import google.protobuf +from google.api_core import client_options as client_options_lib +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.exceptions import MutualTLSChannelError # type: ignore +from google.auth.transport import mtls # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.ads.admanager_v1 import gapic_version as package_version +from google.ads.admanager_v1._compat import ( + get_api_endpoint, + get_default_mtls_endpoint, + get_universe_domain, + read_environment_variables, + should_use_client_cert, +) + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object, None] # type: ignore + +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = std_logging.getLogger(__name__) + +import google.protobuf.field_mask_pb2 as field_mask_pb2 # type: ignore +from google.longrunning import operations_pb2 # type: ignore + +from google.ads.admanager_v1.services.forecast_adjustment_service import pagers +from google.ads.admanager_v1.types import ( + date_range, + forecast_adjustment_enums, + forecast_adjustment_messages, + forecast_adjustment_service, +) + +from .transports.base import DEFAULT_CLIENT_INFO, ForecastAdjustmentServiceTransport +from .transports.rest import ForecastAdjustmentServiceRestTransport + + +class ForecastAdjustmentServiceClientMeta(type): + """Metaclass for the ForecastAdjustmentService client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + + _transport_registry = OrderedDict() # type: Dict[str, Type[ForecastAdjustmentServiceTransport]] + _transport_registry["rest"] = ForecastAdjustmentServiceRestTransport + + def get_transport_class( + cls, + label: Optional[str] = None, + ) -> Type[ForecastAdjustmentServiceTransport]: + """Returns an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class ForecastAdjustmentServiceClient(metaclass=ForecastAdjustmentServiceClientMeta): + """Provides methods for handling ``ForecastAdjustment`` objects.""" + + # Note: DEFAULT_ENDPOINT is deprecated. Use _DEFAULT_ENDPOINT_TEMPLATE instead. + DEFAULT_ENDPOINT = "admanager.googleapis.com" + DEFAULT_MTLS_ENDPOINT = get_default_mtls_endpoint(DEFAULT_ENDPOINT) + + _DEFAULT_ENDPOINT_TEMPLATE = "admanager.{UNIVERSE_DOMAIN}" + _DEFAULT_UNIVERSE = "googleapis.com" + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + ForecastAdjustmentServiceClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + @classmethod + def from_service_account_file(cls, filename: str, *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: + ForecastAdjustmentServiceClient: 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 + + @property + def transport(self) -> ForecastAdjustmentServiceTransport: + """Returns the transport used by the client instance. + + Returns: + ForecastAdjustmentServiceTransport: The transport used by the client + instance. + """ + return self._transport + + @staticmethod + def ad_category_path( + network_code: str, + ad_category: str, + ) -> str: + """Returns a fully-qualified ad_category string.""" + return "networks/{network_code}/adCategories/{ad_category}".format( + network_code=network_code, + ad_category=ad_category, + ) + + @staticmethod + def parse_ad_category_path(path: str) -> Dict[str, str]: + """Parses a ad_category path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/adCategories/(?P.+?)$", path + ) + return m.groupdict() if m else {} + + @staticmethod + def ad_spot_path( + network_code: str, + ad_spot: str, + ) -> str: + """Returns a fully-qualified ad_spot string.""" + return "networks/{network_code}/adSpots/{ad_spot}".format( + network_code=network_code, + ad_spot=ad_spot, + ) + + @staticmethod + def parse_ad_spot_path(path: str) -> Dict[str, str]: + """Parses a ad_spot path into its component segments.""" + m = re.match(r"^networks/(?P.+?)/adSpots/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def ad_unit_path( + network_code: str, + ad_unit: str, + ) -> str: + """Returns a fully-qualified ad_unit string.""" + return "networks/{network_code}/adUnits/{ad_unit}".format( + network_code=network_code, + ad_unit=ad_unit, + ) + + @staticmethod + def parse_ad_unit_path(path: str) -> Dict[str, str]: + """Parses a ad_unit path into its component segments.""" + m = re.match(r"^networks/(?P.+?)/adUnits/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def application_path( + network_code: str, + application: str, + ) -> str: + """Returns a fully-qualified application string.""" + return "networks/{network_code}/applications/{application}".format( + network_code=network_code, + application=application, + ) + + @staticmethod + def parse_application_path(path: str) -> Dict[str, str]: + """Parses a application path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/applications/(?P.+?)$", path + ) + return m.groupdict() if m else {} + + @staticmethod + def audience_segment_path( + network_code: str, + audience_segment: str, + ) -> str: + """Returns a fully-qualified audience_segment string.""" + return "networks/{network_code}/audienceSegments/{audience_segment}".format( + network_code=network_code, + audience_segment=audience_segment, + ) + + @staticmethod + def parse_audience_segment_path(path: str) -> Dict[str, str]: + """Parses a audience_segment path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/audienceSegments/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def bandwidth_group_path( + network_code: str, + bandwidth_group: str, + ) -> str: + """Returns a fully-qualified bandwidth_group string.""" + return "networks/{network_code}/bandwidthGroups/{bandwidth_group}".format( + network_code=network_code, + bandwidth_group=bandwidth_group, + ) + + @staticmethod + def parse_bandwidth_group_path(path: str) -> Dict[str, str]: + """Parses a bandwidth_group path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/bandwidthGroups/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def browser_path( + network_code: str, + browser: str, + ) -> str: + """Returns a fully-qualified browser string.""" + return "networks/{network_code}/browsers/{browser}".format( + network_code=network_code, + browser=browser, + ) + + @staticmethod + def parse_browser_path(path: str) -> Dict[str, str]: + """Parses a browser path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/browsers/(?P.+?)$", path + ) + return m.groupdict() if m else {} + + @staticmethod + def browser_language_path( + network_code: str, + browser_language: str, + ) -> str: + """Returns a fully-qualified browser_language string.""" + return "networks/{network_code}/browserLanguages/{browser_language}".format( + network_code=network_code, + browser_language=browser_language, + ) + + @staticmethod + def parse_browser_language_path(path: str) -> Dict[str, str]: + """Parses a browser_language path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/browserLanguages/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def cms_metadata_value_path( + network_code: str, + cms_metadata_value: str, + ) -> str: + """Returns a fully-qualified cms_metadata_value string.""" + return "networks/{network_code}/cmsMetadataValues/{cms_metadata_value}".format( + network_code=network_code, + cms_metadata_value=cms_metadata_value, + ) + + @staticmethod + def parse_cms_metadata_value_path(path: str) -> Dict[str, str]: + """Parses a cms_metadata_value path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/cmsMetadataValues/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def content_path( + network_code: str, + content: str, + ) -> str: + """Returns a fully-qualified content string.""" + return "networks/{network_code}/content/{content}".format( + network_code=network_code, + content=content, + ) + + @staticmethod + def parse_content_path(path: str) -> Dict[str, str]: + """Parses a content path into its component segments.""" + m = re.match(r"^networks/(?P.+?)/content/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def content_bundle_path( + network_code: str, + content_bundle: str, + ) -> str: + """Returns a fully-qualified content_bundle string.""" + return "networks/{network_code}/contentBundles/{content_bundle}".format( + network_code=network_code, + content_bundle=content_bundle, + ) + + @staticmethod + def parse_content_bundle_path(path: str) -> Dict[str, str]: + """Parses a content_bundle path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/contentBundles/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def content_label_path( + network_code: str, + content_label: str, + ) -> str: + """Returns a fully-qualified content_label string.""" + return "networks/{network_code}/contentLabels/{content_label}".format( + network_code=network_code, + content_label=content_label, + ) + + @staticmethod + def parse_content_label_path(path: str) -> Dict[str, str]: + """Parses a content_label path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/contentLabels/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def custom_targeting_key_path( + network_code: str, + custom_targeting_key: str, + ) -> str: + """Returns a fully-qualified custom_targeting_key string.""" + return ( + "networks/{network_code}/customTargetingKeys/{custom_targeting_key}".format( + network_code=network_code, + custom_targeting_key=custom_targeting_key, + ) + ) + + @staticmethod + def parse_custom_targeting_key_path(path: str) -> Dict[str, str]: + """Parses a custom_targeting_key path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/customTargetingKeys/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def custom_targeting_value_path( + network_code: str, + custom_targeting_value: str, + ) -> str: + """Returns a fully-qualified custom_targeting_value string.""" + return "networks/{network_code}/customTargetingValues/{custom_targeting_value}".format( + network_code=network_code, + custom_targeting_value=custom_targeting_value, + ) + + @staticmethod + def parse_custom_targeting_value_path(path: str) -> Dict[str, str]: + """Parses a custom_targeting_value path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/customTargetingValues/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def device_capability_path( + network_code: str, + device_capability: str, + ) -> str: + """Returns a fully-qualified device_capability string.""" + return "networks/{network_code}/deviceCapabilities/{device_capability}".format( + network_code=network_code, + device_capability=device_capability, + ) + + @staticmethod + def parse_device_capability_path(path: str) -> Dict[str, str]: + """Parses a device_capability path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/deviceCapabilities/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def device_category_path( + network_code: str, + device_category: str, + ) -> str: + """Returns a fully-qualified device_category string.""" + return "networks/{network_code}/deviceCategories/{device_category}".format( + network_code=network_code, + device_category=device_category, + ) + + @staticmethod + def parse_device_category_path(path: str) -> Dict[str, str]: + """Parses a device_category path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/deviceCategories/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def device_manufacturer_path( + network_code: str, + device_manufacturer: str, + ) -> str: + """Returns a fully-qualified device_manufacturer string.""" + return ( + "networks/{network_code}/deviceManufacturers/{device_manufacturer}".format( + network_code=network_code, + device_manufacturer=device_manufacturer, + ) + ) + + @staticmethod + def parse_device_manufacturer_path(path: str) -> Dict[str, str]: + """Parses a device_manufacturer path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/deviceManufacturers/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def forecast_adjustment_path( + network_code: str, + forecast_adjustment: str, + ) -> str: + """Returns a fully-qualified forecast_adjustment string.""" + return ( + "networks/{network_code}/forecastAdjustments/{forecast_adjustment}".format( + network_code=network_code, + forecast_adjustment=forecast_adjustment, + ) + ) + + @staticmethod + def parse_forecast_adjustment_path(path: str) -> Dict[str, str]: + """Parses a forecast_adjustment path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/forecastAdjustments/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def geo_target_path( + network_code: str, + geo_target: str, + ) -> str: + """Returns a fully-qualified geo_target string.""" + return "networks/{network_code}/geoTargets/{geo_target}".format( + network_code=network_code, + geo_target=geo_target, + ) + + @staticmethod + def parse_geo_target_path(path: str) -> Dict[str, str]: + """Parses a geo_target path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/geoTargets/(?P.+?)$", path + ) + return m.groupdict() if m else {} + + @staticmethod + def inventory_url_path( + network_code: str, + inventory_url: str, + ) -> str: + """Returns a fully-qualified inventory_url string.""" + return "networks/{network_code}/inventoryUrls/{inventory_url}".format( + network_code=network_code, + inventory_url=inventory_url, + ) + + @staticmethod + def parse_inventory_url_path(path: str) -> Dict[str, str]: + """Parses a inventory_url path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/inventoryUrls/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def mobile_carrier_path( + network_code: str, + mobile_carrier: str, + ) -> str: + """Returns a fully-qualified mobile_carrier string.""" + return "networks/{network_code}/mobileCarriers/{mobile_carrier}".format( + network_code=network_code, + mobile_carrier=mobile_carrier, + ) + + @staticmethod + def parse_mobile_carrier_path(path: str) -> Dict[str, str]: + """Parses a mobile_carrier path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/mobileCarriers/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def mobile_device_path( + network_code: str, + mobile_device: str, + ) -> str: + """Returns a fully-qualified mobile_device string.""" + return "networks/{network_code}/mobileDevices/{mobile_device}".format( + network_code=network_code, + mobile_device=mobile_device, + ) + + @staticmethod + def parse_mobile_device_path(path: str) -> Dict[str, str]: + """Parses a mobile_device path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/mobileDevices/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def mobile_device_submodel_path( + network_code: str, + mobile_device_submodel: str, + ) -> str: + """Returns a fully-qualified mobile_device_submodel string.""" + return "networks/{network_code}/mobileDeviceSubmodels/{mobile_device_submodel}".format( + network_code=network_code, + mobile_device_submodel=mobile_device_submodel, + ) + + @staticmethod + def parse_mobile_device_submodel_path(path: str) -> Dict[str, str]: + """Parses a mobile_device_submodel path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/mobileDeviceSubmodels/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def network_path( + network_code: str, + ) -> str: + """Returns a fully-qualified network string.""" + return "networks/{network_code}".format( + network_code=network_code, + ) + + @staticmethod + def parse_network_path(path: str) -> Dict[str, str]: + """Parses a network path into its component segments.""" + m = re.match(r"^networks/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def operating_system_path( + network_code: str, + operating_system: str, + ) -> str: + """Returns a fully-qualified operating_system string.""" + return "networks/{network_code}/operatingSystems/{operating_system}".format( + network_code=network_code, + operating_system=operating_system, + ) + + @staticmethod + def parse_operating_system_path(path: str) -> Dict[str, str]: + """Parses a operating_system path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/operatingSystems/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def operating_system_version_path( + network_code: str, + operating_system_version: str, + ) -> str: + """Returns a fully-qualified operating_system_version string.""" + return "networks/{network_code}/operatingSystemVersions/{operating_system_version}".format( + network_code=network_code, + operating_system_version=operating_system_version, + ) + + @staticmethod + def parse_operating_system_version_path(path: str) -> Dict[str, str]: + """Parses a operating_system_version path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/operatingSystemVersions/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def placement_path( + network_code: str, + placement: str, + ) -> str: + """Returns a fully-qualified placement string.""" + return "networks/{network_code}/placements/{placement}".format( + network_code=network_code, + placement=placement, + ) + + @staticmethod + def parse_placement_path(path: str) -> Dict[str, str]: + """Parses a placement path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/placements/(?P.+?)$", path + ) + return m.groupdict() if m else {} + + @staticmethod + def taxonomy_category_path( + network_code: str, + taxonomy_category: str, + ) -> str: + """Returns a fully-qualified taxonomy_category string.""" + return "networks/{network_code}/taxonomyCategories/{taxonomy_category}".format( + network_code=network_code, + taxonomy_category=taxonomy_category, + ) + + @staticmethod + def parse_taxonomy_category_path(path: str) -> Dict[str, str]: + """Parses a taxonomy_category path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/taxonomyCategories/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def traffic_forecast_segment_path( + network_code: str, + traffic_forecast_segment: str, + ) -> str: + """Returns a fully-qualified traffic_forecast_segment string.""" + return "networks/{network_code}/trafficForecastSegments/{traffic_forecast_segment}".format( + network_code=network_code, + traffic_forecast_segment=traffic_forecast_segment, + ) + + @staticmethod + def parse_traffic_forecast_segment_path(path: str) -> Dict[str, str]: + """Parses a traffic_forecast_segment path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/trafficForecastSegments/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def common_billing_account_path( + billing_account: str, + ) -> str: + """Returns a fully-qualified billing_account string.""" + return "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + + @staticmethod + def parse_common_billing_account_path(path: str) -> Dict[str, str]: + """Parse a billing_account path into its component segments.""" + m = re.match(r"^billingAccounts/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_folder_path( + folder: str, + ) -> str: + """Returns a fully-qualified folder string.""" + return "folders/{folder}".format( + folder=folder, + ) + + @staticmethod + def parse_common_folder_path(path: str) -> Dict[str, str]: + """Parse a folder path into its component segments.""" + m = re.match(r"^folders/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_organization_path( + organization: str, + ) -> str: + """Returns a fully-qualified organization string.""" + return "organizations/{organization}".format( + organization=organization, + ) + + @staticmethod + def parse_common_organization_path(path: str) -> Dict[str, str]: + """Parse a organization path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_project_path( + project: str, + ) -> str: + """Returns a fully-qualified project string.""" + return "projects/{project}".format( + project=project, + ) + + @staticmethod + def parse_common_project_path(path: str) -> Dict[str, str]: + """Parse a project path into its component segments.""" + m = re.match(r"^projects/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_location_path( + project: str, + location: str, + ) -> str: + """Returns a fully-qualified location string.""" + return "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + + @staticmethod + def parse_common_location_path(path: str) -> Dict[str, str]: + """Parse a location path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[client_options_lib.ClientOptions] = None + ): + """Deprecated. Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variable is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + + warnings.warn( + "get_mtls_endpoint_and_cert_source is deprecated. Use the api_endpoint property instead.", + DeprecationWarning, + ) + if client_options is None: + client_options = client_options_lib.ClientOptions() + use_client_cert = should_use_client_cert() + use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") + if use_mtls_endpoint not in ("auto", "never", "always"): + raise MutualTLSChannelError( + "Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`" + ) + + # Figure out the client cert source to use. + client_cert_source = None + if use_client_cert: + if client_options.client_cert_source: + client_cert_source = client_options.client_cert_source + elif mtls.has_default_client_cert_source(): + client_cert_source = mtls.default_client_cert_source() + + # Figure out which api endpoint to use. + if client_options.api_endpoint is not None: + api_endpoint = client_options.api_endpoint + elif use_mtls_endpoint == "always" or ( + use_mtls_endpoint == "auto" and client_cert_source + ): + api_endpoint = cls.DEFAULT_MTLS_ENDPOINT # type: ignore + else: + api_endpoint = cls.DEFAULT_ENDPOINT + + return api_endpoint, client_cert_source + + @staticmethod + def _get_client_cert_source(provided_cert_source, use_cert_flag): + """Return the client cert source to be used by the client. + + Args: + provided_cert_source (bytes): The client certificate source provided. + use_cert_flag (bool): A flag indicating whether to use the client certificate. + + Returns: + bytes or None: The client cert source to be used by the client. + """ + client_cert_source = None + if use_cert_flag: + if provided_cert_source: + client_cert_source = provided_cert_source + elif mtls.has_default_client_cert_source(): + client_cert_source = mtls.default_client_cert_source() + return client_cert_source + + def _validate_universe_domain(self): + """Validates client's and credentials' universe domains are consistent. + + Returns: + bool: True iff the configured universe domain is valid. + + Raises: + ValueError: If the configured universe domain is not valid. + """ + + # NOTE (b/349488459): universe validation is disabled until further notice. + return True + + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + + @property + def api_endpoint(self) -> str: + """Return the API endpoint used by the client instance. + + Returns: + str: The API endpoint used by the client instance. + """ + return self._api_endpoint + + @property + def universe_domain(self) -> str: + """Return the universe domain used by the client instance. + + Returns: + str: The universe domain used by the client instance. + """ + return self._universe_domain + + def __init__( + self, + *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Optional[ + Union[ + str, + ForecastAdjustmentServiceTransport, + Callable[..., ForecastAdjustmentServiceTransport], + ] + ] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the forecast adjustment service client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Optional[Union[str,ForecastAdjustmentServiceTransport,Callable[..., ForecastAdjustmentServiceTransport]]]): + The transport to use, or a Callable that constructs and returns a new transport. + If a Callable is given, it will be called with the same set of initialization + arguments as used in the ForecastAdjustmentServiceTransport constructor. + If set to None, a transport is chosen automatically. + client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): + Custom options for the client. + + 1. The ``api_endpoint`` property can be used to override the + default endpoint provided by the client when ``transport`` is + not explicitly provided. Only if this property is not set and + ``transport`` was not explicitly provided, the endpoint is + determined by the GOOGLE_API_USE_MTLS_ENDPOINT environment + variable, which have one of the following values: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto-switch to the + default mTLS endpoint if client certificate is present; this is + the default value). + + 2. If the GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide a client certificate for mTLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + + 3. The ``universe_domain`` property can be used to override the + default "googleapis.com" universe. Note that the ``api_endpoint`` + property still takes precedence; and ``universe_domain`` is + currently not supported for mTLS. + + 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. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + """ + self._client_options = client_options + if isinstance(self._client_options, dict): + self._client_options = client_options_lib.from_dict(self._client_options) + if self._client_options is None: + self._client_options = client_options_lib.ClientOptions() + self._client_options = cast( + client_options_lib.ClientOptions, self._client_options + ) + + universe_domain_opt = getattr(self._client_options, "universe_domain", None) + + self._use_client_cert, self._use_mtls_endpoint, self._universe_domain_env = ( + read_environment_variables() + ) + self._client_cert_source = ( + ForecastAdjustmentServiceClient._get_client_cert_source( + self._client_options.client_cert_source, self._use_client_cert + ) + ) + self._universe_domain = get_universe_domain( + universe_domain_opt, + self._universe_domain_env, + default_universe=ForecastAdjustmentServiceClient._DEFAULT_UNIVERSE, + ) + self._api_endpoint: str = "" # updated below, depending on `transport` + + # Initialize the universe domain validation. + self._is_universe_domain_valid = False + + if CLIENT_LOGGING_SUPPORTED: # pragma: NO COVER + # Setup logging. + client_logging.initialize_logging() + + api_key_value = getattr(self._client_options, "api_key", None) + if api_key_value and credentials: + raise ValueError( + "client_options.api_key and credentials are mutually exclusive" + ) + + # Save or instantiate the transport. + # Ordinarily, we provide the transport, but allowing a custom transport + # instance provides an extensibility point for unusual situations. + transport_provided = isinstance(transport, ForecastAdjustmentServiceTransport) + if transport_provided: + # transport is a ForecastAdjustmentServiceTransport instance. + if credentials or self._client_options.credentials_file or api_key_value: + raise ValueError( + "When providing a transport instance, " + "provide its credentials directly." + ) + if self._client_options.scopes: + raise ValueError( + "When providing a transport instance, provide its scopes directly." + ) + self._transport = cast(ForecastAdjustmentServiceTransport, transport) + self._api_endpoint = self._transport.host + + self._api_endpoint = self._api_endpoint or get_api_endpoint( + api_override=self._client_options.api_endpoint, + universe_domain=self._universe_domain, + default_universe=ForecastAdjustmentServiceClient._DEFAULT_UNIVERSE, + default_mtls_endpoint=ForecastAdjustmentServiceClient.DEFAULT_MTLS_ENDPOINT, + default_endpoint_template=ForecastAdjustmentServiceClient._DEFAULT_ENDPOINT_TEMPLATE, + use_mtls=self._use_mtls_endpoint == "always" + or (self._use_mtls_endpoint == "auto" and self._client_cert_source), + ) + + if not transport_provided: + import google.auth._default # type: ignore + + if api_key_value and hasattr( + google.auth._default, "get_api_key_credentials" + ): + credentials = google.auth._default.get_api_key_credentials( + api_key_value + ) + + transport_init: Union[ + Type[ForecastAdjustmentServiceTransport], + Callable[..., ForecastAdjustmentServiceTransport], + ] = ( + ForecastAdjustmentServiceClient.get_transport_class(transport) + if isinstance(transport, str) or transport is None + else cast(Callable[..., ForecastAdjustmentServiceTransport], transport) + ) + # initialize with the provided callable or the passed in class + self._transport = transport_init( + credentials=credentials, + credentials_file=self._client_options.credentials_file, + host=self._api_endpoint, + scopes=self._client_options.scopes, + client_cert_source_for_mtls=self._client_cert_source, + quota_project_id=self._client_options.quota_project_id, + client_info=client_info, + always_use_jwt_access=True, + api_audience=self._client_options.api_audience, + ) + + if "async" not in str(self._transport): + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + std_logging.DEBUG + ): # pragma: NO COVER + _LOGGER.debug( + "Created client `google.ads.admanager_v1.ForecastAdjustmentServiceClient`.", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "universeDomain": getattr( + self._transport._credentials, "universe_domain", "" + ), + "credentialsType": f"{type(self._transport._credentials).__module__}.{type(self._transport._credentials).__qualname__}", + "credentialsInfo": getattr( + self.transport._credentials, "get_cred_info", lambda: None + )(), + } + if hasattr(self._transport, "_credentials") + else { + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "credentialsType": None, + }, + ) + + def get_forecast_adjustment( + self, + request: Optional[ + Union[forecast_adjustment_service.GetForecastAdjustmentRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> forecast_adjustment_messages.ForecastAdjustment: + r"""Retrieves a ``ForecastAdjustment`` object. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_get_forecast_adjustment(): + # Create a client + client = admanager_v1.ForecastAdjustmentServiceClient() + + # Initialize request argument(s) + request = admanager_v1.GetForecastAdjustmentRequest( + name="name_value", + ) + + # Make the request + response = client.get_forecast_adjustment(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.GetForecastAdjustmentRequest, dict]): + The request object. Request object for ``GetForecastAdjustment`` method. + name (str): + Required. The resource name of the ForecastAdjustment. + Format: + ``networks/{network_code}/forecastAdjustments/{forecastAdjustmentId}`` + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.ForecastAdjustment: + Provides information about the + expected volume and composition of + traffic over a date range for a traffic + forecast segment. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [name] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, forecast_adjustment_service.GetForecastAdjustmentRequest + ): + request = forecast_adjustment_service.GetForecastAdjustmentRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_forecast_adjustment] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_forecast_adjustments( + self, + request: Optional[ + Union[forecast_adjustment_service.ListForecastAdjustmentsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> pagers.ListForecastAdjustmentsPager: + r"""Lists ``ForecastAdjustment`` objects. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_list_forecast_adjustments(): + # Create a client + client = admanager_v1.ForecastAdjustmentServiceClient() + + # Initialize request argument(s) + request = admanager_v1.ListForecastAdjustmentsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_forecast_adjustments(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.ListForecastAdjustmentsRequest, dict]): + The request object. Request object for ``ListForecastAdjustments`` method. + parent (str): + Required. The parent, which owns this collection of + ForecastAdjustments. Format: ``networks/{network_code}`` + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.services.forecast_adjustment_service.pagers.ListForecastAdjustmentsPager: + Response object for ListForecastAdjustmentsRequest containing matching + ForecastAdjustment objects. + + Iterating over this object will yield results and + resolve additional pages automatically. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, forecast_adjustment_service.ListForecastAdjustmentsRequest + ): + request = forecast_adjustment_service.ListForecastAdjustmentsRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.list_forecast_adjustments + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListForecastAdjustmentsPager( + method=rpc, + request=request, + response=response, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def create_forecast_adjustment( + self, + request: Optional[ + Union[forecast_adjustment_service.CreateForecastAdjustmentRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + forecast_adjustment: Optional[ + forecast_adjustment_messages.ForecastAdjustment + ] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> forecast_adjustment_messages.ForecastAdjustment: + r"""Creates a ``ForecastAdjustment`` object. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_create_forecast_adjustment(): + # Create a client + client = admanager_v1.ForecastAdjustmentServiceClient() + + # Initialize request argument(s) + forecast_adjustment = admanager_v1.ForecastAdjustment() + forecast_adjustment.daily_volume_settings.ad_opportunity_counts = [2301, 2302] + + request = admanager_v1.CreateForecastAdjustmentRequest( + parent="parent_value", + forecast_adjustment=forecast_adjustment, + ) + + # Make the request + response = client.create_forecast_adjustment(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.CreateForecastAdjustmentRequest, dict]): + The request object. Request object for ``CreateForecastAdjustment`` method. + parent (str): + Required. The parent resource where this + ``ForecastAdjustment`` will be created. Format: + ``networks/{network_code}`` + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + forecast_adjustment (google.ads.admanager_v1.types.ForecastAdjustment): + Required. The ``ForecastAdjustment`` to create. + This corresponds to the ``forecast_adjustment`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.ForecastAdjustment: + Provides information about the + expected volume and composition of + traffic over a date range for a traffic + forecast segment. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent, forecast_adjustment] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, forecast_adjustment_service.CreateForecastAdjustmentRequest + ): + request = forecast_adjustment_service.CreateForecastAdjustmentRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if forecast_adjustment is not None: + request.forecast_adjustment = forecast_adjustment + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.create_forecast_adjustment + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def batch_create_forecast_adjustments( + self, + request: Optional[ + Union[ + forecast_adjustment_service.BatchCreateForecastAdjustmentsRequest, dict + ] + ] = None, + *, + parent: Optional[str] = None, + requests: Optional[ + MutableSequence[forecast_adjustment_service.CreateForecastAdjustmentRequest] + ] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> forecast_adjustment_service.BatchCreateForecastAdjustmentsResponse: + r"""Creates ``ForecastAdjustment`` objects. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_batch_create_forecast_adjustments(): + # Create a client + client = admanager_v1.ForecastAdjustmentServiceClient() + + # Initialize request argument(s) + requests = admanager_v1.CreateForecastAdjustmentRequest() + requests.parent = "parent_value" + requests.forecast_adjustment.daily_volume_settings.ad_opportunity_counts = [2301, 2302] + + request = admanager_v1.BatchCreateForecastAdjustmentsRequest( + parent="parent_value", + requests=requests, + ) + + # Make the request + response = client.batch_create_forecast_adjustments(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.BatchCreateForecastAdjustmentsRequest, dict]): + The request object. Request object for ``BatchCreateForecastAdjustments`` + method. + parent (str): + Required. The parent resource where + ``ForecastAdjustments`` will be created. Format: + ``networks/{network_code}`` The parent field in the + CreateForecastAdjustmentRequest must match this field. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + requests (MutableSequence[google.ads.admanager_v1.types.CreateForecastAdjustmentRequest]): + Required. The ``ForecastAdjustment`` objects to create. + A maximum of 100 objects can be created in a batch. + + This corresponds to the ``requests`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.BatchCreateForecastAdjustmentsResponse: + Response object for BatchCreateForecastAdjustments + method. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent, requests] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, forecast_adjustment_service.BatchCreateForecastAdjustmentsRequest + ): + request = forecast_adjustment_service.BatchCreateForecastAdjustmentsRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if requests is not None: + request.requests = requests + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.batch_create_forecast_adjustments + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def batch_activate_forecast_adjustments( + self, + request: Optional[ + Union[ + forecast_adjustment_service.BatchActivateForecastAdjustmentsRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + names: Optional[MutableSequence[str]] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> forecast_adjustment_service.BatchActivateForecastAdjustmentsResponse: + r"""Activates a list of ``ForecastAdjustment`` objects. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_batch_activate_forecast_adjustments(): + # Create a client + client = admanager_v1.ForecastAdjustmentServiceClient() + + # Initialize request argument(s) + request = admanager_v1.BatchActivateForecastAdjustmentsRequest( + parent="parent_value", + names=['names_value1', 'names_value2'], + ) + + # Make the request + response = client.batch_activate_forecast_adjustments(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.BatchActivateForecastAdjustmentsRequest, dict]): + The request object. Request message for ``BatchActivateForecastAdjustments`` + method. + parent (str): + Required. Format: ``networks/{network_code}`` + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + names (MutableSequence[str]): + Required. The resource names of the + ``ForecastAdjustment`` objects to activate. + + This corresponds to the ``names`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.BatchActivateForecastAdjustmentsResponse: + Response object for BatchActivateForecastAdjustments + method. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent, names] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, forecast_adjustment_service.BatchActivateForecastAdjustmentsRequest + ): + request = ( + forecast_adjustment_service.BatchActivateForecastAdjustmentsRequest( + request + ) + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if names is not None: + request.names = names + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.batch_activate_forecast_adjustments + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def batch_deactivate_forecast_adjustments( + self, + request: Optional[ + Union[ + forecast_adjustment_service.BatchDeactivateForecastAdjustmentsRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + names: Optional[MutableSequence[str]] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> forecast_adjustment_service.BatchDeactivateForecastAdjustmentsResponse: + r"""Deactivates a list of ``ForecastAdjustment`` objects. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_batch_deactivate_forecast_adjustments(): + # Create a client + client = admanager_v1.ForecastAdjustmentServiceClient() + + # Initialize request argument(s) + request = admanager_v1.BatchDeactivateForecastAdjustmentsRequest( + parent="parent_value", + names=['names_value1', 'names_value2'], + ) + + # Make the request + response = client.batch_deactivate_forecast_adjustments(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.BatchDeactivateForecastAdjustmentsRequest, dict]): + The request object. Request message for + ``BatchDeactivateForecastAdjustments`` method. + parent (str): + Required. Format: ``networks/{network_code}`` + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + names (MutableSequence[str]): + Required. The resource names of the + ``ForecastAdjustment`` objects to deactivate. + + This corresponds to the ``names`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.BatchDeactivateForecastAdjustmentsResponse: + Response object for BatchDeactivateForecastAdjustments + method. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent, names] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, + forecast_adjustment_service.BatchDeactivateForecastAdjustmentsRequest, + ): + request = ( + forecast_adjustment_service.BatchDeactivateForecastAdjustmentsRequest( + request + ) + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if names is not None: + request.names = names + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.batch_deactivate_forecast_adjustments + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_forecast_adjustment( + self, + request: Optional[ + Union[forecast_adjustment_service.UpdateForecastAdjustmentRequest, dict] + ] = None, + *, + forecast_adjustment: Optional[ + forecast_adjustment_messages.ForecastAdjustment + ] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> forecast_adjustment_messages.ForecastAdjustment: + r"""Updates a ``ForecastAdjustment`` object. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_update_forecast_adjustment(): + # Create a client + client = admanager_v1.ForecastAdjustmentServiceClient() + + # Initialize request argument(s) + forecast_adjustment = admanager_v1.ForecastAdjustment() + forecast_adjustment.daily_volume_settings.ad_opportunity_counts = [2301, 2302] + + request = admanager_v1.UpdateForecastAdjustmentRequest( + forecast_adjustment=forecast_adjustment, + ) + + # Make the request + response = client.update_forecast_adjustment(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.UpdateForecastAdjustmentRequest, dict]): + The request object. Request object for ``UpdateForecastAdjustment`` method. + forecast_adjustment (google.ads.admanager_v1.types.ForecastAdjustment): + Required. The ``ForecastAdjustment`` to update. + + The ``ForecastAdjustment``'s ``name`` is used to + identify the ``ForecastAdjustment`` to update. + + This corresponds to the ``forecast_adjustment`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + Optional. The list of fields to + update. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.ForecastAdjustment: + Provides information about the + expected volume and composition of + traffic over a date range for a traffic + forecast segment. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [forecast_adjustment, update_mask] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, forecast_adjustment_service.UpdateForecastAdjustmentRequest + ): + request = forecast_adjustment_service.UpdateForecastAdjustmentRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if forecast_adjustment is not None: + request.forecast_adjustment = forecast_adjustment + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.update_forecast_adjustment + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("forecast_adjustment.name", request.forecast_adjustment.name),) + ), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def batch_update_forecast_adjustments( + self, + request: Optional[ + Union[ + forecast_adjustment_service.BatchUpdateForecastAdjustmentsRequest, dict + ] + ] = None, + *, + parent: Optional[str] = None, + requests: Optional[ + MutableSequence[forecast_adjustment_service.UpdateForecastAdjustmentRequest] + ] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> forecast_adjustment_service.BatchUpdateForecastAdjustmentsResponse: + r"""Batch updates ``ForecastAdjustment`` objects. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_batch_update_forecast_adjustments(): + # Create a client + client = admanager_v1.ForecastAdjustmentServiceClient() + + # Initialize request argument(s) + requests = admanager_v1.UpdateForecastAdjustmentRequest() + requests.forecast_adjustment.daily_volume_settings.ad_opportunity_counts = [2301, 2302] + + request = admanager_v1.BatchUpdateForecastAdjustmentsRequest( + parent="parent_value", + requests=requests, + ) + + # Make the request + response = client.batch_update_forecast_adjustments(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.BatchUpdateForecastAdjustmentsRequest, dict]): + The request object. Request object for ``BatchUpdateForecastAdjustments`` + method. + parent (str): + Required. The parent resource where + ``ForecastAdjustments`` will be updated. Format: + ``networks/{network_code}`` The parent field in the + UpdateForecastAdjustmentRequest must match this field. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + requests (MutableSequence[google.ads.admanager_v1.types.UpdateForecastAdjustmentRequest]): + Required. The ``ForecastAdjustment`` objects to update. + A maximum of 100 objects can be updated in a batch. + + This corresponds to the ``requests`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.BatchUpdateForecastAdjustmentsResponse: + Response object for BatchUpdateForecastAdjustments + method. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent, requests] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, forecast_adjustment_service.BatchUpdateForecastAdjustmentsRequest + ): + request = forecast_adjustment_service.BatchUpdateForecastAdjustmentsRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if requests is not None: + request.requests = requests + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.batch_update_forecast_adjustments + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def calculate_daily_ad_opportunity_counts( + self, + request: Optional[ + Union[ + forecast_adjustment_service.CalculateDailyAdOpportunityCountsRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + forecast_adjustment: Optional[ + forecast_adjustment_messages.ForecastAdjustment + ] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> forecast_adjustment_service.CalculateDailyAdOpportunityCountsResponse: + r"""Calculates daily ad opportunity counts for a prospective + ``ForecastAdjustment`` object. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_calculate_daily_ad_opportunity_counts(): + # Create a client + client = admanager_v1.ForecastAdjustmentServiceClient() + + # Initialize request argument(s) + forecast_adjustment = admanager_v1.ForecastAdjustment() + forecast_adjustment.daily_volume_settings.ad_opportunity_counts = [2301, 2302] + + request = admanager_v1.CalculateDailyAdOpportunityCountsRequest( + parent="parent_value", + forecast_adjustment=forecast_adjustment, + ) + + # Make the request + response = client.calculate_daily_ad_opportunity_counts(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.CalculateDailyAdOpportunityCountsRequest, dict]): + The request object. Request message for + ``CalculateDailyAdOpportunityCounts`` method. + parent (str): + Required. The parent resource where this + ``ForecastAdjustment`` will be calculated. Format: + ``networks/{network_code}`` + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + forecast_adjustment (google.ads.admanager_v1.types.ForecastAdjustment): + Required. The prospective ``ForecastAdjustment`` to + calculate daily ad opportunity counts for. + + This corresponds to the ``forecast_adjustment`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.CalculateDailyAdOpportunityCountsResponse: + Response message for CalculateDailyAdOpportunityCounts + method. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent, forecast_adjustment] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, + forecast_adjustment_service.CalculateDailyAdOpportunityCountsRequest, + ): + request = ( + forecast_adjustment_service.CalculateDailyAdOpportunityCountsRequest( + request + ) + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if forecast_adjustment is not None: + request.forecast_adjustment = forecast_adjustment + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.calculate_daily_ad_opportunity_counts + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def __enter__(self) -> "ForecastAdjustmentServiceClient": + return self + + def __exit__(self, type, value, traceback): + """Releases underlying transport's resources. + + .. warning:: + ONLY use as a context manager if the transport is NOT shared + with other clients! Exiting the with block will CLOSE the transport + and may cause errors in other clients! + """ + self.transport.close() + + def get_operation( + self, + request: Optional[Union[operations_pb2.GetOperationRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> operations_pb2.Operation: + r"""Gets the latest state of a long-running operation. + + Args: + request (:class:`~.operations_pb2.GetOperationRequest`): + The request object. Request message for + `GetOperation` method. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + Returns: + ~.operations_pb2.Operation: + An ``Operation`` object. + """ + # Create or coerce a protobuf request object. + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if request is None: + request_pb = operations_pb2.GetOperationRequest() + elif isinstance(request, dict): + request_pb = operations_pb2.GetOperationRequest(**request) + else: + request_pb = request + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_operation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request_pb.name),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + try: + # Send the request. + response = rpc( + request_pb, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e + + def cancel_operation( + self, + request: Optional[Union[operations_pb2.CancelOperationRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> None: + r"""Starts asynchronous cancellation on a long-running operation. + + The server makes a best effort to cancel the operation, but success + is not guaranteed. If the server doesn't support this method, it returns + `google.rpc.Code.UNIMPLEMENTED`. + + Args: + request (:class:`~.operations_pb2.CancelOperationRequest`): + The request object. Request message for + `CancelOperation` method. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + Returns: + None + """ + # Create or coerce a protobuf request object. + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if request is None: + request_pb = operations_pb2.CancelOperationRequest() + elif isinstance(request, dict): + request_pb = operations_pb2.CancelOperationRequest(**request) + else: + request_pb = request + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.cancel_operation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request_pb.name),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + rpc( + request_pb, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) +DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + +__all__ = ("ForecastAdjustmentServiceClient",) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/pagers.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/pagers.py new file mode 100644 index 000000000000..7ac382d210ef --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/pagers.py @@ -0,0 +1,126 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +from typing import ( + Any, + AsyncIterator, + Awaitable, + Callable, + Iterator, + Optional, + Sequence, + Tuple, + Union, +) + +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.api_core import retry_async as retries_async + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] + OptionalAsyncRetry = Union[ + retries_async.AsyncRetry, gapic_v1.method._MethodDefault, None + ] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object, None] # type: ignore + OptionalAsyncRetry = Union[retries_async.AsyncRetry, object, None] # type: ignore + +from google.ads.admanager_v1.types import ( + forecast_adjustment_messages, + forecast_adjustment_service, +) + + +class ListForecastAdjustmentsPager: + """A pager for iterating through ``list_forecast_adjustments`` requests. + + This class thinly wraps an initial + :class:`google.ads.admanager_v1.types.ListForecastAdjustmentsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``forecast_adjustments`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListForecastAdjustments`` requests and continue to iterate + through the ``forecast_adjustments`` field on the + corresponding responses. + + All the usual :class:`google.ads.admanager_v1.types.ListForecastAdjustmentsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[ + ..., forecast_adjustment_service.ListForecastAdjustmentsResponse + ], + request: forecast_adjustment_service.ListForecastAdjustmentsRequest, + response: forecast_adjustment_service.ListForecastAdjustmentsResponse, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.ads.admanager_v1.types.ListForecastAdjustmentsRequest): + The initial request object. + response (google.ads.admanager_v1.types.ListForecastAdjustmentsResponse): + The initial response object. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + """ + self._method = method + self._request = forecast_adjustment_service.ListForecastAdjustmentsRequest( + request + ) + self._response = response + self._retry = retry + self._timeout = timeout + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages( + self, + ) -> Iterator[forecast_adjustment_service.ListForecastAdjustmentsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method( + self._request, + retry=self._retry, + timeout=self._timeout, + metadata=self._metadata, + ) + yield self._response + + def __iter__(self) -> Iterator[forecast_adjustment_messages.ForecastAdjustment]: + for page in self.pages: + yield from page.forecast_adjustments + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/README.rst b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/README.rst new file mode 100644 index 000000000000..56665b693b0f --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/README.rst @@ -0,0 +1,10 @@ + +transport inheritance structure +_______________________________ + +``ForecastAdjustmentServiceTransport`` is the ABC for all transports. + +- public child ``ForecastAdjustmentServiceGrpcTransport`` for sync gRPC transport (defined in ``grpc.py``). +- public child ``ForecastAdjustmentServiceGrpcAsyncIOTransport`` for async gRPC transport (defined in ``grpc_asyncio.py``). +- private child ``_BaseForecastAdjustmentServiceRestTransport`` for base REST transport with inner classes ``_BaseMETHOD`` (defined in ``rest_base.py``). +- public child ``ForecastAdjustmentServiceRestTransport`` for sync REST transport with inner classes ``METHOD`` derived from the parent's corresponding ``_BaseMETHOD`` classes (defined in ``rest.py``). diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/__init__.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/__init__.py new file mode 100644 index 000000000000..0df75f37fcb1 --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/__init__.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +from collections import OrderedDict +from typing import Dict, Type + +from .base import ForecastAdjustmentServiceTransport +from .rest import ( + ForecastAdjustmentServiceRestInterceptor, + ForecastAdjustmentServiceRestTransport, +) + +# Compile a registry of transports. +_transport_registry = OrderedDict() # type: Dict[str, Type[ForecastAdjustmentServiceTransport]] +_transport_registry["rest"] = ForecastAdjustmentServiceRestTransport + +__all__ = ( + "ForecastAdjustmentServiceTransport", + "ForecastAdjustmentServiceRestTransport", + "ForecastAdjustmentServiceRestInterceptor", +) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/base.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/base.py new file mode 100644 index 000000000000..7ff7cc3f35d7 --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/base.py @@ -0,0 +1,357 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +import abc +from typing import Awaitable, Callable, Dict, Optional, Sequence, Union + +import google.api_core +import google.auth # type: ignore +import google.protobuf +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.auth import credentials as ga_credentials # type: ignore +from google.longrunning import operations_pb2 # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.ads.admanager_v1 import gapic_version as package_version +from google.ads.admanager_v1.types import ( + forecast_adjustment_messages, + forecast_adjustment_service, +) + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=package_version.__version__ +) +DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + + +class ForecastAdjustmentServiceTransport(abc.ABC): + """Abstract transport class for ForecastAdjustmentService.""" + + AUTH_SCOPES = ( + "https://www.googleapis.com/auth/admanager", + "https://www.googleapis.com/auth/admanager.readonly", + ) + + DEFAULT_HOST: str = "admanager.googleapis.com" + + def __init__( + self, + *, + host: str = DEFAULT_HOST, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + **kwargs, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to (default: 'admanager.googleapis.com'). + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + credentials_file (Optional[str]): Deprecated. A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. This argument will be + removed in the next major version of this library. + scopes (Optional[Sequence[str]]): A list of scopes. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + api_audience (Optional[str]): The intended audience for the API calls + to the service that will be set when using certain 3rd party + authentication flows. Audience is typically a resource identifier. + If not set, the host value will be used as a default. + """ + + # Save the scopes. + self._scopes = scopes + if not hasattr(self, "_ignore_credentials"): + self._ignore_credentials: bool = False + + # If no credentials are provided, then determine the appropriate + # defaults. + if credentials and credentials_file: + raise core_exceptions.DuplicateCredentialArgs( + "'credentials_file' and 'credentials' are mutually exclusive" + ) + + if credentials_file is not None: + credentials, _ = google.auth.load_credentials_from_file( + credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + default_scopes=self.AUTH_SCOPES, + ) + elif credentials is None and not self._ignore_credentials: + credentials, _ = google.auth.default( + scopes=scopes, + quota_project_id=quota_project_id, + default_scopes=self.AUTH_SCOPES, + ) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience( + api_audience if api_audience else host + ) + + # If the credentials are service account credentials, then always try to use self signed JWT. + if ( + always_use_jwt_access + and isinstance(credentials, service_account.Credentials) + and hasattr(service_account.Credentials, "with_always_use_jwt_access") + ): + credentials = credentials.with_always_use_jwt_access(True) + + # Save the credentials. + self._credentials = credentials + + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + + self._wrapped_methods: Dict[Callable, Callable] = {} + + @property + def host(self): + return self._host + + def _prep_wrapped_messages(self, client_info): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.get_forecast_adjustment: gapic_v1.method.wrap_method( + self.get_forecast_adjustment, + default_timeout=None, + client_info=client_info, + ), + self.list_forecast_adjustments: gapic_v1.method.wrap_method( + self.list_forecast_adjustments, + default_timeout=None, + client_info=client_info, + ), + self.create_forecast_adjustment: gapic_v1.method.wrap_method( + self.create_forecast_adjustment, + default_timeout=None, + client_info=client_info, + ), + self.batch_create_forecast_adjustments: gapic_v1.method.wrap_method( + self.batch_create_forecast_adjustments, + default_timeout=None, + client_info=client_info, + ), + self.batch_activate_forecast_adjustments: gapic_v1.method.wrap_method( + self.batch_activate_forecast_adjustments, + default_timeout=None, + client_info=client_info, + ), + self.batch_deactivate_forecast_adjustments: gapic_v1.method.wrap_method( + self.batch_deactivate_forecast_adjustments, + default_timeout=None, + client_info=client_info, + ), + self.update_forecast_adjustment: gapic_v1.method.wrap_method( + self.update_forecast_adjustment, + default_timeout=None, + client_info=client_info, + ), + self.batch_update_forecast_adjustments: gapic_v1.method.wrap_method( + self.batch_update_forecast_adjustments, + default_timeout=None, + client_info=client_info, + ), + self.calculate_daily_ad_opportunity_counts: gapic_v1.method.wrap_method( + self.calculate_daily_ad_opportunity_counts, + default_timeout=None, + client_info=client_info, + ), + self.cancel_operation: gapic_v1.method.wrap_method( + self.cancel_operation, + default_timeout=None, + client_info=client_info, + ), + self.get_operation: gapic_v1.method.wrap_method( + self.get_operation, + default_timeout=None, + client_info=client_info, + ), + } + + def close(self): + """Closes resources associated with the transport. + + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! + """ + raise NotImplementedError() + + @property + def get_forecast_adjustment( + self, + ) -> Callable[ + [forecast_adjustment_service.GetForecastAdjustmentRequest], + Union[ + forecast_adjustment_messages.ForecastAdjustment, + Awaitable[forecast_adjustment_messages.ForecastAdjustment], + ], + ]: + raise NotImplementedError() + + @property + def list_forecast_adjustments( + self, + ) -> Callable[ + [forecast_adjustment_service.ListForecastAdjustmentsRequest], + Union[ + forecast_adjustment_service.ListForecastAdjustmentsResponse, + Awaitable[forecast_adjustment_service.ListForecastAdjustmentsResponse], + ], + ]: + raise NotImplementedError() + + @property + def create_forecast_adjustment( + self, + ) -> Callable[ + [forecast_adjustment_service.CreateForecastAdjustmentRequest], + Union[ + forecast_adjustment_messages.ForecastAdjustment, + Awaitable[forecast_adjustment_messages.ForecastAdjustment], + ], + ]: + raise NotImplementedError() + + @property + def batch_create_forecast_adjustments( + self, + ) -> Callable[ + [forecast_adjustment_service.BatchCreateForecastAdjustmentsRequest], + Union[ + forecast_adjustment_service.BatchCreateForecastAdjustmentsResponse, + Awaitable[ + forecast_adjustment_service.BatchCreateForecastAdjustmentsResponse + ], + ], + ]: + raise NotImplementedError() + + @property + def batch_activate_forecast_adjustments( + self, + ) -> Callable[ + [forecast_adjustment_service.BatchActivateForecastAdjustmentsRequest], + Union[ + forecast_adjustment_service.BatchActivateForecastAdjustmentsResponse, + Awaitable[ + forecast_adjustment_service.BatchActivateForecastAdjustmentsResponse + ], + ], + ]: + raise NotImplementedError() + + @property + def batch_deactivate_forecast_adjustments( + self, + ) -> Callable[ + [forecast_adjustment_service.BatchDeactivateForecastAdjustmentsRequest], + Union[ + forecast_adjustment_service.BatchDeactivateForecastAdjustmentsResponse, + Awaitable[ + forecast_adjustment_service.BatchDeactivateForecastAdjustmentsResponse + ], + ], + ]: + raise NotImplementedError() + + @property + def update_forecast_adjustment( + self, + ) -> Callable[ + [forecast_adjustment_service.UpdateForecastAdjustmentRequest], + Union[ + forecast_adjustment_messages.ForecastAdjustment, + Awaitable[forecast_adjustment_messages.ForecastAdjustment], + ], + ]: + raise NotImplementedError() + + @property + def batch_update_forecast_adjustments( + self, + ) -> Callable[ + [forecast_adjustment_service.BatchUpdateForecastAdjustmentsRequest], + Union[ + forecast_adjustment_service.BatchUpdateForecastAdjustmentsResponse, + Awaitable[ + forecast_adjustment_service.BatchUpdateForecastAdjustmentsResponse + ], + ], + ]: + raise NotImplementedError() + + @property + def calculate_daily_ad_opportunity_counts( + self, + ) -> Callable[ + [forecast_adjustment_service.CalculateDailyAdOpportunityCountsRequest], + Union[ + forecast_adjustment_service.CalculateDailyAdOpportunityCountsResponse, + Awaitable[ + forecast_adjustment_service.CalculateDailyAdOpportunityCountsResponse + ], + ], + ]: + raise NotImplementedError() + + @property + def get_operation( + self, + ) -> Callable[ + [operations_pb2.GetOperationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def cancel_operation( + self, + ) -> Callable[ + [operations_pb2.CancelOperationRequest], + None, + ]: + raise NotImplementedError() + + @property + def kind(self) -> str: + raise NotImplementedError() + + +__all__ = ("ForecastAdjustmentServiceTransport",) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/rest.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/rest.py new file mode 100644 index 000000000000..0035c488320e --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/rest.py @@ -0,0 +1,2599 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +import dataclasses +import json # type: ignore +import logging +import warnings +from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union + +import google.protobuf +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1, rest_helpers, rest_streaming +from google.api_core import retry as retries +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.requests import AuthorizedSession # type: ignore +from google.longrunning import operations_pb2 # type: ignore +from google.protobuf import json_format +from requests import __version__ as requests_version + +from google.ads.admanager_v1._compat import transcode_request +from google.ads.admanager_v1.types import ( + forecast_adjustment_messages, + forecast_adjustment_service, +) + +from .base import DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO +from .rest_base import _BaseForecastAdjustmentServiceRestTransport + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object, None] # type: ignore + +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = logging.getLogger(__name__) + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, + grpc_version=None, + rest_version=f"requests@{requests_version}", +) + +DEFAULT_CLIENT_INFO.protobuf_runtime_version = google.protobuf.__version__ + + +class ForecastAdjustmentServiceRestInterceptor: + """Interceptor for ForecastAdjustmentService. + + Interceptors are used to manipulate requests, request metadata, and responses + in arbitrary ways. + Example use cases include: + * Logging + * Verifying requests according to service or custom semantics + * Stripping extraneous information from responses + + These use cases and more can be enabled by injecting an + instance of a custom subclass when constructing the ForecastAdjustmentServiceRestTransport. + + .. code-block:: python + class MyCustomForecastAdjustmentServiceInterceptor(ForecastAdjustmentServiceRestInterceptor): + def pre_batch_activate_forecast_adjustments(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_batch_activate_forecast_adjustments(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_batch_create_forecast_adjustments(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_batch_create_forecast_adjustments(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_batch_deactivate_forecast_adjustments(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_batch_deactivate_forecast_adjustments(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_batch_update_forecast_adjustments(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_batch_update_forecast_adjustments(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_calculate_daily_ad_opportunity_counts(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_calculate_daily_ad_opportunity_counts(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_create_forecast_adjustment(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_create_forecast_adjustment(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_get_forecast_adjustment(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_forecast_adjustment(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_forecast_adjustments(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_forecast_adjustments(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_forecast_adjustment(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_forecast_adjustment(self, response): + logging.log(f"Received response: {response}") + return response + + transport = ForecastAdjustmentServiceRestTransport(interceptor=MyCustomForecastAdjustmentServiceInterceptor()) + client = ForecastAdjustmentServiceClient(transport=transport) + + + """ + + def pre_batch_activate_forecast_adjustments( + self, + request: forecast_adjustment_service.BatchActivateForecastAdjustmentsRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_service.BatchActivateForecastAdjustmentsRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for batch_activate_forecast_adjustments + + Override in a subclass to manipulate the request or metadata + before they are sent to the ForecastAdjustmentService server. + """ + return request, metadata + + def post_batch_activate_forecast_adjustments( + self, + response: forecast_adjustment_service.BatchActivateForecastAdjustmentsResponse, + ) -> forecast_adjustment_service.BatchActivateForecastAdjustmentsResponse: + """Post-rpc interceptor for batch_activate_forecast_adjustments + + DEPRECATED. Please use the `post_batch_activate_forecast_adjustments_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the ForecastAdjustmentService server but before + it is returned to user code. This `post_batch_activate_forecast_adjustments` interceptor runs + before the `post_batch_activate_forecast_adjustments_with_metadata` interceptor. + """ + return response + + def post_batch_activate_forecast_adjustments_with_metadata( + self, + response: forecast_adjustment_service.BatchActivateForecastAdjustmentsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_service.BatchActivateForecastAdjustmentsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for batch_activate_forecast_adjustments + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ForecastAdjustmentService server but before it is returned to user code. + + We recommend only using this `post_batch_activate_forecast_adjustments_with_metadata` + interceptor in new development instead of the `post_batch_activate_forecast_adjustments` interceptor. + When both interceptors are used, this `post_batch_activate_forecast_adjustments_with_metadata` interceptor runs after the + `post_batch_activate_forecast_adjustments` interceptor. The (possibly modified) response returned by + `post_batch_activate_forecast_adjustments` will be passed to + `post_batch_activate_forecast_adjustments_with_metadata`. + """ + return response, metadata + + def pre_batch_create_forecast_adjustments( + self, + request: forecast_adjustment_service.BatchCreateForecastAdjustmentsRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_service.BatchCreateForecastAdjustmentsRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for batch_create_forecast_adjustments + + Override in a subclass to manipulate the request or metadata + before they are sent to the ForecastAdjustmentService server. + """ + return request, metadata + + def post_batch_create_forecast_adjustments( + self, + response: forecast_adjustment_service.BatchCreateForecastAdjustmentsResponse, + ) -> forecast_adjustment_service.BatchCreateForecastAdjustmentsResponse: + """Post-rpc interceptor for batch_create_forecast_adjustments + + DEPRECATED. Please use the `post_batch_create_forecast_adjustments_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the ForecastAdjustmentService server but before + it is returned to user code. This `post_batch_create_forecast_adjustments` interceptor runs + before the `post_batch_create_forecast_adjustments_with_metadata` interceptor. + """ + return response + + def post_batch_create_forecast_adjustments_with_metadata( + self, + response: forecast_adjustment_service.BatchCreateForecastAdjustmentsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_service.BatchCreateForecastAdjustmentsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for batch_create_forecast_adjustments + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ForecastAdjustmentService server but before it is returned to user code. + + We recommend only using this `post_batch_create_forecast_adjustments_with_metadata` + interceptor in new development instead of the `post_batch_create_forecast_adjustments` interceptor. + When both interceptors are used, this `post_batch_create_forecast_adjustments_with_metadata` interceptor runs after the + `post_batch_create_forecast_adjustments` interceptor. The (possibly modified) response returned by + `post_batch_create_forecast_adjustments` will be passed to + `post_batch_create_forecast_adjustments_with_metadata`. + """ + return response, metadata + + def pre_batch_deactivate_forecast_adjustments( + self, + request: forecast_adjustment_service.BatchDeactivateForecastAdjustmentsRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_service.BatchDeactivateForecastAdjustmentsRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for batch_deactivate_forecast_adjustments + + Override in a subclass to manipulate the request or metadata + before they are sent to the ForecastAdjustmentService server. + """ + return request, metadata + + def post_batch_deactivate_forecast_adjustments( + self, + response: forecast_adjustment_service.BatchDeactivateForecastAdjustmentsResponse, + ) -> forecast_adjustment_service.BatchDeactivateForecastAdjustmentsResponse: + """Post-rpc interceptor for batch_deactivate_forecast_adjustments + + DEPRECATED. Please use the `post_batch_deactivate_forecast_adjustments_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the ForecastAdjustmentService server but before + it is returned to user code. This `post_batch_deactivate_forecast_adjustments` interceptor runs + before the `post_batch_deactivate_forecast_adjustments_with_metadata` interceptor. + """ + return response + + def post_batch_deactivate_forecast_adjustments_with_metadata( + self, + response: forecast_adjustment_service.BatchDeactivateForecastAdjustmentsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_service.BatchDeactivateForecastAdjustmentsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for batch_deactivate_forecast_adjustments + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ForecastAdjustmentService server but before it is returned to user code. + + We recommend only using this `post_batch_deactivate_forecast_adjustments_with_metadata` + interceptor in new development instead of the `post_batch_deactivate_forecast_adjustments` interceptor. + When both interceptors are used, this `post_batch_deactivate_forecast_adjustments_with_metadata` interceptor runs after the + `post_batch_deactivate_forecast_adjustments` interceptor. The (possibly modified) response returned by + `post_batch_deactivate_forecast_adjustments` will be passed to + `post_batch_deactivate_forecast_adjustments_with_metadata`. + """ + return response, metadata + + def pre_batch_update_forecast_adjustments( + self, + request: forecast_adjustment_service.BatchUpdateForecastAdjustmentsRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_service.BatchUpdateForecastAdjustmentsRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for batch_update_forecast_adjustments + + Override in a subclass to manipulate the request or metadata + before they are sent to the ForecastAdjustmentService server. + """ + return request, metadata + + def post_batch_update_forecast_adjustments( + self, + response: forecast_adjustment_service.BatchUpdateForecastAdjustmentsResponse, + ) -> forecast_adjustment_service.BatchUpdateForecastAdjustmentsResponse: + """Post-rpc interceptor for batch_update_forecast_adjustments + + DEPRECATED. Please use the `post_batch_update_forecast_adjustments_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the ForecastAdjustmentService server but before + it is returned to user code. This `post_batch_update_forecast_adjustments` interceptor runs + before the `post_batch_update_forecast_adjustments_with_metadata` interceptor. + """ + return response + + def post_batch_update_forecast_adjustments_with_metadata( + self, + response: forecast_adjustment_service.BatchUpdateForecastAdjustmentsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_service.BatchUpdateForecastAdjustmentsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for batch_update_forecast_adjustments + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ForecastAdjustmentService server but before it is returned to user code. + + We recommend only using this `post_batch_update_forecast_adjustments_with_metadata` + interceptor in new development instead of the `post_batch_update_forecast_adjustments` interceptor. + When both interceptors are used, this `post_batch_update_forecast_adjustments_with_metadata` interceptor runs after the + `post_batch_update_forecast_adjustments` interceptor. The (possibly modified) response returned by + `post_batch_update_forecast_adjustments` will be passed to + `post_batch_update_forecast_adjustments_with_metadata`. + """ + return response, metadata + + def pre_calculate_daily_ad_opportunity_counts( + self, + request: forecast_adjustment_service.CalculateDailyAdOpportunityCountsRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_service.CalculateDailyAdOpportunityCountsRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for calculate_daily_ad_opportunity_counts + + Override in a subclass to manipulate the request or metadata + before they are sent to the ForecastAdjustmentService server. + """ + return request, metadata + + def post_calculate_daily_ad_opportunity_counts( + self, + response: forecast_adjustment_service.CalculateDailyAdOpportunityCountsResponse, + ) -> forecast_adjustment_service.CalculateDailyAdOpportunityCountsResponse: + """Post-rpc interceptor for calculate_daily_ad_opportunity_counts + + DEPRECATED. Please use the `post_calculate_daily_ad_opportunity_counts_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the ForecastAdjustmentService server but before + it is returned to user code. This `post_calculate_daily_ad_opportunity_counts` interceptor runs + before the `post_calculate_daily_ad_opportunity_counts_with_metadata` interceptor. + """ + return response + + def post_calculate_daily_ad_opportunity_counts_with_metadata( + self, + response: forecast_adjustment_service.CalculateDailyAdOpportunityCountsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_service.CalculateDailyAdOpportunityCountsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for calculate_daily_ad_opportunity_counts + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ForecastAdjustmentService server but before it is returned to user code. + + We recommend only using this `post_calculate_daily_ad_opportunity_counts_with_metadata` + interceptor in new development instead of the `post_calculate_daily_ad_opportunity_counts` interceptor. + When both interceptors are used, this `post_calculate_daily_ad_opportunity_counts_with_metadata` interceptor runs after the + `post_calculate_daily_ad_opportunity_counts` interceptor. The (possibly modified) response returned by + `post_calculate_daily_ad_opportunity_counts` will be passed to + `post_calculate_daily_ad_opportunity_counts_with_metadata`. + """ + return response, metadata + + def pre_create_forecast_adjustment( + self, + request: forecast_adjustment_service.CreateForecastAdjustmentRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_service.CreateForecastAdjustmentRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for create_forecast_adjustment + + Override in a subclass to manipulate the request or metadata + before they are sent to the ForecastAdjustmentService server. + """ + return request, metadata + + def post_create_forecast_adjustment( + self, response: forecast_adjustment_messages.ForecastAdjustment + ) -> forecast_adjustment_messages.ForecastAdjustment: + """Post-rpc interceptor for create_forecast_adjustment + + DEPRECATED. Please use the `post_create_forecast_adjustment_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the ForecastAdjustmentService server but before + it is returned to user code. This `post_create_forecast_adjustment` interceptor runs + before the `post_create_forecast_adjustment_with_metadata` interceptor. + """ + return response + + def post_create_forecast_adjustment_with_metadata( + self, + response: forecast_adjustment_messages.ForecastAdjustment, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_messages.ForecastAdjustment, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for create_forecast_adjustment + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ForecastAdjustmentService server but before it is returned to user code. + + We recommend only using this `post_create_forecast_adjustment_with_metadata` + interceptor in new development instead of the `post_create_forecast_adjustment` interceptor. + When both interceptors are used, this `post_create_forecast_adjustment_with_metadata` interceptor runs after the + `post_create_forecast_adjustment` interceptor. The (possibly modified) response returned by + `post_create_forecast_adjustment` will be passed to + `post_create_forecast_adjustment_with_metadata`. + """ + return response, metadata + + def pre_get_forecast_adjustment( + self, + request: forecast_adjustment_service.GetForecastAdjustmentRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_service.GetForecastAdjustmentRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for get_forecast_adjustment + + Override in a subclass to manipulate the request or metadata + before they are sent to the ForecastAdjustmentService server. + """ + return request, metadata + + def post_get_forecast_adjustment( + self, response: forecast_adjustment_messages.ForecastAdjustment + ) -> forecast_adjustment_messages.ForecastAdjustment: + """Post-rpc interceptor for get_forecast_adjustment + + DEPRECATED. Please use the `post_get_forecast_adjustment_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the ForecastAdjustmentService server but before + it is returned to user code. This `post_get_forecast_adjustment` interceptor runs + before the `post_get_forecast_adjustment_with_metadata` interceptor. + """ + return response + + def post_get_forecast_adjustment_with_metadata( + self, + response: forecast_adjustment_messages.ForecastAdjustment, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_messages.ForecastAdjustment, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for get_forecast_adjustment + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ForecastAdjustmentService server but before it is returned to user code. + + We recommend only using this `post_get_forecast_adjustment_with_metadata` + interceptor in new development instead of the `post_get_forecast_adjustment` interceptor. + When both interceptors are used, this `post_get_forecast_adjustment_with_metadata` interceptor runs after the + `post_get_forecast_adjustment` interceptor. The (possibly modified) response returned by + `post_get_forecast_adjustment` will be passed to + `post_get_forecast_adjustment_with_metadata`. + """ + return response, metadata + + def pre_list_forecast_adjustments( + self, + request: forecast_adjustment_service.ListForecastAdjustmentsRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_service.ListForecastAdjustmentsRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for list_forecast_adjustments + + Override in a subclass to manipulate the request or metadata + before they are sent to the ForecastAdjustmentService server. + """ + return request, metadata + + def post_list_forecast_adjustments( + self, response: forecast_adjustment_service.ListForecastAdjustmentsResponse + ) -> forecast_adjustment_service.ListForecastAdjustmentsResponse: + """Post-rpc interceptor for list_forecast_adjustments + + DEPRECATED. Please use the `post_list_forecast_adjustments_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the ForecastAdjustmentService server but before + it is returned to user code. This `post_list_forecast_adjustments` interceptor runs + before the `post_list_forecast_adjustments_with_metadata` interceptor. + """ + return response + + def post_list_forecast_adjustments_with_metadata( + self, + response: forecast_adjustment_service.ListForecastAdjustmentsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_service.ListForecastAdjustmentsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_forecast_adjustments + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ForecastAdjustmentService server but before it is returned to user code. + + We recommend only using this `post_list_forecast_adjustments_with_metadata` + interceptor in new development instead of the `post_list_forecast_adjustments` interceptor. + When both interceptors are used, this `post_list_forecast_adjustments_with_metadata` interceptor runs after the + `post_list_forecast_adjustments` interceptor. The (possibly modified) response returned by + `post_list_forecast_adjustments` will be passed to + `post_list_forecast_adjustments_with_metadata`. + """ + return response, metadata + + def pre_update_forecast_adjustment( + self, + request: forecast_adjustment_service.UpdateForecastAdjustmentRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_service.UpdateForecastAdjustmentRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for update_forecast_adjustment + + Override in a subclass to manipulate the request or metadata + before they are sent to the ForecastAdjustmentService server. + """ + return request, metadata + + def post_update_forecast_adjustment( + self, response: forecast_adjustment_messages.ForecastAdjustment + ) -> forecast_adjustment_messages.ForecastAdjustment: + """Post-rpc interceptor for update_forecast_adjustment + + DEPRECATED. Please use the `post_update_forecast_adjustment_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the ForecastAdjustmentService server but before + it is returned to user code. This `post_update_forecast_adjustment` interceptor runs + before the `post_update_forecast_adjustment_with_metadata` interceptor. + """ + return response + + def post_update_forecast_adjustment_with_metadata( + self, + response: forecast_adjustment_messages.ForecastAdjustment, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + forecast_adjustment_messages.ForecastAdjustment, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for update_forecast_adjustment + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ForecastAdjustmentService server but before it is returned to user code. + + We recommend only using this `post_update_forecast_adjustment_with_metadata` + interceptor in new development instead of the `post_update_forecast_adjustment` interceptor. + When both interceptors are used, this `post_update_forecast_adjustment_with_metadata` interceptor runs after the + `post_update_forecast_adjustment` interceptor. The (possibly modified) response returned by + `post_update_forecast_adjustment` will be passed to + `post_update_forecast_adjustment_with_metadata`. + """ + return response, metadata + + def pre_cancel_operation( + self, + request: operations_pb2.CancelOperationRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + operations_pb2.CancelOperationRequest, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Pre-rpc interceptor for cancel_operation + + Override in a subclass to manipulate the request or metadata + before they are sent to the ForecastAdjustmentService server. + """ + return request, metadata + + def post_cancel_operation(self, response: None) -> None: + """Post-rpc interceptor for cancel_operation + + Override in a subclass to manipulate the response + after it is returned by the ForecastAdjustmentService server but before + it is returned to user code. + """ + return response + + def pre_get_operation( + self, + request: operations_pb2.GetOperationRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + operations_pb2.GetOperationRequest, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Pre-rpc interceptor for get_operation + + Override in a subclass to manipulate the request or metadata + before they are sent to the ForecastAdjustmentService server. + """ + return request, metadata + + def post_get_operation( + self, response: operations_pb2.Operation + ) -> operations_pb2.Operation: + """Post-rpc interceptor for get_operation + + Override in a subclass to manipulate the response + after it is returned by the ForecastAdjustmentService server but before + it is returned to user code. + """ + return response + + +@dataclasses.dataclass +class ForecastAdjustmentServiceRestStub: + _session: AuthorizedSession + _host: str + _interceptor: ForecastAdjustmentServiceRestInterceptor + + +class ForecastAdjustmentServiceRestTransport( + _BaseForecastAdjustmentServiceRestTransport +): + """REST backend synchronous transport for ForecastAdjustmentService. + + Provides methods for handling ``ForecastAdjustment`` objects. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends JSON representations of protocol buffers over HTTP/1.1 + """ + + def __init__( + self, + *, + host: str = "admanager.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + url_scheme: str = "https", + interceptor: Optional[ForecastAdjustmentServiceRestInterceptor] = None, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to (default: 'admanager.googleapis.com'). + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + + credentials_file (Optional[str]): Deprecated. A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. This argument will be + removed in the next major version of this library. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client + certificate to configure mutual TLS HTTP channel. It is ignored + if ``channel`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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 are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + interceptor (Optional[ForecastAdjustmentServiceRestInterceptor]): Interceptor used + to manipulate requests, request metadata, and responses. + api_audience (Optional[str]): The intended audience for the API calls + to the service that will be set when using certain 3rd party + authentication flows. Audience is typically a resource identifier. + If not set, the host value will be used as a default. + """ + # Run the base constructor + # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. + # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the + # credentials object + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + url_scheme=url_scheme, + api_audience=api_audience, + ) + self._session = AuthorizedSession( + self._credentials, default_host=self.DEFAULT_HOST + ) + if client_cert_source_for_mtls: + self._session.configure_mtls_channel(client_cert_source_for_mtls) + self._interceptor = interceptor or ForecastAdjustmentServiceRestInterceptor() + self._prep_wrapped_messages(client_info) + + class _BatchActivateForecastAdjustments( + _BaseForecastAdjustmentServiceRestTransport._BaseBatchActivateForecastAdjustments, + ForecastAdjustmentServiceRestStub, + ): + def __hash__(self): + return hash( + "ForecastAdjustmentServiceRestTransport.BatchActivateForecastAdjustments" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response + + def __call__( + self, + request: forecast_adjustment_service.BatchActivateForecastAdjustmentsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> forecast_adjustment_service.BatchActivateForecastAdjustmentsResponse: + r"""Call the batch activate forecast + adjustments method over HTTP. + + Args: + request (~.forecast_adjustment_service.BatchActivateForecastAdjustmentsRequest): + The request object. Request message for ``BatchActivateForecastAdjustments`` + method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.forecast_adjustment_service.BatchActivateForecastAdjustmentsResponse: + Response object for ``BatchActivateForecastAdjustments`` + method. + + """ + + http_options = _BaseForecastAdjustmentServiceRestTransport._BaseBatchActivateForecastAdjustments._get_http_options() + request, metadata = ( + self._interceptor.pre_batch_activate_forecast_adjustments( + request, metadata + ) + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseForecastAdjustmentServiceRestTransport._BaseBatchActivateForecastAdjustments, + "_BaseBatchActivateForecastAdjustments__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.ForecastAdjustmentServiceClient.BatchActivateForecastAdjustments", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "BatchActivateForecastAdjustments", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = ForecastAdjustmentServiceRestTransport._BatchActivateForecastAdjustments._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = ( + forecast_adjustment_service.BatchActivateForecastAdjustmentsResponse() + ) + pb_resp = ( + forecast_adjustment_service.BatchActivateForecastAdjustmentsResponse.pb( + resp + ) + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_batch_activate_forecast_adjustments(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = ( + self._interceptor.post_batch_activate_forecast_adjustments_with_metadata( + resp, response_metadata + ) + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = forecast_adjustment_service.BatchActivateForecastAdjustmentsResponse.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.ForecastAdjustmentServiceClient.batch_activate_forecast_adjustments", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "BatchActivateForecastAdjustments", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _BatchCreateForecastAdjustments( + _BaseForecastAdjustmentServiceRestTransport._BaseBatchCreateForecastAdjustments, + ForecastAdjustmentServiceRestStub, + ): + def __hash__(self): + return hash( + "ForecastAdjustmentServiceRestTransport.BatchCreateForecastAdjustments" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response + + def __call__( + self, + request: forecast_adjustment_service.BatchCreateForecastAdjustmentsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> forecast_adjustment_service.BatchCreateForecastAdjustmentsResponse: + r"""Call the batch create forecast + adjustments method over HTTP. + + Args: + request (~.forecast_adjustment_service.BatchCreateForecastAdjustmentsRequest): + The request object. Request object for ``BatchCreateForecastAdjustments`` + method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.forecast_adjustment_service.BatchCreateForecastAdjustmentsResponse: + Response object for ``BatchCreateForecastAdjustments`` + method. + + """ + + http_options = _BaseForecastAdjustmentServiceRestTransport._BaseBatchCreateForecastAdjustments._get_http_options() + request, metadata = self._interceptor.pre_batch_create_forecast_adjustments( + request, metadata + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseForecastAdjustmentServiceRestTransport._BaseBatchCreateForecastAdjustments, + "_BaseBatchCreateForecastAdjustments__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.ForecastAdjustmentServiceClient.BatchCreateForecastAdjustments", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "BatchCreateForecastAdjustments", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = ForecastAdjustmentServiceRestTransport._BatchCreateForecastAdjustments._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = forecast_adjustment_service.BatchCreateForecastAdjustmentsResponse() + pb_resp = ( + forecast_adjustment_service.BatchCreateForecastAdjustmentsResponse.pb( + resp + ) + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_batch_create_forecast_adjustments(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = ( + self._interceptor.post_batch_create_forecast_adjustments_with_metadata( + resp, response_metadata + ) + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = forecast_adjustment_service.BatchCreateForecastAdjustmentsResponse.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.ForecastAdjustmentServiceClient.batch_create_forecast_adjustments", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "BatchCreateForecastAdjustments", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _BatchDeactivateForecastAdjustments( + _BaseForecastAdjustmentServiceRestTransport._BaseBatchDeactivateForecastAdjustments, + ForecastAdjustmentServiceRestStub, + ): + def __hash__(self): + return hash( + "ForecastAdjustmentServiceRestTransport.BatchDeactivateForecastAdjustments" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response + + def __call__( + self, + request: forecast_adjustment_service.BatchDeactivateForecastAdjustmentsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> forecast_adjustment_service.BatchDeactivateForecastAdjustmentsResponse: + r"""Call the batch deactivate forecast + adjustments method over HTTP. + + Args: + request (~.forecast_adjustment_service.BatchDeactivateForecastAdjustmentsRequest): + The request object. Request message for + ``BatchDeactivateForecastAdjustments`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.forecast_adjustment_service.BatchDeactivateForecastAdjustmentsResponse: + Response object for + ``BatchDeactivateForecastAdjustments`` method. + + """ + + http_options = _BaseForecastAdjustmentServiceRestTransport._BaseBatchDeactivateForecastAdjustments._get_http_options() + request, metadata = ( + self._interceptor.pre_batch_deactivate_forecast_adjustments( + request, metadata + ) + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseForecastAdjustmentServiceRestTransport._BaseBatchDeactivateForecastAdjustments, + "_BaseBatchDeactivateForecastAdjustments__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.ForecastAdjustmentServiceClient.BatchDeactivateForecastAdjustments", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "BatchDeactivateForecastAdjustments", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = ForecastAdjustmentServiceRestTransport._BatchDeactivateForecastAdjustments._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = ( + forecast_adjustment_service.BatchDeactivateForecastAdjustmentsResponse() + ) + pb_resp = forecast_adjustment_service.BatchDeactivateForecastAdjustmentsResponse.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_batch_deactivate_forecast_adjustments(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = ( + self._interceptor.post_batch_deactivate_forecast_adjustments_with_metadata( + resp, response_metadata + ) + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = forecast_adjustment_service.BatchDeactivateForecastAdjustmentsResponse.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.ForecastAdjustmentServiceClient.batch_deactivate_forecast_adjustments", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "BatchDeactivateForecastAdjustments", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _BatchUpdateForecastAdjustments( + _BaseForecastAdjustmentServiceRestTransport._BaseBatchUpdateForecastAdjustments, + ForecastAdjustmentServiceRestStub, + ): + def __hash__(self): + return hash( + "ForecastAdjustmentServiceRestTransport.BatchUpdateForecastAdjustments" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response + + def __call__( + self, + request: forecast_adjustment_service.BatchUpdateForecastAdjustmentsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> forecast_adjustment_service.BatchUpdateForecastAdjustmentsResponse: + r"""Call the batch update forecast + adjustments method over HTTP. + + Args: + request (~.forecast_adjustment_service.BatchUpdateForecastAdjustmentsRequest): + The request object. Request object for ``BatchUpdateForecastAdjustments`` + method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.forecast_adjustment_service.BatchUpdateForecastAdjustmentsResponse: + Response object for ``BatchUpdateForecastAdjustments`` + method. + + """ + + http_options = _BaseForecastAdjustmentServiceRestTransport._BaseBatchUpdateForecastAdjustments._get_http_options() + request, metadata = self._interceptor.pre_batch_update_forecast_adjustments( + request, metadata + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseForecastAdjustmentServiceRestTransport._BaseBatchUpdateForecastAdjustments, + "_BaseBatchUpdateForecastAdjustments__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.ForecastAdjustmentServiceClient.BatchUpdateForecastAdjustments", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "BatchUpdateForecastAdjustments", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = ForecastAdjustmentServiceRestTransport._BatchUpdateForecastAdjustments._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = forecast_adjustment_service.BatchUpdateForecastAdjustmentsResponse() + pb_resp = ( + forecast_adjustment_service.BatchUpdateForecastAdjustmentsResponse.pb( + resp + ) + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_batch_update_forecast_adjustments(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = ( + self._interceptor.post_batch_update_forecast_adjustments_with_metadata( + resp, response_metadata + ) + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = forecast_adjustment_service.BatchUpdateForecastAdjustmentsResponse.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.ForecastAdjustmentServiceClient.batch_update_forecast_adjustments", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "BatchUpdateForecastAdjustments", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _CalculateDailyAdOpportunityCounts( + _BaseForecastAdjustmentServiceRestTransport._BaseCalculateDailyAdOpportunityCounts, + ForecastAdjustmentServiceRestStub, + ): + def __hash__(self): + return hash( + "ForecastAdjustmentServiceRestTransport.CalculateDailyAdOpportunityCounts" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response + + def __call__( + self, + request: forecast_adjustment_service.CalculateDailyAdOpportunityCountsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> forecast_adjustment_service.CalculateDailyAdOpportunityCountsResponse: + r"""Call the calculate daily ad + opportunity counts method over HTTP. + + Args: + request (~.forecast_adjustment_service.CalculateDailyAdOpportunityCountsRequest): + The request object. Request message for + ``CalculateDailyAdOpportunityCounts`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.forecast_adjustment_service.CalculateDailyAdOpportunityCountsResponse: + Response message for + ``CalculateDailyAdOpportunityCounts`` method. + + """ + + http_options = _BaseForecastAdjustmentServiceRestTransport._BaseCalculateDailyAdOpportunityCounts._get_http_options() + request, metadata = ( + self._interceptor.pre_calculate_daily_ad_opportunity_counts( + request, metadata + ) + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseForecastAdjustmentServiceRestTransport._BaseCalculateDailyAdOpportunityCounts, + "_BaseCalculateDailyAdOpportunityCounts__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.ForecastAdjustmentServiceClient.CalculateDailyAdOpportunityCounts", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "CalculateDailyAdOpportunityCounts", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = ForecastAdjustmentServiceRestTransport._CalculateDailyAdOpportunityCounts._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = ( + forecast_adjustment_service.CalculateDailyAdOpportunityCountsResponse() + ) + pb_resp = forecast_adjustment_service.CalculateDailyAdOpportunityCountsResponse.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_calculate_daily_ad_opportunity_counts(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = ( + self._interceptor.post_calculate_daily_ad_opportunity_counts_with_metadata( + resp, response_metadata + ) + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = forecast_adjustment_service.CalculateDailyAdOpportunityCountsResponse.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.ForecastAdjustmentServiceClient.calculate_daily_ad_opportunity_counts", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "CalculateDailyAdOpportunityCounts", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _CreateForecastAdjustment( + _BaseForecastAdjustmentServiceRestTransport._BaseCreateForecastAdjustment, + ForecastAdjustmentServiceRestStub, + ): + def __hash__(self): + return hash( + "ForecastAdjustmentServiceRestTransport.CreateForecastAdjustment" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response + + def __call__( + self, + request: forecast_adjustment_service.CreateForecastAdjustmentRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> forecast_adjustment_messages.ForecastAdjustment: + r"""Call the create forecast + adjustment method over HTTP. + + Args: + request (~.forecast_adjustment_service.CreateForecastAdjustmentRequest): + The request object. Request object for ``CreateForecastAdjustment`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.forecast_adjustment_messages.ForecastAdjustment: + Provides information about the + expected volume and composition of + traffic over a date range for a traffic + forecast segment. + + """ + + http_options = _BaseForecastAdjustmentServiceRestTransport._BaseCreateForecastAdjustment._get_http_options() + request, metadata = self._interceptor.pre_create_forecast_adjustment( + request, metadata + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseForecastAdjustmentServiceRestTransport._BaseCreateForecastAdjustment, + "_BaseCreateForecastAdjustment__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.ForecastAdjustmentServiceClient.CreateForecastAdjustment", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "CreateForecastAdjustment", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = ForecastAdjustmentServiceRestTransport._CreateForecastAdjustment._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = forecast_adjustment_messages.ForecastAdjustment() + pb_resp = forecast_adjustment_messages.ForecastAdjustment.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_create_forecast_adjustment(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_forecast_adjustment_with_metadata( + resp, response_metadata + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = ( + forecast_adjustment_messages.ForecastAdjustment.to_json( + response + ) + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.ForecastAdjustmentServiceClient.create_forecast_adjustment", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "CreateForecastAdjustment", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _GetForecastAdjustment( + _BaseForecastAdjustmentServiceRestTransport._BaseGetForecastAdjustment, + ForecastAdjustmentServiceRestStub, + ): + def __hash__(self): + return hash("ForecastAdjustmentServiceRestTransport.GetForecastAdjustment") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response + + def __call__( + self, + request: forecast_adjustment_service.GetForecastAdjustmentRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> forecast_adjustment_messages.ForecastAdjustment: + r"""Call the get forecast adjustment method over HTTP. + + Args: + request (~.forecast_adjustment_service.GetForecastAdjustmentRequest): + The request object. Request object for ``GetForecastAdjustment`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.forecast_adjustment_messages.ForecastAdjustment: + Provides information about the + expected volume and composition of + traffic over a date range for a traffic + forecast segment. + + """ + + http_options = _BaseForecastAdjustmentServiceRestTransport._BaseGetForecastAdjustment._get_http_options() + request, metadata = self._interceptor.pre_get_forecast_adjustment( + request, metadata + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseForecastAdjustmentServiceRestTransport._BaseGetForecastAdjustment, + "_BaseGetForecastAdjustment__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.ForecastAdjustmentServiceClient.GetForecastAdjustment", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "GetForecastAdjustment", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = ForecastAdjustmentServiceRestTransport._GetForecastAdjustment._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = forecast_adjustment_messages.ForecastAdjustment() + pb_resp = forecast_adjustment_messages.ForecastAdjustment.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_get_forecast_adjustment(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_forecast_adjustment_with_metadata( + resp, response_metadata + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = ( + forecast_adjustment_messages.ForecastAdjustment.to_json( + response + ) + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.ForecastAdjustmentServiceClient.get_forecast_adjustment", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "GetForecastAdjustment", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _ListForecastAdjustments( + _BaseForecastAdjustmentServiceRestTransport._BaseListForecastAdjustments, + ForecastAdjustmentServiceRestStub, + ): + def __hash__(self): + return hash( + "ForecastAdjustmentServiceRestTransport.ListForecastAdjustments" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response + + def __call__( + self, + request: forecast_adjustment_service.ListForecastAdjustmentsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> forecast_adjustment_service.ListForecastAdjustmentsResponse: + r"""Call the list forecast adjustments method over HTTP. + + Args: + request (~.forecast_adjustment_service.ListForecastAdjustmentsRequest): + The request object. Request object for ``ListForecastAdjustments`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.forecast_adjustment_service.ListForecastAdjustmentsResponse: + Response object for ``ListForecastAdjustmentsRequest`` + containing matching ``ForecastAdjustment`` objects. + + """ + + http_options = _BaseForecastAdjustmentServiceRestTransport._BaseListForecastAdjustments._get_http_options() + request, metadata = self._interceptor.pre_list_forecast_adjustments( + request, metadata + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseForecastAdjustmentServiceRestTransport._BaseListForecastAdjustments, + "_BaseListForecastAdjustments__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.ForecastAdjustmentServiceClient.ListForecastAdjustments", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "ListForecastAdjustments", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = ForecastAdjustmentServiceRestTransport._ListForecastAdjustments._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = forecast_adjustment_service.ListForecastAdjustmentsResponse() + pb_resp = forecast_adjustment_service.ListForecastAdjustmentsResponse.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_list_forecast_adjustments(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_forecast_adjustments_with_metadata( + resp, response_metadata + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = forecast_adjustment_service.ListForecastAdjustmentsResponse.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.ForecastAdjustmentServiceClient.list_forecast_adjustments", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "ListForecastAdjustments", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _UpdateForecastAdjustment( + _BaseForecastAdjustmentServiceRestTransport._BaseUpdateForecastAdjustment, + ForecastAdjustmentServiceRestStub, + ): + def __hash__(self): + return hash( + "ForecastAdjustmentServiceRestTransport.UpdateForecastAdjustment" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response + + def __call__( + self, + request: forecast_adjustment_service.UpdateForecastAdjustmentRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> forecast_adjustment_messages.ForecastAdjustment: + r"""Call the update forecast + adjustment method over HTTP. + + Args: + request (~.forecast_adjustment_service.UpdateForecastAdjustmentRequest): + The request object. Request object for ``UpdateForecastAdjustment`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.forecast_adjustment_messages.ForecastAdjustment: + Provides information about the + expected volume and composition of + traffic over a date range for a traffic + forecast segment. + + """ + + http_options = _BaseForecastAdjustmentServiceRestTransport._BaseUpdateForecastAdjustment._get_http_options() + request, metadata = self._interceptor.pre_update_forecast_adjustment( + request, metadata + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseForecastAdjustmentServiceRestTransport._BaseUpdateForecastAdjustment, + "_BaseUpdateForecastAdjustment__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.ForecastAdjustmentServiceClient.UpdateForecastAdjustment", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "UpdateForecastAdjustment", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = ForecastAdjustmentServiceRestTransport._UpdateForecastAdjustment._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = forecast_adjustment_messages.ForecastAdjustment() + pb_resp = forecast_adjustment_messages.ForecastAdjustment.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_update_forecast_adjustment(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_forecast_adjustment_with_metadata( + resp, response_metadata + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = ( + forecast_adjustment_messages.ForecastAdjustment.to_json( + response + ) + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.ForecastAdjustmentServiceClient.update_forecast_adjustment", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "UpdateForecastAdjustment", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + @property + def batch_activate_forecast_adjustments( + self, + ) -> Callable[ + [forecast_adjustment_service.BatchActivateForecastAdjustmentsRequest], + forecast_adjustment_service.BatchActivateForecastAdjustmentsResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._BatchActivateForecastAdjustments( + self._session, self._host, self._interceptor + ) # type: ignore + + @property + def batch_create_forecast_adjustments( + self, + ) -> Callable[ + [forecast_adjustment_service.BatchCreateForecastAdjustmentsRequest], + forecast_adjustment_service.BatchCreateForecastAdjustmentsResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._BatchCreateForecastAdjustments( + self._session, self._host, self._interceptor + ) # type: ignore + + @property + def batch_deactivate_forecast_adjustments( + self, + ) -> Callable[ + [forecast_adjustment_service.BatchDeactivateForecastAdjustmentsRequest], + forecast_adjustment_service.BatchDeactivateForecastAdjustmentsResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._BatchDeactivateForecastAdjustments( + self._session, self._host, self._interceptor + ) # type: ignore + + @property + def batch_update_forecast_adjustments( + self, + ) -> Callable[ + [forecast_adjustment_service.BatchUpdateForecastAdjustmentsRequest], + forecast_adjustment_service.BatchUpdateForecastAdjustmentsResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._BatchUpdateForecastAdjustments( + self._session, self._host, self._interceptor + ) # type: ignore + + @property + def calculate_daily_ad_opportunity_counts( + self, + ) -> Callable[ + [forecast_adjustment_service.CalculateDailyAdOpportunityCountsRequest], + forecast_adjustment_service.CalculateDailyAdOpportunityCountsResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._CalculateDailyAdOpportunityCounts( + self._session, self._host, self._interceptor + ) # type: ignore + + @property + def create_forecast_adjustment( + self, + ) -> Callable[ + [forecast_adjustment_service.CreateForecastAdjustmentRequest], + forecast_adjustment_messages.ForecastAdjustment, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._CreateForecastAdjustment( + self._session, self._host, self._interceptor + ) # type: ignore + + @property + def get_forecast_adjustment( + self, + ) -> Callable[ + [forecast_adjustment_service.GetForecastAdjustmentRequest], + forecast_adjustment_messages.ForecastAdjustment, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetForecastAdjustment(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_forecast_adjustments( + self, + ) -> Callable[ + [forecast_adjustment_service.ListForecastAdjustmentsRequest], + forecast_adjustment_service.ListForecastAdjustmentsResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListForecastAdjustments( + self._session, self._host, self._interceptor + ) # type: ignore + + @property + def update_forecast_adjustment( + self, + ) -> Callable[ + [forecast_adjustment_service.UpdateForecastAdjustmentRequest], + forecast_adjustment_messages.ForecastAdjustment, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateForecastAdjustment( + self._session, self._host, self._interceptor + ) # type: ignore + + @property + def cancel_operation(self): + return self._CancelOperation(self._session, self._host, self._interceptor) # type: ignore + + class _CancelOperation( + _BaseForecastAdjustmentServiceRestTransport._BaseCancelOperation, + ForecastAdjustmentServiceRestStub, + ): + def __hash__(self): + return hash("ForecastAdjustmentServiceRestTransport.CancelOperation") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response + + def __call__( + self, + request: operations_pb2.CancelOperationRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> None: + r"""Call the cancel operation method over HTTP. + + Args: + request (operations_pb2.CancelOperationRequest): + The request object for CancelOperation method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + """ + + http_options = _BaseForecastAdjustmentServiceRestTransport._BaseCancelOperation._get_http_options() + request, metadata = self._interceptor.pre_cancel_operation( + request, metadata + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseForecastAdjustmentServiceRestTransport._BaseCancelOperation, + "_BaseCancelOperation__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=False, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = json_format.MessageToJson(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.ForecastAdjustmentServiceClient.CancelOperation", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "CancelOperation", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = ( + ForecastAdjustmentServiceRestTransport._CancelOperation._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + ) + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + return self._interceptor.post_cancel_operation(None) + + @property + def get_operation(self): + return self._GetOperation(self._session, self._host, self._interceptor) # type: ignore + + class _GetOperation( + _BaseForecastAdjustmentServiceRestTransport._BaseGetOperation, + ForecastAdjustmentServiceRestStub, + ): + def __hash__(self): + return hash("ForecastAdjustmentServiceRestTransport.GetOperation") + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response + + def __call__( + self, + request: operations_pb2.GetOperationRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> operations_pb2.Operation: + r"""Call the get operation method over HTTP. + + Args: + request (operations_pb2.GetOperationRequest): + The request object for GetOperation method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + operations_pb2.Operation: Response from GetOperation method. + """ + + http_options = _BaseForecastAdjustmentServiceRestTransport._BaseGetOperation._get_http_options() + request, metadata = self._interceptor.pre_get_operation(request, metadata) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseForecastAdjustmentServiceRestTransport._BaseGetOperation, + "_BaseGetOperation__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=False, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = json_format.MessageToJson(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.ForecastAdjustmentServiceClient.GetOperation", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "GetOperation", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = ( + ForecastAdjustmentServiceRestTransport._GetOperation._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + ) + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + content = response.content.decode("utf-8") + resp = operations_pb2.Operation() + resp = json_format.Parse(content, resp) + resp = self._interceptor.post_get_operation(resp) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = json_format.MessageToJson(resp) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.ForecastAdjustmentServiceAsyncClient.GetOperation", + extra={ + "serviceName": "google.ads.admanager.v1.ForecastAdjustmentService", + "rpcName": "GetOperation", + "httpResponse": http_response, + "metadata": http_response["headers"], + }, + ) + return resp + + @property + def kind(self) -> str: + return "rest" + + def close(self): + self._session.close() + + +__all__ = ("ForecastAdjustmentServiceRestTransport",) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/rest_base.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/rest_base.py new file mode 100644 index 000000000000..207da4604a83 --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_adjustment_service/transports/rest_base.py @@ -0,0 +1,274 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +import json # type: ignore +import re +from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union + +from google.api_core import gapic_v1, path_template +from google.longrunning import operations_pb2 # type: ignore +from google.protobuf import json_format + +from google.ads.admanager_v1.types import ( + forecast_adjustment_messages, + forecast_adjustment_service, +) + +from .base import DEFAULT_CLIENT_INFO, ForecastAdjustmentServiceTransport + + +class _BaseForecastAdjustmentServiceRestTransport(ForecastAdjustmentServiceTransport): + """Base REST backend transport for ForecastAdjustmentService. + + Note: This class is not meant to be used directly. Use its sync and + async sub-classes instead. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends JSON representations of protocol buffers over HTTP/1.1 + """ + + def __init__( + self, + *, + host: str = "admanager.googleapis.com", + credentials: Optional[Any] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + url_scheme: str = "https", + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + Args: + host (Optional[str]): + The hostname to connect to (default: 'admanager.googleapis.com'). + credentials (Optional[Any]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + 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 are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + """ + # Run the base constructor + maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) + if maybe_url_match is None: + raise ValueError( + f"Unexpected hostname structure: {host}" + ) # pragma: NO COVER + + url_match_items = maybe_url_match.groupdict() + + host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host + + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + class _BaseBatchActivateForecastAdjustments: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{parent=networks/*}/forecastAdjustments:batchActivate", + "body": "*", + }, + ] + return http_options + + class _BaseBatchCreateForecastAdjustments: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{parent=networks/*}/forecastAdjustments:batchCreate", + "body": "*", + }, + ] + return http_options + + class _BaseBatchDeactivateForecastAdjustments: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{parent=networks/*}/forecastAdjustments:batchDeactivate", + "body": "*", + }, + ] + return http_options + + class _BaseBatchUpdateForecastAdjustments: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{parent=networks/*}/forecastAdjustments:batchUpdate", + "body": "*", + }, + ] + return http_options + + class _BaseCalculateDailyAdOpportunityCounts: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{parent=networks/*}/forecastAdjustments:calculateDailyAdOpportunityCounts", + "body": "*", + }, + ] + return http_options + + class _BaseCreateForecastAdjustment: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{parent=networks/*}/forecastAdjustments", + "body": "forecast_adjustment", + }, + ] + return http_options + + class _BaseGetForecastAdjustment: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{name=networks/*/forecastAdjustments/*}", + }, + ] + return http_options + + class _BaseListForecastAdjustments: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{parent=networks/*}/forecastAdjustments", + }, + ] + return http_options + + class _BaseUpdateForecastAdjustment: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "patch", + "uri": "/v1/{forecast_adjustment.name=networks/*/forecastAdjustments/*}", + "body": "forecast_adjustment", + }, + ] + return http_options + + class _BaseCancelOperation: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{name=networks/*/operations/reports/runs/*}:cancel", + }, + ] + return http_options + + class _BaseGetOperation: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{name=networks/*/operations/reports/runs/*}", + }, + ] + return http_options + + +__all__ = ("_BaseForecastAdjustmentServiceRestTransport",) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_service/client.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_service/client.py index 7048c087b0f9..450d0f346e42 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_service/client.py +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_service/client.py @@ -170,6 +170,42 @@ def transport(self) -> ForecastServiceTransport: """ return self._transport + @staticmethod + def ad_category_path( + network_code: str, + ad_category: str, + ) -> str: + """Returns a fully-qualified ad_category string.""" + return "networks/{network_code}/adCategories/{ad_category}".format( + network_code=network_code, + ad_category=ad_category, + ) + + @staticmethod + def parse_ad_category_path(path: str) -> Dict[str, str]: + """Parses a ad_category path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/adCategories/(?P.+?)$", path + ) + return m.groupdict() if m else {} + + @staticmethod + def ad_spot_path( + network_code: str, + ad_spot: str, + ) -> str: + """Returns a fully-qualified ad_spot string.""" + return "networks/{network_code}/adSpots/{ad_spot}".format( + network_code=network_code, + ad_spot=ad_spot, + ) + + @staticmethod + def parse_ad_spot_path(path: str) -> Dict[str, str]: + """Parses a ad_spot path into its component segments.""" + m = re.match(r"^networks/(?P.+?)/adSpots/(?P.+?)$", path) + return m.groupdict() if m else {} + @staticmethod def ad_unit_path( network_code: str, @@ -187,6 +223,26 @@ def parse_ad_unit_path(path: str) -> Dict[str, str]: m = re.match(r"^networks/(?P.+?)/adUnits/(?P.+?)$", path) return m.groupdict() if m else {} + @staticmethod + def allocation_delivery_profile_path( + network_code: str, + allocation_delivery_profile: str, + ) -> str: + """Returns a fully-qualified allocation_delivery_profile string.""" + return "networks/{network_code}/allocationDeliveryProfiles/{allocation_delivery_profile}".format( + network_code=network_code, + allocation_delivery_profile=allocation_delivery_profile, + ) + + @staticmethod + def parse_allocation_delivery_profile_path(path: str) -> Dict[str, str]: + """Parses a allocation_delivery_profile path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/allocationDeliveryProfiles/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def application_path( network_code: str, @@ -305,6 +361,25 @@ def parse_cms_metadata_value_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def company_path( + network_code: str, + company: str, + ) -> str: + """Returns a fully-qualified company string.""" + return "networks/{network_code}/companies/{company}".format( + network_code=network_code, + company=company, + ) + + @staticmethod + def parse_company_path(path: str) -> Dict[str, str]: + """Parses a company path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/companies/(?P.+?)$", path + ) + return m.groupdict() if m else {} + @staticmethod def content_path( network_code: str, @@ -342,6 +417,45 @@ def parse_content_bundle_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def content_label_path( + network_code: str, + content_label: str, + ) -> str: + """Returns a fully-qualified content_label string.""" + return "networks/{network_code}/contentLabels/{content_label}".format( + network_code=network_code, + content_label=content_label, + ) + + @staticmethod + def parse_content_label_path(path: str) -> Dict[str, str]: + """Parses a content_label path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/contentLabels/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def custom_field_path( + network_code: str, + custom_field: str, + ) -> str: + """Returns a fully-qualified custom_field string.""" + return "networks/{network_code}/customFields/{custom_field}".format( + network_code=network_code, + custom_field=custom_field, + ) + + @staticmethod + def parse_custom_field_path(path: str) -> Dict[str, str]: + """Parses a custom_field path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/customFields/(?P.+?)$", path + ) + return m.groupdict() if m else {} + @staticmethod def custom_targeting_key_path( network_code: str, @@ -465,6 +579,26 @@ def parse_geo_target_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def inventory_url_path( + network_code: str, + inventory_url: str, + ) -> str: + """Returns a fully-qualified inventory_url string.""" + return "networks/{network_code}/inventoryUrls/{inventory_url}".format( + network_code=network_code, + inventory_url=inventory_url, + ) + + @staticmethod + def parse_inventory_url_path(path: str) -> Dict[str, str]: + """Parses a inventory_url path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/inventoryUrls/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def label_path( network_code: str, @@ -652,6 +786,26 @@ def parse_placement_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def taxonomy_category_path( + network_code: str, + taxonomy_category: str, + ) -> str: + """Returns a fully-qualified taxonomy_category string.""" + return "networks/{network_code}/taxonomyCategories/{taxonomy_category}".format( + network_code=network_code, + taxonomy_category=taxonomy_category, + ) + + @staticmethod + def parse_taxonomy_category_path(path: str) -> Dict[str, str]: + """Parses a taxonomy_category path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/taxonomyCategories/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def common_billing_account_path( billing_account: str, @@ -1099,7 +1253,7 @@ def sample_run_availability_forecast(): Args: request (Union[google.ads.admanager_v1.types.RunAvailabilityForecastRequest, dict]): - The request object. Request object for [RunAvailabilityForecast][] method. + The request object. Request object for ``RunAvailabilityForecast`` method. parent (str): Required. Format: ``networks/{network_code}`` This corresponds to the ``parent`` field @@ -1115,7 +1269,7 @@ def sample_run_availability_forecast(): Returns: google.ads.admanager_v1.types.RunAvailabilityForecastResponse: - Response object for [RunAvailabilityForecast][] method. + Response object for RunAvailabilityForecast method. """ # Create or coerce a protobuf request object. # - Quick check: If we got a request object, we should *not* have @@ -1215,7 +1369,7 @@ def sample_run_delivery_forecast(): Args: request (Union[google.ads.admanager_v1.types.RunDeliveryForecastRequest, dict]): - The request object. Request object for [RunDeliveryForecast][] method. + The request object. Request object for ``RunDeliveryForecast`` method. parent (str): Required. Format: ``networks/{network_code}`` This corresponds to the ``parent`` field @@ -1231,7 +1385,7 @@ def sample_run_delivery_forecast(): Returns: google.ads.admanager_v1.types.RunDeliveryForecastResponse: - Response object for [RunDeliveryForecast][] method. + Response object for RunDeliveryForecast method. """ # Create or coerce a protobuf request object. # - Quick check: If we got a request object, we should *not* have @@ -1319,7 +1473,7 @@ def sample_run_traffic_data(): Args: request (Union[google.ads.admanager_v1.types.RunTrafficDataRequest, dict]): - The request object. Request object for [RunTrafficData][] method. + The request object. Request object for ``RunTrafficData`` method. parent (str): Required. Format: ``networks/{network_code}`` This corresponds to the ``parent`` field @@ -1335,7 +1489,7 @@ def sample_run_traffic_data(): Returns: google.ads.admanager_v1.types.RunTrafficDataResponse: - Response object for [RunTrafficData][] method. + Response object for RunTrafficData method. """ # Create or coerce a protobuf request object. # - Quick check: If we got a request object, we should *not* have diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_service/transports/rest.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_service/transports/rest.py index 3eaab1ebb975..87dab744417f 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_service/transports/rest.py +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/forecast_service/transports/rest.py @@ -441,7 +441,7 @@ def __call__( Args: request (~.forecast_service.RunAvailabilityForecastRequest): - The request object. Request object for [RunAvailabilityForecast][] method. + The request object. Request object for ``RunAvailabilityForecast`` method. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -452,7 +452,7 @@ def __call__( Returns: ~.forecast_service.RunAvailabilityForecastResponse: - Response object for [RunAvailabilityForecast][] method. + Response object for ``RunAvailabilityForecast`` method. """ http_options = _BaseForecastServiceRestTransport._BaseRunAvailabilityForecast._get_http_options() @@ -595,7 +595,7 @@ def __call__( Args: request (~.forecast_service.RunDeliveryForecastRequest): - The request object. Request object for [RunDeliveryForecast][] method. + The request object. Request object for ``RunDeliveryForecast`` method. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -606,7 +606,7 @@ def __call__( Returns: ~.forecast_service.RunDeliveryForecastResponse: - Response object for [RunDeliveryForecast][] method. + Response object for ``RunDeliveryForecast`` method. """ http_options = _BaseForecastServiceRestTransport._BaseRunDeliveryForecast._get_http_options() @@ -744,7 +744,7 @@ def __call__( Args: request (~.forecast_service.RunTrafficDataRequest): - The request object. Request object for [RunTrafficData][] method. + The request object. Request object for ``RunTrafficData`` method. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -755,7 +755,7 @@ def __call__( Returns: ~.forecast_service.RunTrafficDataResponse: - Response object for [RunTrafficData][] method. + Response object for ``RunTrafficData`` method. """ http_options = _BaseForecastServiceRestTransport._BaseRunTrafficData._get_http_options() diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_creative_association_service/client.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_creative_association_service/client.py index 40b13973faf6..5fedf15d9556 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_creative_association_service/client.py +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_creative_association_service/client.py @@ -68,6 +68,7 @@ _LOGGER = std_logging.getLogger(__name__) +import google.protobuf.field_mask_pb2 as field_mask_pb2 # type: ignore import google.protobuf.timestamp_pb2 as timestamp_pb2 # type: ignore from google.longrunning import operations_pb2 # type: ignore @@ -940,6 +941,1107 @@ def sample_list_line_item_creative_associations(): # Done; return the response. return response + def create_line_item_creative_association( + self, + request: Optional[ + Union[ + line_item_creative_association_service.CreateLineItemCreativeAssociationRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + line_item_creative_association: Optional[ + line_item_creative_association_messages.LineItemCreativeAssociation + ] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> line_item_creative_association_messages.LineItemCreativeAssociation: + r"""Creates a ``LineItemCreativeAssociation`` object. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_create_line_item_creative_association(): + # Create a client + client = admanager_v1.LineItemCreativeAssociationServiceClient() + + # Initialize request argument(s) + request = admanager_v1.CreateLineItemCreativeAssociationRequest( + parent="parent_value", + ) + + # Make the request + response = client.create_line_item_creative_association(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.CreateLineItemCreativeAssociationRequest, dict]): + The request object. Request object for ``CreateLineItemCreativeAssociation`` + method. + parent (str): + Required. The parent resource where this + ``LineItemCreativeAssociation`` will be created. Format: + ``networks/{network_code}/lineItems/{line_item_id}`` + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + line_item_creative_association (google.ads.admanager_v1.types.LineItemCreativeAssociation): + Required. The ``LineItemCreativeAssociation`` to create. + This corresponds to the ``line_item_creative_association`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.LineItemCreativeAssociation: + A LineItemCreativeAssociation associates a + [Creative][google.ads.admanager.v1.Creative] or + [CreativeSet][google.ads.admanager.v1.CreativeSet] + with a [LineItem][google.ads.admanager.v1.LineItem] + so that the creative can be served in ad units + targeted by the line item. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent, line_item_creative_association] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, + line_item_creative_association_service.CreateLineItemCreativeAssociationRequest, + ): + request = line_item_creative_association_service.CreateLineItemCreativeAssociationRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if line_item_creative_association is not None: + request.line_item_creative_association = line_item_creative_association + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.create_line_item_creative_association + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def batch_create_line_item_creative_associations( + self, + request: Optional[ + Union[ + line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + requests: Optional[ + MutableSequence[ + line_item_creative_association_service.CreateLineItemCreativeAssociationRequest + ] + ] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsResponse: + r"""Creates ``LineItemCreativeAssociation`` objects. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_batch_create_line_item_creative_associations(): + # Create a client + client = admanager_v1.LineItemCreativeAssociationServiceClient() + + # Initialize request argument(s) + requests = admanager_v1.CreateLineItemCreativeAssociationRequest() + requests.parent = "parent_value" + + request = admanager_v1.BatchCreateLineItemCreativeAssociationsRequest( + parent="parent_value", + requests=requests, + ) + + # Make the request + response = client.batch_create_line_item_creative_associations(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.BatchCreateLineItemCreativeAssociationsRequest, dict]): + The request object. Request object for + ``BatchCreateLineItemCreativeAssociations`` method. + parent (str): + Required. The parent resource where + ``LineItemCreativeAssociations`` will be created. This + request supports using the "-" character as a wildcard + for resources that span across multiple LineItem + parents. Format: + ``networks/{network_code}/lineItems/{line_item_id}`` + Format: ``networks/{network_code}/lineItems/-`` + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + requests (MutableSequence[google.ads.admanager_v1.types.CreateLineItemCreativeAssociationRequest]): + Required. The ``LineItemCreativeAssociation`` objects to + create. A maximum of 100 objects can be created in a + batch. + + This corresponds to the ``requests`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.BatchCreateLineItemCreativeAssociationsResponse: + Response object for + BatchCreateLineItemCreativeAssociations method. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent, requests] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, + line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsRequest, + ): + request = line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if requests is not None: + request.requests = requests + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.batch_create_line_item_creative_associations + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_line_item_creative_association( + self, + request: Optional[ + Union[ + line_item_creative_association_service.UpdateLineItemCreativeAssociationRequest, + dict, + ] + ] = None, + *, + line_item_creative_association: Optional[ + line_item_creative_association_messages.LineItemCreativeAssociation + ] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> line_item_creative_association_messages.LineItemCreativeAssociation: + r"""Updates a ``LineItemCreativeAssociation`` object. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_update_line_item_creative_association(): + # Create a client + client = admanager_v1.LineItemCreativeAssociationServiceClient() + + # Initialize request argument(s) + request = admanager_v1.UpdateLineItemCreativeAssociationRequest( + ) + + # Make the request + response = client.update_line_item_creative_association(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.UpdateLineItemCreativeAssociationRequest, dict]): + The request object. Request object for ``UpdateLineItemCreativeAssociation`` + method. + line_item_creative_association (google.ads.admanager_v1.types.LineItemCreativeAssociation): + Required. The ``LineItemCreativeAssociation`` to update. + Format: + ``networks/{network_code}/lineItems/{line_item_id}/creatives/{creative_id}`` + + This corresponds to the ``line_item_creative_association`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + Optional. The list of fields to + update. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.LineItemCreativeAssociation: + A LineItemCreativeAssociation associates a + [Creative][google.ads.admanager.v1.Creative] or + [CreativeSet][google.ads.admanager.v1.CreativeSet] + with a [LineItem][google.ads.admanager.v1.LineItem] + so that the creative can be served in ad units + targeted by the line item. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [line_item_creative_association, update_mask] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, + line_item_creative_association_service.UpdateLineItemCreativeAssociationRequest, + ): + request = line_item_creative_association_service.UpdateLineItemCreativeAssociationRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if line_item_creative_association is not None: + request.line_item_creative_association = line_item_creative_association + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.update_line_item_creative_association + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ( + "line_item_creative_association.name", + request.line_item_creative_association.name, + ), + ) + ), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def batch_update_line_item_creative_associations( + self, + request: Optional[ + Union[ + line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + requests: Optional[ + MutableSequence[ + line_item_creative_association_service.UpdateLineItemCreativeAssociationRequest + ] + ] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsResponse: + r"""Batch updates ``LineItemCreativeAssociation`` objects. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_batch_update_line_item_creative_associations(): + # Create a client + client = admanager_v1.LineItemCreativeAssociationServiceClient() + + # Initialize request argument(s) + request = admanager_v1.BatchUpdateLineItemCreativeAssociationsRequest( + parent="parent_value", + ) + + # Make the request + response = client.batch_update_line_item_creative_associations(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.BatchUpdateLineItemCreativeAssociationsRequest, dict]): + The request object. Request object for + ``BatchUpdateLineItemCreativeAssociations`` method. + parent (str): + Required. The parent resource where + ``LineItemCreativeAssociations`` will be updated. This + request supports using the "-" character as a wildcard + for resources that span across multiple LineItem + parents. Format: + ``networks/{network_code}/lineItems/{line_item_id}`` + Format: ``networks/{network_code}/lineItems/-`` + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + requests (MutableSequence[google.ads.admanager_v1.types.UpdateLineItemCreativeAssociationRequest]): + Required. The ``LineItemCreativeAssociation`` objects to + update. A maximum of 100 objects can be updated in a + batch. + + This corresponds to the ``requests`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.BatchUpdateLineItemCreativeAssociationsResponse: + Response object for + BatchUpdateLineItemCreativeAssociations method. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent, requests] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, + line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsRequest, + ): + request = line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if requests is not None: + request.requests = requests + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.batch_update_line_item_creative_associations + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def batch_activate_line_item_creative_associations( + self, + request: Optional[ + Union[ + line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + names: Optional[MutableSequence[str]] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsResponse: + r"""Activate a list of ``LineItemCreativeAssociation`` objects. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_batch_activate_line_item_creative_associations(): + # Create a client + client = admanager_v1.LineItemCreativeAssociationServiceClient() + + # Initialize request argument(s) + request = admanager_v1.BatchActivateLineItemCreativeAssociationsRequest( + parent="parent_value", + names=['names_value1', 'names_value2'], + ) + + # Make the request + response = client.batch_activate_line_item_creative_associations(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.BatchActivateLineItemCreativeAssociationsRequest, dict]): + The request object. Request message for + ``BatchActivateLineItemCreativeAssociations`` method. + parent (str): + Required. The parent resource where + ``LineItemCreativeAssociations`` will be activated. This + request supports using the "-" character as a wildcard + for resources that span across multiple LineItem + parents. Format: + ``networks/{network_code}/lineItems/{line_item_id}`` + Format: ``networks/{network_code}/lineItems/-`` + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + names (MutableSequence[str]): + Required. The names of the + ``LineItemCreativeAssociation`` objects to activate. A + maximum of 1000 objects can be activated in a batch. + Format: + ``networks/{network_code}/lineItems/{line_item_id}/creatives/{creative_id}`` + + This corresponds to the ``names`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.BatchActivateLineItemCreativeAssociationsResponse: + Response object for + BatchActivateLineItemCreativeAssociations method. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent, names] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, + line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsRequest, + ): + request = line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if names is not None: + request.names = names + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.batch_activate_line_item_creative_associations + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def batch_deactivate_line_item_creative_associations( + self, + request: Optional[ + Union[ + line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + names: Optional[MutableSequence[str]] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsResponse: + r"""Deactivates a list of ``LineItemCreativeAssociation`` objects. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_batch_deactivate_line_item_creative_associations(): + # Create a client + client = admanager_v1.LineItemCreativeAssociationServiceClient() + + # Initialize request argument(s) + request = admanager_v1.BatchDeactivateLineItemCreativeAssociationsRequest( + parent="parent_value", + names=['names_value1', 'names_value2'], + ) + + # Make the request + response = client.batch_deactivate_line_item_creative_associations(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.BatchDeactivateLineItemCreativeAssociationsRequest, dict]): + The request object. Request message for + ``BatchDeactivateLineItemCreativeAssociations`` method. + parent (str): + Required. The parent resource where + ``LineItemCreativeAssociations`` will be deactivated. + This request supports using the "-" character as a + wildcard for resources that span across multiple + LineItem parents. Format: + ``networks/{network_code}/lineItems/{line_item_id}`` + Format: ``networks/{network_code}/lineItems/-`` + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + names (MutableSequence[str]): + Required. The names of the + ``LineItemCreativeAssociation`` objects to deactivate. A + maximum of 1000 objects can be deactivated in a batch. + Format: + ``networks/{network_code}/lineItems/{line_item_id}/creatives/{creative_id}`` + + This corresponds to the ``names`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.BatchDeactivateLineItemCreativeAssociationsResponse: + Response object for + BatchDeactivateLineItemCreativeAssociations method. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent, names] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, + line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsRequest, + ): + request = line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if names is not None: + request.names = names + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.batch_deactivate_line_item_creative_associations + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def batch_delete_line_item_creative_associations( + self, + request: Optional[ + Union[ + line_item_creative_association_service.BatchDeleteLineItemCreativeAssociationsRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + names: Optional[MutableSequence[str]] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> None: + r"""Deletes a list of ``LineItemCreativeAssociation`` objects. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_batch_delete_line_item_creative_associations(): + # Create a client + client = admanager_v1.LineItemCreativeAssociationServiceClient() + + # Initialize request argument(s) + request = admanager_v1.BatchDeleteLineItemCreativeAssociationsRequest( + parent="parent_value", + names=['names_value1', 'names_value2'], + ) + + # Make the request + client.batch_delete_line_item_creative_associations(request=request) + + Args: + request (Union[google.ads.admanager_v1.types.BatchDeleteLineItemCreativeAssociationsRequest, dict]): + The request object. Request message for + ``BatchDeleteLineItemCreativeAssociations`` method. + parent (str): + Required. The parent resource where + ``LineItemCreativeAssociations`` will be deleted. This + request supports using the "-" character as a wildcard + for resources that span across multiple LineItem + parents. Format: + ``networks/{network_code}/lineItems/{line_item_id}`` + Format: ``networks/{network_code}/lineItems/-`` + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + names (MutableSequence[str]): + Required. The names of the + ``LineItemCreativeAssociation`` objects to delete. A + maximum of 1000 objects can be deleted in a batch. + Format: + ``networks/{network_code}/lineItems/{line_item_id}/creatives/{creative_id}`` + + This corresponds to the ``names`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [parent, names] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, + line_item_creative_association_service.BatchDeleteLineItemCreativeAssociationsRequest, + ): + request = line_item_creative_association_service.BatchDeleteLineItemCreativeAssociationsRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if names is not None: + request.names = names + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.batch_delete_line_item_creative_associations + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + def preview_line_item_creative_association( + self, + request: Optional[ + Union[ + line_item_creative_association_service.PreviewLineItemCreativeAssociationRequest, + dict, + ] + ] = None, + *, + name: Optional[str] = None, + site_url: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> line_item_creative_association_service.PreviewLineItemCreativeAssociationResponse: + r"""Fetch previews for the + [LineItemCreativeAssociation][google.ads.admanager.v1.LineItemCreativeAssociation]. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.ads import admanager_v1 + + def sample_preview_line_item_creative_association(): + # Create a client + client = admanager_v1.LineItemCreativeAssociationServiceClient() + + # Initialize request argument(s) + request = admanager_v1.PreviewLineItemCreativeAssociationRequest( + name="name_value", + site_url="site_url_value", + ) + + # Make the request + response = client.preview_line_item_creative_association(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.ads.admanager_v1.types.PreviewLineItemCreativeAssociationRequest, dict]): + The request object. Request message for + ``PreviewLineItemCreativeAssociation`` method. + name (str): + Required. The name of the + ``LineItemCreativeAssociation`` object to preview. + Format: + ``networks/{network_code}/lineItems/{line_item_id}/creatives/{creative_id}`` + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + site_url (str): + Required. The URL of the site that + the creative should be previewed in + + This corresponds to the ``site_url`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + google.ads.admanager_v1.types.PreviewLineItemCreativeAssociationResponse: + Response object for PreviewLineItemCreativeAssociation + method. + + """ + # Create or coerce a protobuf request object. + # - Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + flattened_params = [name, site_url] + has_flattened_params = ( + len([param for param in flattened_params if param is not None]) > 0 + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # - Use the request object if provided (there's no risk of modifying the input as + # there are no flattened fields), or create one. + if not isinstance( + request, + line_item_creative_association_service.PreviewLineItemCreativeAssociationRequest, + ): + request = line_item_creative_association_service.PreviewLineItemCreativeAssociationRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + if site_url is not None: + request.site_url = site_url + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.preview_line_item_creative_association + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Validate the universe domain. + self._validate_universe_domain() + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + def __enter__(self) -> "LineItemCreativeAssociationServiceClient": return self diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_creative_association_service/transports/base.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_creative_association_service/transports/base.py index 2098a13ee84a..44e230778337 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_creative_association_service/transports/base.py +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_creative_association_service/transports/base.py @@ -19,6 +19,7 @@ import google.api_core import google.auth # type: ignore import google.protobuf +import google.protobuf.empty_pb2 as empty_pb2 # type: ignore from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 from google.api_core import retry as retries @@ -157,6 +158,46 @@ def _prep_wrapped_messages(self, client_info): default_timeout=None, client_info=client_info, ), + self.create_line_item_creative_association: gapic_v1.method.wrap_method( + self.create_line_item_creative_association, + default_timeout=None, + client_info=client_info, + ), + self.batch_create_line_item_creative_associations: gapic_v1.method.wrap_method( + self.batch_create_line_item_creative_associations, + default_timeout=None, + client_info=client_info, + ), + self.update_line_item_creative_association: gapic_v1.method.wrap_method( + self.update_line_item_creative_association, + default_timeout=None, + client_info=client_info, + ), + self.batch_update_line_item_creative_associations: gapic_v1.method.wrap_method( + self.batch_update_line_item_creative_associations, + default_timeout=None, + client_info=client_info, + ), + self.batch_activate_line_item_creative_associations: gapic_v1.method.wrap_method( + self.batch_activate_line_item_creative_associations, + default_timeout=None, + client_info=client_info, + ), + self.batch_deactivate_line_item_creative_associations: gapic_v1.method.wrap_method( + self.batch_deactivate_line_item_creative_associations, + default_timeout=None, + client_info=client_info, + ), + self.batch_delete_line_item_creative_associations: gapic_v1.method.wrap_method( + self.batch_delete_line_item_creative_associations, + default_timeout=None, + client_info=client_info, + ), + self.preview_line_item_creative_association: gapic_v1.method.wrap_method( + self.preview_line_item_creative_association, + default_timeout=None, + client_info=client_info, + ), self.cancel_operation: gapic_v1.method.wrap_method( self.cancel_operation, default_timeout=None, @@ -208,6 +249,129 @@ def list_line_item_creative_associations( ]: raise NotImplementedError() + @property + def create_line_item_creative_association( + self, + ) -> Callable[ + [ + line_item_creative_association_service.CreateLineItemCreativeAssociationRequest + ], + Union[ + line_item_creative_association_messages.LineItemCreativeAssociation, + Awaitable[ + line_item_creative_association_messages.LineItemCreativeAssociation + ], + ], + ]: + raise NotImplementedError() + + @property + def batch_create_line_item_creative_associations( + self, + ) -> Callable[ + [ + line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsRequest + ], + Union[ + line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsResponse, + Awaitable[ + line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsResponse + ], + ], + ]: + raise NotImplementedError() + + @property + def update_line_item_creative_association( + self, + ) -> Callable[ + [ + line_item_creative_association_service.UpdateLineItemCreativeAssociationRequest + ], + Union[ + line_item_creative_association_messages.LineItemCreativeAssociation, + Awaitable[ + line_item_creative_association_messages.LineItemCreativeAssociation + ], + ], + ]: + raise NotImplementedError() + + @property + def batch_update_line_item_creative_associations( + self, + ) -> Callable[ + [ + line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsRequest + ], + Union[ + line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsResponse, + Awaitable[ + line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsResponse + ], + ], + ]: + raise NotImplementedError() + + @property + def batch_activate_line_item_creative_associations( + self, + ) -> Callable[ + [ + line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsRequest + ], + Union[ + line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsResponse, + Awaitable[ + line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsResponse + ], + ], + ]: + raise NotImplementedError() + + @property + def batch_deactivate_line_item_creative_associations( + self, + ) -> Callable[ + [ + line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsRequest + ], + Union[ + line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsResponse, + Awaitable[ + line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsResponse + ], + ], + ]: + raise NotImplementedError() + + @property + def batch_delete_line_item_creative_associations( + self, + ) -> Callable[ + [ + line_item_creative_association_service.BatchDeleteLineItemCreativeAssociationsRequest + ], + Union[empty_pb2.Empty, Awaitable[empty_pb2.Empty]], + ]: + raise NotImplementedError() + + @property + def preview_line_item_creative_association( + self, + ) -> Callable[ + [ + line_item_creative_association_service.PreviewLineItemCreativeAssociationRequest + ], + Union[ + line_item_creative_association_service.PreviewLineItemCreativeAssociationResponse, + Awaitable[ + line_item_creative_association_service.PreviewLineItemCreativeAssociationResponse + ], + ], + ]: + raise NotImplementedError() + @property def get_operation( self, diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_creative_association_service/transports/rest.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_creative_association_service/transports/rest.py index e8cbf9e47646..41c4f570c273 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_creative_association_service/transports/rest.py +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_creative_association_service/transports/rest.py @@ -20,6 +20,7 @@ from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union import google.protobuf +import google.protobuf.empty_pb2 as empty_pb2 # type: ignore from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1, rest_helpers, rest_streaming from google.api_core import retry as retries @@ -76,6 +77,50 @@ class LineItemCreativeAssociationServiceRestInterceptor: .. code-block:: python class MyCustomLineItemCreativeAssociationServiceInterceptor(LineItemCreativeAssociationServiceRestInterceptor): + def pre_batch_activate_line_item_creative_associations(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_batch_activate_line_item_creative_associations(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_batch_create_line_item_creative_associations(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_batch_create_line_item_creative_associations(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_batch_deactivate_line_item_creative_associations(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_batch_deactivate_line_item_creative_associations(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_batch_delete_line_item_creative_associations(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def pre_batch_update_line_item_creative_associations(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_batch_update_line_item_creative_associations(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_create_line_item_creative_association(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_create_line_item_creative_association(self, response): + logging.log(f"Received response: {response}") + return response + def pre_get_line_item_creative_association(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -92,12 +137,308 @@ def post_list_line_item_creative_associations(self, response): logging.log(f"Received response: {response}") return response + def pre_preview_line_item_creative_association(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_preview_line_item_creative_association(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_line_item_creative_association(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_line_item_creative_association(self, response): + logging.log(f"Received response: {response}") + return response + transport = LineItemCreativeAssociationServiceRestTransport(interceptor=MyCustomLineItemCreativeAssociationServiceInterceptor()) client = LineItemCreativeAssociationServiceClient(transport=transport) """ + def pre_batch_activate_line_item_creative_associations( + self, + request: line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for batch_activate_line_item_creative_associations + + Override in a subclass to manipulate the request or metadata + before they are sent to the LineItemCreativeAssociationService server. + """ + return request, metadata + + def post_batch_activate_line_item_creative_associations( + self, + response: line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsResponse, + ) -> line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsResponse: + """Post-rpc interceptor for batch_activate_line_item_creative_associations + + DEPRECATED. Please use the `post_batch_activate_line_item_creative_associations_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the LineItemCreativeAssociationService server but before + it is returned to user code. This `post_batch_activate_line_item_creative_associations` interceptor runs + before the `post_batch_activate_line_item_creative_associations_with_metadata` interceptor. + """ + return response + + def post_batch_activate_line_item_creative_associations_with_metadata( + self, + response: line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for batch_activate_line_item_creative_associations + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LineItemCreativeAssociationService server but before it is returned to user code. + + We recommend only using this `post_batch_activate_line_item_creative_associations_with_metadata` + interceptor in new development instead of the `post_batch_activate_line_item_creative_associations` interceptor. + When both interceptors are used, this `post_batch_activate_line_item_creative_associations_with_metadata` interceptor runs after the + `post_batch_activate_line_item_creative_associations` interceptor. The (possibly modified) response returned by + `post_batch_activate_line_item_creative_associations` will be passed to + `post_batch_activate_line_item_creative_associations_with_metadata`. + """ + return response, metadata + + def pre_batch_create_line_item_creative_associations( + self, + request: line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for batch_create_line_item_creative_associations + + Override in a subclass to manipulate the request or metadata + before they are sent to the LineItemCreativeAssociationService server. + """ + return request, metadata + + def post_batch_create_line_item_creative_associations( + self, + response: line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsResponse, + ) -> line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsResponse: + """Post-rpc interceptor for batch_create_line_item_creative_associations + + DEPRECATED. Please use the `post_batch_create_line_item_creative_associations_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the LineItemCreativeAssociationService server but before + it is returned to user code. This `post_batch_create_line_item_creative_associations` interceptor runs + before the `post_batch_create_line_item_creative_associations_with_metadata` interceptor. + """ + return response + + def post_batch_create_line_item_creative_associations_with_metadata( + self, + response: line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for batch_create_line_item_creative_associations + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LineItemCreativeAssociationService server but before it is returned to user code. + + We recommend only using this `post_batch_create_line_item_creative_associations_with_metadata` + interceptor in new development instead of the `post_batch_create_line_item_creative_associations` interceptor. + When both interceptors are used, this `post_batch_create_line_item_creative_associations_with_metadata` interceptor runs after the + `post_batch_create_line_item_creative_associations` interceptor. The (possibly modified) response returned by + `post_batch_create_line_item_creative_associations` will be passed to + `post_batch_create_line_item_creative_associations_with_metadata`. + """ + return response, metadata + + def pre_batch_deactivate_line_item_creative_associations( + self, + request: line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for batch_deactivate_line_item_creative_associations + + Override in a subclass to manipulate the request or metadata + before they are sent to the LineItemCreativeAssociationService server. + """ + return request, metadata + + def post_batch_deactivate_line_item_creative_associations( + self, + response: line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsResponse, + ) -> line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsResponse: + """Post-rpc interceptor for batch_deactivate_line_item_creative_associations + + DEPRECATED. Please use the `post_batch_deactivate_line_item_creative_associations_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the LineItemCreativeAssociationService server but before + it is returned to user code. This `post_batch_deactivate_line_item_creative_associations` interceptor runs + before the `post_batch_deactivate_line_item_creative_associations_with_metadata` interceptor. + """ + return response + + def post_batch_deactivate_line_item_creative_associations_with_metadata( + self, + response: line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for batch_deactivate_line_item_creative_associations + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LineItemCreativeAssociationService server but before it is returned to user code. + + We recommend only using this `post_batch_deactivate_line_item_creative_associations_with_metadata` + interceptor in new development instead of the `post_batch_deactivate_line_item_creative_associations` interceptor. + When both interceptors are used, this `post_batch_deactivate_line_item_creative_associations_with_metadata` interceptor runs after the + `post_batch_deactivate_line_item_creative_associations` interceptor. The (possibly modified) response returned by + `post_batch_deactivate_line_item_creative_associations` will be passed to + `post_batch_deactivate_line_item_creative_associations_with_metadata`. + """ + return response, metadata + + def pre_batch_delete_line_item_creative_associations( + self, + request: line_item_creative_association_service.BatchDeleteLineItemCreativeAssociationsRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + line_item_creative_association_service.BatchDeleteLineItemCreativeAssociationsRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for batch_delete_line_item_creative_associations + + Override in a subclass to manipulate the request or metadata + before they are sent to the LineItemCreativeAssociationService server. + """ + return request, metadata + + def pre_batch_update_line_item_creative_associations( + self, + request: line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for batch_update_line_item_creative_associations + + Override in a subclass to manipulate the request or metadata + before they are sent to the LineItemCreativeAssociationService server. + """ + return request, metadata + + def post_batch_update_line_item_creative_associations( + self, + response: line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsResponse, + ) -> line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsResponse: + """Post-rpc interceptor for batch_update_line_item_creative_associations + + DEPRECATED. Please use the `post_batch_update_line_item_creative_associations_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the LineItemCreativeAssociationService server but before + it is returned to user code. This `post_batch_update_line_item_creative_associations` interceptor runs + before the `post_batch_update_line_item_creative_associations_with_metadata` interceptor. + """ + return response + + def post_batch_update_line_item_creative_associations_with_metadata( + self, + response: line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for batch_update_line_item_creative_associations + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LineItemCreativeAssociationService server but before it is returned to user code. + + We recommend only using this `post_batch_update_line_item_creative_associations_with_metadata` + interceptor in new development instead of the `post_batch_update_line_item_creative_associations` interceptor. + When both interceptors are used, this `post_batch_update_line_item_creative_associations_with_metadata` interceptor runs after the + `post_batch_update_line_item_creative_associations` interceptor. The (possibly modified) response returned by + `post_batch_update_line_item_creative_associations` will be passed to + `post_batch_update_line_item_creative_associations_with_metadata`. + """ + return response, metadata + + def pre_create_line_item_creative_association( + self, + request: line_item_creative_association_service.CreateLineItemCreativeAssociationRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + line_item_creative_association_service.CreateLineItemCreativeAssociationRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for create_line_item_creative_association + + Override in a subclass to manipulate the request or metadata + before they are sent to the LineItemCreativeAssociationService server. + """ + return request, metadata + + def post_create_line_item_creative_association( + self, + response: line_item_creative_association_messages.LineItemCreativeAssociation, + ) -> line_item_creative_association_messages.LineItemCreativeAssociation: + """Post-rpc interceptor for create_line_item_creative_association + + DEPRECATED. Please use the `post_create_line_item_creative_association_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the LineItemCreativeAssociationService server but before + it is returned to user code. This `post_create_line_item_creative_association` interceptor runs + before the `post_create_line_item_creative_association_with_metadata` interceptor. + """ + return response + + def post_create_line_item_creative_association_with_metadata( + self, + response: line_item_creative_association_messages.LineItemCreativeAssociation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + line_item_creative_association_messages.LineItemCreativeAssociation, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for create_line_item_creative_association + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LineItemCreativeAssociationService server but before it is returned to user code. + + We recommend only using this `post_create_line_item_creative_association_with_metadata` + interceptor in new development instead of the `post_create_line_item_creative_association` interceptor. + When both interceptors are used, this `post_create_line_item_creative_association_with_metadata` interceptor runs after the + `post_create_line_item_creative_association` interceptor. The (possibly modified) response returned by + `post_create_line_item_creative_association` will be passed to + `post_create_line_item_creative_association_with_metadata`. + """ + return response, metadata + def pre_get_line_item_creative_association( self, request: line_item_creative_association_service.GetLineItemCreativeAssociationRequest, @@ -206,49 +547,155 @@ def post_list_line_item_creative_associations_with_metadata( """ return response, metadata - def pre_cancel_operation( + def pre_preview_line_item_creative_association( self, - request: operations_pb2.CancelOperationRequest, + request: line_item_creative_association_service.PreviewLineItemCreativeAssociationRequest, metadata: Sequence[Tuple[str, Union[str, bytes]]], ) -> Tuple[ - operations_pb2.CancelOperationRequest, Sequence[Tuple[str, Union[str, bytes]]] + line_item_creative_association_service.PreviewLineItemCreativeAssociationRequest, + Sequence[Tuple[str, Union[str, bytes]]], ]: - """Pre-rpc interceptor for cancel_operation + """Pre-rpc interceptor for preview_line_item_creative_association Override in a subclass to manipulate the request or metadata before they are sent to the LineItemCreativeAssociationService server. """ return request, metadata - def post_cancel_operation(self, response: None) -> None: - """Post-rpc interceptor for cancel_operation + def post_preview_line_item_creative_association( + self, + response: line_item_creative_association_service.PreviewLineItemCreativeAssociationResponse, + ) -> line_item_creative_association_service.PreviewLineItemCreativeAssociationResponse: + """Post-rpc interceptor for preview_line_item_creative_association - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_preview_line_item_creative_association_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LineItemCreativeAssociationService server but before - it is returned to user code. + it is returned to user code. This `post_preview_line_item_creative_association` interceptor runs + before the `post_preview_line_item_creative_association_with_metadata` interceptor. """ return response - def pre_get_operation( + def post_preview_line_item_creative_association_with_metadata( self, - request: operations_pb2.GetOperationRequest, + response: line_item_creative_association_service.PreviewLineItemCreativeAssociationResponse, metadata: Sequence[Tuple[str, Union[str, bytes]]], ) -> Tuple[ - operations_pb2.GetOperationRequest, Sequence[Tuple[str, Union[str, bytes]]] + line_item_creative_association_service.PreviewLineItemCreativeAssociationResponse, + Sequence[Tuple[str, Union[str, bytes]]], ]: - """Pre-rpc interceptor for get_operation + """Post-rpc interceptor for preview_line_item_creative_association + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LineItemCreativeAssociationService server but before it is returned to user code. + + We recommend only using this `post_preview_line_item_creative_association_with_metadata` + interceptor in new development instead of the `post_preview_line_item_creative_association` interceptor. + When both interceptors are used, this `post_preview_line_item_creative_association_with_metadata` interceptor runs after the + `post_preview_line_item_creative_association` interceptor. The (possibly modified) response returned by + `post_preview_line_item_creative_association` will be passed to + `post_preview_line_item_creative_association_with_metadata`. + """ + return response, metadata + + def pre_update_line_item_creative_association( + self, + request: line_item_creative_association_service.UpdateLineItemCreativeAssociationRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + line_item_creative_association_service.UpdateLineItemCreativeAssociationRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for update_line_item_creative_association Override in a subclass to manipulate the request or metadata before they are sent to the LineItemCreativeAssociationService server. """ return request, metadata - def post_get_operation( - self, response: operations_pb2.Operation - ) -> operations_pb2.Operation: - """Post-rpc interceptor for get_operation - - Override in a subclass to manipulate the response + def post_update_line_item_creative_association( + self, + response: line_item_creative_association_messages.LineItemCreativeAssociation, + ) -> line_item_creative_association_messages.LineItemCreativeAssociation: + """Post-rpc interceptor for update_line_item_creative_association + + DEPRECATED. Please use the `post_update_line_item_creative_association_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the LineItemCreativeAssociationService server but before + it is returned to user code. This `post_update_line_item_creative_association` interceptor runs + before the `post_update_line_item_creative_association_with_metadata` interceptor. + """ + return response + + def post_update_line_item_creative_association_with_metadata( + self, + response: line_item_creative_association_messages.LineItemCreativeAssociation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + line_item_creative_association_messages.LineItemCreativeAssociation, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for update_line_item_creative_association + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LineItemCreativeAssociationService server but before it is returned to user code. + + We recommend only using this `post_update_line_item_creative_association_with_metadata` + interceptor in new development instead of the `post_update_line_item_creative_association` interceptor. + When both interceptors are used, this `post_update_line_item_creative_association_with_metadata` interceptor runs after the + `post_update_line_item_creative_association` interceptor. The (possibly modified) response returned by + `post_update_line_item_creative_association` will be passed to + `post_update_line_item_creative_association_with_metadata`. + """ + return response, metadata + + def pre_cancel_operation( + self, + request: operations_pb2.CancelOperationRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + operations_pb2.CancelOperationRequest, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Pre-rpc interceptor for cancel_operation + + Override in a subclass to manipulate the request or metadata + before they are sent to the LineItemCreativeAssociationService server. + """ + return request, metadata + + def post_cancel_operation(self, response: None) -> None: + """Post-rpc interceptor for cancel_operation + + Override in a subclass to manipulate the response + after it is returned by the LineItemCreativeAssociationService server but before + it is returned to user code. + """ + return response + + def pre_get_operation( + self, + request: operations_pb2.GetOperationRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + operations_pb2.GetOperationRequest, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Pre-rpc interceptor for get_operation + + Override in a subclass to manipulate the request or metadata + before they are sent to the LineItemCreativeAssociationService server. + """ + return request, metadata + + def post_get_operation( + self, response: operations_pb2.Operation + ) -> operations_pb2.Operation: + """Post-rpc interceptor for get_operation + + Override in a subclass to manipulate the response after it is returned by the LineItemCreativeAssociationService server but before it is returned to user code. """ @@ -303,63 +750,1334 @@ def __init__( are specified, the client will attempt to ascertain the credentials from the environment. - credentials_file (Optional[str]): Deprecated. A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. This argument will be - removed in the next major version of this library. - scopes (Optional(Sequence[str])): A list of scopes. This argument is - ignored if ``channel`` is provided. - client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client - certificate to configure mutual TLS HTTP channel. It is ignored - if ``channel`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - 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 are developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - url_scheme: the protocol scheme for the API endpoint. Normally - "https", but for testing or local servers, - "http" can be specified. - interceptor (Optional[LineItemCreativeAssociationServiceRestInterceptor]): Interceptor used - to manipulate requests, request metadata, and responses. - api_audience (Optional[str]): The intended audience for the API calls - to the service that will be set when using certain 3rd party - authentication flows. Audience is typically a resource identifier. - If not set, the host value will be used as a default. - """ - # Run the base constructor - # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. - # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the - # credentials object - super().__init__( - host=host, - credentials=credentials, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - url_scheme=url_scheme, - api_audience=api_audience, - ) - self._session = AuthorizedSession( - self._credentials, default_host=self.DEFAULT_HOST - ) - if client_cert_source_for_mtls: - self._session.configure_mtls_channel(client_cert_source_for_mtls) - self._interceptor = ( - interceptor or LineItemCreativeAssociationServiceRestInterceptor() - ) - self._prep_wrapped_messages(client_info) + credentials_file (Optional[str]): Deprecated. A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. This argument will be + removed in the next major version of this library. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client + certificate to configure mutual TLS HTTP channel. It is ignored + if ``channel`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + 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 are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + interceptor (Optional[LineItemCreativeAssociationServiceRestInterceptor]): Interceptor used + to manipulate requests, request metadata, and responses. + api_audience (Optional[str]): The intended audience for the API calls + to the service that will be set when using certain 3rd party + authentication flows. Audience is typically a resource identifier. + If not set, the host value will be used as a default. + """ + # Run the base constructor + # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. + # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the + # credentials object + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + url_scheme=url_scheme, + api_audience=api_audience, + ) + self._session = AuthorizedSession( + self._credentials, default_host=self.DEFAULT_HOST + ) + if client_cert_source_for_mtls: + self._session.configure_mtls_channel(client_cert_source_for_mtls) + self._interceptor = ( + interceptor or LineItemCreativeAssociationServiceRestInterceptor() + ) + self._prep_wrapped_messages(client_info) + + class _BatchActivateLineItemCreativeAssociations( + _BaseLineItemCreativeAssociationServiceRestTransport._BaseBatchActivateLineItemCreativeAssociations, + LineItemCreativeAssociationServiceRestStub, + ): + def __hash__(self): + return hash( + "LineItemCreativeAssociationServiceRestTransport.BatchActivateLineItemCreativeAssociations" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response + + def __call__( + self, + request: line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsResponse: + r"""Call the batch activate line item + creative associations method over HTTP. + + Args: + request (~.line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsRequest): + The request object. Request message for + ``BatchActivateLineItemCreativeAssociations`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsResponse: + Response object for + ``BatchActivateLineItemCreativeAssociations`` method. + + """ + + http_options = _BaseLineItemCreativeAssociationServiceRestTransport._BaseBatchActivateLineItemCreativeAssociations._get_http_options() + request, metadata = ( + self._interceptor.pre_batch_activate_line_item_creative_associations( + request, metadata + ) + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseLineItemCreativeAssociationServiceRestTransport._BaseBatchActivateLineItemCreativeAssociations, + "_BaseBatchActivateLineItemCreativeAssociations__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.BatchActivateLineItemCreativeAssociations", + extra={ + "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", + "rpcName": "BatchActivateLineItemCreativeAssociations", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = LineItemCreativeAssociationServiceRestTransport._BatchActivateLineItemCreativeAssociations._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsResponse() + pb_resp = line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsResponse.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = ( + self._interceptor.post_batch_activate_line_item_creative_associations( + resp + ) + ) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = ( + self._interceptor.post_batch_activate_line_item_creative_associations_with_metadata( + resp, response_metadata + ) + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsResponse.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.batch_activate_line_item_creative_associations", + extra={ + "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", + "rpcName": "BatchActivateLineItemCreativeAssociations", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _BatchCreateLineItemCreativeAssociations( + _BaseLineItemCreativeAssociationServiceRestTransport._BaseBatchCreateLineItemCreativeAssociations, + LineItemCreativeAssociationServiceRestStub, + ): + def __hash__(self): + return hash( + "LineItemCreativeAssociationServiceRestTransport.BatchCreateLineItemCreativeAssociations" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response + + def __call__( + self, + request: line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsResponse: + r"""Call the batch create line item + creative associations method over HTTP. + + Args: + request (~.line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsRequest): + The request object. Request object for + ``BatchCreateLineItemCreativeAssociations`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsResponse: + Response object for + ``BatchCreateLineItemCreativeAssociations`` method. + + """ + + http_options = _BaseLineItemCreativeAssociationServiceRestTransport._BaseBatchCreateLineItemCreativeAssociations._get_http_options() + request, metadata = ( + self._interceptor.pre_batch_create_line_item_creative_associations( + request, metadata + ) + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseLineItemCreativeAssociationServiceRestTransport._BaseBatchCreateLineItemCreativeAssociations, + "_BaseBatchCreateLineItemCreativeAssociations__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.BatchCreateLineItemCreativeAssociations", + extra={ + "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", + "rpcName": "BatchCreateLineItemCreativeAssociations", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = LineItemCreativeAssociationServiceRestTransport._BatchCreateLineItemCreativeAssociations._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsResponse() + pb_resp = line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsResponse.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_batch_create_line_item_creative_associations( + resp + ) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = ( + self._interceptor.post_batch_create_line_item_creative_associations_with_metadata( + resp, response_metadata + ) + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsResponse.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.batch_create_line_item_creative_associations", + extra={ + "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", + "rpcName": "BatchCreateLineItemCreativeAssociations", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _BatchDeactivateLineItemCreativeAssociations( + _BaseLineItemCreativeAssociationServiceRestTransport._BaseBatchDeactivateLineItemCreativeAssociations, + LineItemCreativeAssociationServiceRestStub, + ): + def __hash__(self): + return hash( + "LineItemCreativeAssociationServiceRestTransport.BatchDeactivateLineItemCreativeAssociations" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response + + def __call__( + self, + request: line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsResponse: + r"""Call the batch deactivate line + item creative associations method over HTTP. + + Args: + request (~.line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsRequest): + The request object. Request message for + ``BatchDeactivateLineItemCreativeAssociations`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsResponse: + Response object for + ``BatchDeactivateLineItemCreativeAssociations`` method. + + """ + + http_options = _BaseLineItemCreativeAssociationServiceRestTransport._BaseBatchDeactivateLineItemCreativeAssociations._get_http_options() + request, metadata = ( + self._interceptor.pre_batch_deactivate_line_item_creative_associations( + request, metadata + ) + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseLineItemCreativeAssociationServiceRestTransport._BaseBatchDeactivateLineItemCreativeAssociations, + "_BaseBatchDeactivateLineItemCreativeAssociations__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.BatchDeactivateLineItemCreativeAssociations", + extra={ + "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", + "rpcName": "BatchDeactivateLineItemCreativeAssociations", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = LineItemCreativeAssociationServiceRestTransport._BatchDeactivateLineItemCreativeAssociations._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsResponse() + pb_resp = line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsResponse.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = ( + self._interceptor.post_batch_deactivate_line_item_creative_associations( + resp + ) + ) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = ( + self._interceptor.post_batch_deactivate_line_item_creative_associations_with_metadata( + resp, response_metadata + ) + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsResponse.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.batch_deactivate_line_item_creative_associations", + extra={ + "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", + "rpcName": "BatchDeactivateLineItemCreativeAssociations", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _BatchDeleteLineItemCreativeAssociations( + _BaseLineItemCreativeAssociationServiceRestTransport._BaseBatchDeleteLineItemCreativeAssociations, + LineItemCreativeAssociationServiceRestStub, + ): + def __hash__(self): + return hash( + "LineItemCreativeAssociationServiceRestTransport.BatchDeleteLineItemCreativeAssociations" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response + + def __call__( + self, + request: line_item_creative_association_service.BatchDeleteLineItemCreativeAssociationsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ): + r"""Call the batch delete line item + creative associations method over HTTP. + + Args: + request (~.line_item_creative_association_service.BatchDeleteLineItemCreativeAssociationsRequest): + The request object. Request message for + ``BatchDeleteLineItemCreativeAssociations`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + """ + + http_options = _BaseLineItemCreativeAssociationServiceRestTransport._BaseBatchDeleteLineItemCreativeAssociations._get_http_options() + request, metadata = ( + self._interceptor.pre_batch_delete_line_item_creative_associations( + request, metadata + ) + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseLineItemCreativeAssociationServiceRestTransport._BaseBatchDeleteLineItemCreativeAssociations, + "_BaseBatchDeleteLineItemCreativeAssociations__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.BatchDeleteLineItemCreativeAssociations", + extra={ + "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", + "rpcName": "BatchDeleteLineItemCreativeAssociations", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = LineItemCreativeAssociationServiceRestTransport._BatchDeleteLineItemCreativeAssociations._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + class _BatchUpdateLineItemCreativeAssociations( + _BaseLineItemCreativeAssociationServiceRestTransport._BaseBatchUpdateLineItemCreativeAssociations, + LineItemCreativeAssociationServiceRestStub, + ): + def __hash__(self): + return hash( + "LineItemCreativeAssociationServiceRestTransport.BatchUpdateLineItemCreativeAssociations" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response + + def __call__( + self, + request: line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsResponse: + r"""Call the batch update line item + creative associations method over HTTP. + + Args: + request (~.line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsRequest): + The request object. Request object for + ``BatchUpdateLineItemCreativeAssociations`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsResponse: + Response object for + ``BatchUpdateLineItemCreativeAssociations`` method. + + """ + + http_options = _BaseLineItemCreativeAssociationServiceRestTransport._BaseBatchUpdateLineItemCreativeAssociations._get_http_options() + request, metadata = ( + self._interceptor.pre_batch_update_line_item_creative_associations( + request, metadata + ) + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseLineItemCreativeAssociationServiceRestTransport._BaseBatchUpdateLineItemCreativeAssociations, + "_BaseBatchUpdateLineItemCreativeAssociations__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.BatchUpdateLineItemCreativeAssociations", + extra={ + "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", + "rpcName": "BatchUpdateLineItemCreativeAssociations", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = LineItemCreativeAssociationServiceRestTransport._BatchUpdateLineItemCreativeAssociations._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsResponse() + pb_resp = line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsResponse.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_batch_update_line_item_creative_associations( + resp + ) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = ( + self._interceptor.post_batch_update_line_item_creative_associations_with_metadata( + resp, response_metadata + ) + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsResponse.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.batch_update_line_item_creative_associations", + extra={ + "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", + "rpcName": "BatchUpdateLineItemCreativeAssociations", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _CreateLineItemCreativeAssociation( + _BaseLineItemCreativeAssociationServiceRestTransport._BaseCreateLineItemCreativeAssociation, + LineItemCreativeAssociationServiceRestStub, + ): + def __hash__(self): + return hash( + "LineItemCreativeAssociationServiceRestTransport.CreateLineItemCreativeAssociation" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + return response + + def __call__( + self, + request: line_item_creative_association_service.CreateLineItemCreativeAssociationRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> line_item_creative_association_messages.LineItemCreativeAssociation: + r"""Call the create line item creative + association method over HTTP. + + Args: + request (~.line_item_creative_association_service.CreateLineItemCreativeAssociationRequest): + The request object. Request object for ``CreateLineItemCreativeAssociation`` + method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.line_item_creative_association_messages.LineItemCreativeAssociation: + A LineItemCreativeAssociation associates a + [Creative][google.ads.admanager.v1.Creative] or + [CreativeSet][google.ads.admanager.v1.CreativeSet] with + a [LineItem][google.ads.admanager.v1.LineItem] so that + the creative can be served in ad units targeted by the + line item. + + """ + + http_options = _BaseLineItemCreativeAssociationServiceRestTransport._BaseCreateLineItemCreativeAssociation._get_http_options() + request, metadata = ( + self._interceptor.pre_create_line_item_creative_association( + request, metadata + ) + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseLineItemCreativeAssociationServiceRestTransport._BaseCreateLineItemCreativeAssociation, + "_BaseCreateLineItemCreativeAssociation__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.CreateLineItemCreativeAssociation", + extra={ + "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", + "rpcName": "CreateLineItemCreativeAssociation", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = LineItemCreativeAssociationServiceRestTransport._CreateLineItemCreativeAssociation._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = line_item_creative_association_messages.LineItemCreativeAssociation() + pb_resp = ( + line_item_creative_association_messages.LineItemCreativeAssociation.pb( + resp + ) + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_create_line_item_creative_association(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = ( + self._interceptor.post_create_line_item_creative_association_with_metadata( + resp, response_metadata + ) + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = line_item_creative_association_messages.LineItemCreativeAssociation.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.create_line_item_creative_association", + extra={ + "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", + "rpcName": "CreateLineItemCreativeAssociation", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _GetLineItemCreativeAssociation( + _BaseLineItemCreativeAssociationServiceRestTransport._BaseGetLineItemCreativeAssociation, + LineItemCreativeAssociationServiceRestStub, + ): + def __hash__(self): + return hash( + "LineItemCreativeAssociationServiceRestTransport.GetLineItemCreativeAssociation" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response + + def __call__( + self, + request: line_item_creative_association_service.GetLineItemCreativeAssociationRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> line_item_creative_association_messages.LineItemCreativeAssociation: + r"""Call the get line item creative + association method over HTTP. + + Args: + request (~.line_item_creative_association_service.GetLineItemCreativeAssociationRequest): + The request object. Request object for ``GetLineItemCreativeAssociation`` + method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.line_item_creative_association_messages.LineItemCreativeAssociation: + A LineItemCreativeAssociation associates a + [Creative][google.ads.admanager.v1.Creative] or + [CreativeSet][google.ads.admanager.v1.CreativeSet] with + a [LineItem][google.ads.admanager.v1.LineItem] so that + the creative can be served in ad units targeted by the + line item. + + """ + + http_options = _BaseLineItemCreativeAssociationServiceRestTransport._BaseGetLineItemCreativeAssociation._get_http_options() + request, metadata = ( + self._interceptor.pre_get_line_item_creative_association( + request, metadata + ) + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseLineItemCreativeAssociationServiceRestTransport._BaseGetLineItemCreativeAssociation, + "_BaseGetLineItemCreativeAssociation__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.GetLineItemCreativeAssociation", + extra={ + "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", + "rpcName": "GetLineItemCreativeAssociation", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = LineItemCreativeAssociationServiceRestTransport._GetLineItemCreativeAssociation._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = line_item_creative_association_messages.LineItemCreativeAssociation() + pb_resp = ( + line_item_creative_association_messages.LineItemCreativeAssociation.pb( + resp + ) + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + + resp = self._interceptor.post_get_line_item_creative_association(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = ( + self._interceptor.post_get_line_item_creative_association_with_metadata( + resp, response_metadata + ) + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = line_item_creative_association_messages.LineItemCreativeAssociation.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.get_line_item_creative_association", + extra={ + "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", + "rpcName": "GetLineItemCreativeAssociation", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _ListLineItemCreativeAssociations( + _BaseLineItemCreativeAssociationServiceRestTransport._BaseListLineItemCreativeAssociations, + LineItemCreativeAssociationServiceRestStub, + ): + def __hash__(self): + return hash( + "LineItemCreativeAssociationServiceRestTransport.ListLineItemCreativeAssociations" + ) + + @staticmethod + def _get_response( + host, + metadata, + query_params, + session, + timeout, + transcoded_request, + body=None, + ): + uri = transcoded_request["uri"] + method = transcoded_request["method"] + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(session, method)( + "{host}{uri}".format(host=host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + return response + + def __call__( + self, + request: line_item_creative_association_service.ListLineItemCreativeAssociationsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), + ) -> line_item_creative_association_service.ListLineItemCreativeAssociationsResponse: + r"""Call the list line item creative + associations method over HTTP. + + Args: + request (~.line_item_creative_association_service.ListLineItemCreativeAssociationsRequest): + The request object. Request object for ``ListLineItemCreativeAssociations`` + method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, Union[str, bytes]]]): Key/value pairs which should be + sent along with the request as metadata. Normally, each value must be of type `str`, + but for metadata keys ending with the suffix `-bin`, the corresponding values must + be of type `bytes`. + + Returns: + ~.line_item_creative_association_service.ListLineItemCreativeAssociationsResponse: + Response object for + ``ListLineItemCreativeAssociationsRequest`` containing + matching ``LineItemCreativeAssociation`` objects. + + """ + + http_options = _BaseLineItemCreativeAssociationServiceRestTransport._BaseListLineItemCreativeAssociations._get_http_options() + request, metadata = ( + self._interceptor.pre_list_line_item_creative_associations( + request, metadata + ) + ) + transcoded_request, body, query_params = transcode_request( + http_options, + request, + required_fields_default_values=getattr( + _BaseLineItemCreativeAssociationServiceRestTransport._BaseListLineItemCreativeAssociations, + "_BaseListLineItemCreativeAssociations__REQUIRED_FIELDS_DEFAULT_VALUES", + None, + ), + rest_numeric_enums=True, + ) + + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + request_url = "{host}{uri}".format( + host=self._host, uri=transcoded_request["uri"] + ) + method = transcoded_request["method"] + try: + request_payload = type(request).to_json(request) + except: + request_payload = None + http_request = { + "payload": request_payload, + "requestMethod": method, + "requestUrl": request_url, + "headers": dict(metadata), + } + _LOGGER.debug( + f"Sending request for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.ListLineItemCreativeAssociations", + extra={ + "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", + "rpcName": "ListLineItemCreativeAssociations", + "httpRequest": http_request, + "metadata": http_request["headers"], + }, + ) + + # Send the request + response = LineItemCreativeAssociationServiceRestTransport._ListLineItemCreativeAssociations._get_response( + self._host, + metadata, + query_params, + self._session, + timeout, + transcoded_request, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = line_item_creative_association_service.ListLineItemCreativeAssociationsResponse() + pb_resp = line_item_creative_association_service.ListLineItemCreativeAssociationsResponse.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - class _GetLineItemCreativeAssociation( - _BaseLineItemCreativeAssociationServiceRestTransport._BaseGetLineItemCreativeAssociation, + resp = self._interceptor.post_list_line_item_creative_associations(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = ( + self._interceptor.post_list_line_item_creative_associations_with_metadata( + resp, response_metadata + ) + ) + if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( + logging.DEBUG + ): # pragma: NO COVER + try: + response_payload = line_item_creative_association_service.ListLineItemCreativeAssociationsResponse.to_json( + response + ) + except: + response_payload = None + http_response = { + "payload": response_payload, + "headers": dict(response.headers), + "status": response.status_code, + } + _LOGGER.debug( + "Received response for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.list_line_item_creative_associations", + extra={ + "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", + "rpcName": "ListLineItemCreativeAssociations", + "metadata": http_response["headers"], + "httpResponse": http_response, + }, + ) + return resp + + class _PreviewLineItemCreativeAssociation( + _BaseLineItemCreativeAssociationServiceRestTransport._BasePreviewLineItemCreativeAssociation, LineItemCreativeAssociationServiceRestStub, ): def __hash__(self): return hash( - "LineItemCreativeAssociationServiceRestTransport.GetLineItemCreativeAssociation" + "LineItemCreativeAssociationServiceRestTransport.PreviewLineItemCreativeAssociation" ) @staticmethod @@ -381,24 +2099,25 @@ def _get_response( timeout=timeout, headers=headers, params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, ) return response def __call__( self, - request: line_item_creative_association_service.GetLineItemCreativeAssociationRequest, + request: line_item_creative_association_service.PreviewLineItemCreativeAssociationRequest, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Optional[float] = None, metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), - ) -> line_item_creative_association_messages.LineItemCreativeAssociation: - r"""Call the get line item creative - association method over HTTP. + ) -> line_item_creative_association_service.PreviewLineItemCreativeAssociationResponse: + r"""Call the preview line item + creative association method over HTTP. Args: - request (~.line_item_creative_association_service.GetLineItemCreativeAssociationRequest): - The request object. Request object for ``GetLineItemCreativeAssociation`` - method. + request (~.line_item_creative_association_service.PreviewLineItemCreativeAssociationRequest): + The request object. Request message for + ``PreviewLineItemCreativeAssociation`` method. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -408,19 +2127,15 @@ def __call__( be of type `bytes`. Returns: - ~.line_item_creative_association_messages.LineItemCreativeAssociation: - A LineItemCreativeAssociation associates a - [Creative][google.ads.admanager.v1.Creative] or - [CreativeSet][google.ads.admanager.v1.CreativeSet] with - a [LineItem][google.ads.admanager.v1.LineItem] so that - the creative can be served in ad units targeted by the - line item. + ~.line_item_creative_association_service.PreviewLineItemCreativeAssociationResponse: + Response object for + ``PreviewLineItemCreativeAssociation`` method. """ - http_options = _BaseLineItemCreativeAssociationServiceRestTransport._BaseGetLineItemCreativeAssociation._get_http_options() + http_options = _BaseLineItemCreativeAssociationServiceRestTransport._BasePreviewLineItemCreativeAssociation._get_http_options() request, metadata = ( - self._interceptor.pre_get_line_item_creative_association( + self._interceptor.pre_preview_line_item_creative_association( request, metadata ) ) @@ -428,8 +2143,8 @@ def __call__( http_options, request, required_fields_default_values=getattr( - _BaseLineItemCreativeAssociationServiceRestTransport._BaseGetLineItemCreativeAssociation, - "_BaseGetLineItemCreativeAssociation__REQUIRED_FIELDS_DEFAULT_VALUES", + _BaseLineItemCreativeAssociationServiceRestTransport._BasePreviewLineItemCreativeAssociation, + "_BasePreviewLineItemCreativeAssociation__REQUIRED_FIELDS_DEFAULT_VALUES", None, ), rest_numeric_enums=True, @@ -453,23 +2168,24 @@ def __call__( "headers": dict(metadata), } _LOGGER.debug( - f"Sending request for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.GetLineItemCreativeAssociation", + f"Sending request for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.PreviewLineItemCreativeAssociation", extra={ "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", - "rpcName": "GetLineItemCreativeAssociation", + "rpcName": "PreviewLineItemCreativeAssociation", "httpRequest": http_request, "metadata": http_request["headers"], }, ) # Send the request - response = LineItemCreativeAssociationServiceRestTransport._GetLineItemCreativeAssociation._get_response( + response = LineItemCreativeAssociationServiceRestTransport._PreviewLineItemCreativeAssociation._get_response( self._host, metadata, query_params, self._session, timeout, transcoded_request, + body, ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -478,19 +2194,17 @@ def __call__( raise core_exceptions.from_http_response(response) # Return the response - resp = line_item_creative_association_messages.LineItemCreativeAssociation() - pb_resp = ( - line_item_creative_association_messages.LineItemCreativeAssociation.pb( - resp - ) + resp = line_item_creative_association_service.PreviewLineItemCreativeAssociationResponse() + pb_resp = line_item_creative_association_service.PreviewLineItemCreativeAssociationResponse.pb( + resp ) json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_line_item_creative_association(resp) + resp = self._interceptor.post_preview_line_item_creative_association(resp) response_metadata = [(k, str(v)) for k, v in response.headers.items()] resp, _ = ( - self._interceptor.post_get_line_item_creative_association_with_metadata( + self._interceptor.post_preview_line_item_creative_association_with_metadata( resp, response_metadata ) ) @@ -498,7 +2212,7 @@ def __call__( logging.DEBUG ): # pragma: NO COVER try: - response_payload = line_item_creative_association_messages.LineItemCreativeAssociation.to_json( + response_payload = line_item_creative_association_service.PreviewLineItemCreativeAssociationResponse.to_json( response ) except: @@ -509,23 +2223,23 @@ def __call__( "status": response.status_code, } _LOGGER.debug( - "Received response for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.get_line_item_creative_association", + "Received response for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.preview_line_item_creative_association", extra={ "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", - "rpcName": "GetLineItemCreativeAssociation", + "rpcName": "PreviewLineItemCreativeAssociation", "metadata": http_response["headers"], "httpResponse": http_response, }, ) return resp - class _ListLineItemCreativeAssociations( - _BaseLineItemCreativeAssociationServiceRestTransport._BaseListLineItemCreativeAssociations, + class _UpdateLineItemCreativeAssociation( + _BaseLineItemCreativeAssociationServiceRestTransport._BaseUpdateLineItemCreativeAssociation, LineItemCreativeAssociationServiceRestStub, ): def __hash__(self): return hash( - "LineItemCreativeAssociationServiceRestTransport.ListLineItemCreativeAssociations" + "LineItemCreativeAssociationServiceRestTransport.UpdateLineItemCreativeAssociation" ) @staticmethod @@ -547,23 +2261,24 @@ def _get_response( timeout=timeout, headers=headers, params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, ) return response def __call__( self, - request: line_item_creative_association_service.ListLineItemCreativeAssociationsRequest, + request: line_item_creative_association_service.UpdateLineItemCreativeAssociationRequest, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Optional[float] = None, metadata: Sequence[Tuple[str, Union[str, bytes]]] = (), - ) -> line_item_creative_association_service.ListLineItemCreativeAssociationsResponse: - r"""Call the list line item creative - associations method over HTTP. + ) -> line_item_creative_association_messages.LineItemCreativeAssociation: + r"""Call the update line item creative + association method over HTTP. Args: - request (~.line_item_creative_association_service.ListLineItemCreativeAssociationsRequest): - The request object. Request object for ``ListLineItemCreativeAssociations`` + request (~.line_item_creative_association_service.UpdateLineItemCreativeAssociationRequest): + The request object. Request object for ``UpdateLineItemCreativeAssociation`` method. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. @@ -574,16 +2289,19 @@ def __call__( be of type `bytes`. Returns: - ~.line_item_creative_association_service.ListLineItemCreativeAssociationsResponse: - Response object for - ``ListLineItemCreativeAssociationsRequest`` containing - matching ``LineItemCreativeAssociation`` objects. + ~.line_item_creative_association_messages.LineItemCreativeAssociation: + A LineItemCreativeAssociation associates a + [Creative][google.ads.admanager.v1.Creative] or + [CreativeSet][google.ads.admanager.v1.CreativeSet] with + a [LineItem][google.ads.admanager.v1.LineItem] so that + the creative can be served in ad units targeted by the + line item. """ - http_options = _BaseLineItemCreativeAssociationServiceRestTransport._BaseListLineItemCreativeAssociations._get_http_options() + http_options = _BaseLineItemCreativeAssociationServiceRestTransport._BaseUpdateLineItemCreativeAssociation._get_http_options() request, metadata = ( - self._interceptor.pre_list_line_item_creative_associations( + self._interceptor.pre_update_line_item_creative_association( request, metadata ) ) @@ -591,8 +2309,8 @@ def __call__( http_options, request, required_fields_default_values=getattr( - _BaseLineItemCreativeAssociationServiceRestTransport._BaseListLineItemCreativeAssociations, - "_BaseListLineItemCreativeAssociations__REQUIRED_FIELDS_DEFAULT_VALUES", + _BaseLineItemCreativeAssociationServiceRestTransport._BaseUpdateLineItemCreativeAssociation, + "_BaseUpdateLineItemCreativeAssociation__REQUIRED_FIELDS_DEFAULT_VALUES", None, ), rest_numeric_enums=True, @@ -616,23 +2334,24 @@ def __call__( "headers": dict(metadata), } _LOGGER.debug( - f"Sending request for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.ListLineItemCreativeAssociations", + f"Sending request for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.UpdateLineItemCreativeAssociation", extra={ "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", - "rpcName": "ListLineItemCreativeAssociations", + "rpcName": "UpdateLineItemCreativeAssociation", "httpRequest": http_request, "metadata": http_request["headers"], }, ) # Send the request - response = LineItemCreativeAssociationServiceRestTransport._ListLineItemCreativeAssociations._get_response( + response = LineItemCreativeAssociationServiceRestTransport._UpdateLineItemCreativeAssociation._get_response( self._host, metadata, query_params, self._session, timeout, transcoded_request, + body, ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -641,17 +2360,19 @@ def __call__( raise core_exceptions.from_http_response(response) # Return the response - resp = line_item_creative_association_service.ListLineItemCreativeAssociationsResponse() - pb_resp = line_item_creative_association_service.ListLineItemCreativeAssociationsResponse.pb( - resp + resp = line_item_creative_association_messages.LineItemCreativeAssociation() + pb_resp = ( + line_item_creative_association_messages.LineItemCreativeAssociation.pb( + resp + ) ) json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_line_item_creative_associations(resp) + resp = self._interceptor.post_update_line_item_creative_association(resp) response_metadata = [(k, str(v)) for k, v in response.headers.items()] resp, _ = ( - self._interceptor.post_list_line_item_creative_associations_with_metadata( + self._interceptor.post_update_line_item_creative_association_with_metadata( resp, response_metadata ) ) @@ -659,7 +2380,7 @@ def __call__( logging.DEBUG ): # pragma: NO COVER try: - response_payload = line_item_creative_association_service.ListLineItemCreativeAssociationsResponse.to_json( + response_payload = line_item_creative_association_messages.LineItemCreativeAssociation.to_json( response ) except: @@ -670,16 +2391,106 @@ def __call__( "status": response.status_code, } _LOGGER.debug( - "Received response for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.list_line_item_creative_associations", + "Received response for google.ads.admanager_v1.LineItemCreativeAssociationServiceClient.update_line_item_creative_association", extra={ "serviceName": "google.ads.admanager.v1.LineItemCreativeAssociationService", - "rpcName": "ListLineItemCreativeAssociations", + "rpcName": "UpdateLineItemCreativeAssociation", "metadata": http_response["headers"], "httpResponse": http_response, }, ) return resp + @property + def batch_activate_line_item_creative_associations( + self, + ) -> Callable[ + [ + line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsRequest + ], + line_item_creative_association_service.BatchActivateLineItemCreativeAssociationsResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._BatchActivateLineItemCreativeAssociations( + self._session, self._host, self._interceptor + ) # type: ignore + + @property + def batch_create_line_item_creative_associations( + self, + ) -> Callable[ + [ + line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsRequest + ], + line_item_creative_association_service.BatchCreateLineItemCreativeAssociationsResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._BatchCreateLineItemCreativeAssociations( + self._session, self._host, self._interceptor + ) # type: ignore + + @property + def batch_deactivate_line_item_creative_associations( + self, + ) -> Callable[ + [ + line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsRequest + ], + line_item_creative_association_service.BatchDeactivateLineItemCreativeAssociationsResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._BatchDeactivateLineItemCreativeAssociations( + self._session, self._host, self._interceptor + ) # type: ignore + + @property + def batch_delete_line_item_creative_associations( + self, + ) -> Callable[ + [ + line_item_creative_association_service.BatchDeleteLineItemCreativeAssociationsRequest + ], + empty_pb2.Empty, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._BatchDeleteLineItemCreativeAssociations( + self._session, self._host, self._interceptor + ) # type: ignore + + @property + def batch_update_line_item_creative_associations( + self, + ) -> Callable[ + [ + line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsRequest + ], + line_item_creative_association_service.BatchUpdateLineItemCreativeAssociationsResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._BatchUpdateLineItemCreativeAssociations( + self._session, self._host, self._interceptor + ) # type: ignore + + @property + def create_line_item_creative_association( + self, + ) -> Callable[ + [ + line_item_creative_association_service.CreateLineItemCreativeAssociationRequest + ], + line_item_creative_association_messages.LineItemCreativeAssociation, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._CreateLineItemCreativeAssociation( + self._session, self._host, self._interceptor + ) # type: ignore + @property def get_line_item_creative_association( self, @@ -708,6 +2519,36 @@ def list_line_item_creative_associations( self._session, self._host, self._interceptor ) # type: ignore + @property + def preview_line_item_creative_association( + self, + ) -> Callable[ + [ + line_item_creative_association_service.PreviewLineItemCreativeAssociationRequest + ], + line_item_creative_association_service.PreviewLineItemCreativeAssociationResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._PreviewLineItemCreativeAssociation( + self._session, self._host, self._interceptor + ) # type: ignore + + @property + def update_line_item_creative_association( + self, + ) -> Callable[ + [ + line_item_creative_association_service.UpdateLineItemCreativeAssociationRequest + ], + line_item_creative_association_messages.LineItemCreativeAssociation, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateLineItemCreativeAssociation( + self._session, self._host, self._interceptor + ) # type: ignore + @property def cancel_operation(self): return self._CancelOperation(self._session, self._host, self._interceptor) # type: ignore diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_creative_association_service/transports/rest_base.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_creative_association_service/transports/rest_base.py index 549deaf8c045..5acc03ba86a6 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_creative_association_service/transports/rest_base.py +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_creative_association_service/transports/rest_base.py @@ -17,6 +17,7 @@ import re from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union +import google.protobuf.empty_pb2 as empty_pb2 # type: ignore from google.api_core import gapic_v1, path_template from google.longrunning import operations_pb2 # type: ignore from google.protobuf import json_format @@ -93,6 +94,108 @@ def __init__( api_audience=api_audience, ) + class _BaseBatchActivateLineItemCreativeAssociations: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{parent=networks/*/lineItems/*}/creatives:batchActivate", + "body": "*", + }, + ] + return http_options + + class _BaseBatchCreateLineItemCreativeAssociations: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{parent=networks/*/lineItems/*}/creatives:batchCreate", + "body": "*", + }, + ] + return http_options + + class _BaseBatchDeactivateLineItemCreativeAssociations: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{parent=networks/*/lineItems/*}/creatives:batchDeactivate", + "body": "*", + }, + ] + return http_options + + class _BaseBatchDeleteLineItemCreativeAssociations: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{parent=networks/*/lineItems/*}/creatives:batchDelete", + "body": "*", + }, + ] + return http_options + + class _BaseBatchUpdateLineItemCreativeAssociations: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{parent=networks/*/lineItems/*}/creatives:batchUpdate", + "body": "*", + }, + ] + return http_options + + class _BaseCreateLineItemCreativeAssociation: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{parent=networks/*/lineItems/*}/creatives", + "body": "line_item_creative_association", + }, + ] + return http_options + class _BaseGetLineItemCreativeAssociation: def __hash__(self): # pragma: NO COVER return NotImplementedError("__hash__ must be implemented.") @@ -125,6 +228,40 @@ def _get_http_options(): ] return http_options + class _BasePreviewLineItemCreativeAssociation: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{name=networks/*/lineItems/*/creatives/*}:preview", + "body": "*", + }, + ] + return http_options + + class _BaseUpdateLineItemCreativeAssociation: + def __hash__(self): # pragma: NO COVER + return NotImplementedError("__hash__ must be implemented.") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @staticmethod + def _get_http_options(): + http_options: List[Dict[str, str]] = [ + { + "method": "patch", + "uri": "/v1/{line_item_creative_association.name=networks/*/lineItems/*/creatives/*}", + "body": "line_item_creative_association", + }, + ] + return http_options + class _BaseCancelOperation: def __hash__(self): # pragma: NO COVER return NotImplementedError("__hash__ must be implemented.") diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_service/client.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_service/client.py index 8706f0ca3218..cbb152461cf7 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_service/client.py +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/line_item_service/client.py @@ -196,6 +196,42 @@ def transport(self) -> LineItemServiceTransport: """ return self._transport + @staticmethod + def ad_category_path( + network_code: str, + ad_category: str, + ) -> str: + """Returns a fully-qualified ad_category string.""" + return "networks/{network_code}/adCategories/{ad_category}".format( + network_code=network_code, + ad_category=ad_category, + ) + + @staticmethod + def parse_ad_category_path(path: str) -> Dict[str, str]: + """Parses a ad_category path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/adCategories/(?P.+?)$", path + ) + return m.groupdict() if m else {} + + @staticmethod + def ad_spot_path( + network_code: str, + ad_spot: str, + ) -> str: + """Returns a fully-qualified ad_spot string.""" + return "networks/{network_code}/adSpots/{ad_spot}".format( + network_code=network_code, + ad_spot=ad_spot, + ) + + @staticmethod + def parse_ad_spot_path(path: str) -> Dict[str, str]: + """Parses a ad_spot path into its component segments.""" + m = re.match(r"^networks/(?P.+?)/adSpots/(?P.+?)$", path) + return m.groupdict() if m else {} + @staticmethod def ad_unit_path( network_code: str, @@ -213,6 +249,26 @@ def parse_ad_unit_path(path: str) -> Dict[str, str]: m = re.match(r"^networks/(?P.+?)/adUnits/(?P.+?)$", path) return m.groupdict() if m else {} + @staticmethod + def allocation_delivery_profile_path( + network_code: str, + allocation_delivery_profile: str, + ) -> str: + """Returns a fully-qualified allocation_delivery_profile string.""" + return "networks/{network_code}/allocationDeliveryProfiles/{allocation_delivery_profile}".format( + network_code=network_code, + allocation_delivery_profile=allocation_delivery_profile, + ) + + @staticmethod + def parse_allocation_delivery_profile_path(path: str) -> Dict[str, str]: + """Parses a allocation_delivery_profile path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/allocationDeliveryProfiles/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def application_path( network_code: str, @@ -387,6 +443,26 @@ def parse_content_bundle_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def content_label_path( + network_code: str, + content_label: str, + ) -> str: + """Returns a fully-qualified content_label string.""" + return "networks/{network_code}/contentLabels/{content_label}".format( + network_code=network_code, + content_label=content_label, + ) + + @staticmethod + def parse_content_label_path(path: str) -> Dict[str, str]: + """Parses a content_label path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/contentLabels/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def custom_field_path( network_code: str, @@ -529,6 +605,26 @@ def parse_geo_target_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def inventory_url_path( + network_code: str, + inventory_url: str, + ) -> str: + """Returns a fully-qualified inventory_url string.""" + return "networks/{network_code}/inventoryUrls/{inventory_url}".format( + network_code=network_code, + inventory_url=inventory_url, + ) + + @staticmethod + def parse_inventory_url_path(path: str) -> Dict[str, str]: + """Parses a inventory_url path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/inventoryUrls/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def label_path( network_code: str, @@ -716,6 +812,26 @@ def parse_placement_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def taxonomy_category_path( + network_code: str, + taxonomy_category: str, + ) -> str: + """Returns a fully-qualified taxonomy_category string.""" + return "networks/{network_code}/taxonomyCategories/{taxonomy_category}".format( + network_code=network_code, + taxonomy_category=taxonomy_category, + ) + + @staticmethod + def parse_taxonomy_category_path(path: str) -> Dict[str, str]: + """Parses a taxonomy_category path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/taxonomyCategories/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def common_billing_account_path( billing_account: str, diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/native_style_service/client.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/native_style_service/client.py index 79796ea32b78..e40a0a2b52c6 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/services/native_style_service/client.py +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/native_style_service/client.py @@ -174,6 +174,42 @@ def transport(self) -> NativeStyleServiceTransport: """ return self._transport + @staticmethod + def ad_category_path( + network_code: str, + ad_category: str, + ) -> str: + """Returns a fully-qualified ad_category string.""" + return "networks/{network_code}/adCategories/{ad_category}".format( + network_code=network_code, + ad_category=ad_category, + ) + + @staticmethod + def parse_ad_category_path(path: str) -> Dict[str, str]: + """Parses a ad_category path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/adCategories/(?P.+?)$", path + ) + return m.groupdict() if m else {} + + @staticmethod + def ad_spot_path( + network_code: str, + ad_spot: str, + ) -> str: + """Returns a fully-qualified ad_spot string.""" + return "networks/{network_code}/adSpots/{ad_spot}".format( + network_code=network_code, + ad_spot=ad_spot, + ) + + @staticmethod + def parse_ad_spot_path(path: str) -> Dict[str, str]: + """Parses a ad_spot path into its component segments.""" + m = re.match(r"^networks/(?P.+?)/adSpots/(?P.+?)$", path) + return m.groupdict() if m else {} + @staticmethod def ad_unit_path( network_code: str, @@ -346,6 +382,26 @@ def parse_content_bundle_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def content_label_path( + network_code: str, + content_label: str, + ) -> str: + """Returns a fully-qualified content_label string.""" + return "networks/{network_code}/contentLabels/{content_label}".format( + network_code=network_code, + content_label=content_label, + ) + + @staticmethod + def parse_content_label_path(path: str) -> Dict[str, str]: + """Parses a content_label path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/contentLabels/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def creative_template_path( network_code: str, @@ -489,6 +545,26 @@ def parse_geo_target_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def inventory_url_path( + network_code: str, + inventory_url: str, + ) -> str: + """Returns a fully-qualified inventory_url string.""" + return "networks/{network_code}/inventoryUrls/{inventory_url}".format( + network_code=network_code, + inventory_url=inventory_url, + ) + + @staticmethod + def parse_inventory_url_path(path: str) -> Dict[str, str]: + """Parses a inventory_url path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/inventoryUrls/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def mobile_carrier_path( network_code: str, @@ -642,6 +718,26 @@ def parse_placement_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def taxonomy_category_path( + network_code: str, + taxonomy_category: str, + ) -> str: + """Returns a fully-qualified taxonomy_category string.""" + return "networks/{network_code}/taxonomyCategories/{taxonomy_category}".format( + network_code=network_code, + taxonomy_category=taxonomy_category, + ) + + @staticmethod + def parse_taxonomy_category_path(path: str) -> Dict[str, str]: + """Parses a taxonomy_category path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/taxonomyCategories/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def common_billing_account_path( billing_account: str, diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/private_auction_deal_service/client.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/private_auction_deal_service/client.py index b5763aad0f93..185a3cf37477 100644 --- a/packages/google-ads-admanager/google/ads/admanager_v1/services/private_auction_deal_service/client.py +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/private_auction_deal_service/client.py @@ -178,6 +178,42 @@ def transport(self) -> PrivateAuctionDealServiceTransport: """ return self._transport + @staticmethod + def ad_category_path( + network_code: str, + ad_category: str, + ) -> str: + """Returns a fully-qualified ad_category string.""" + return "networks/{network_code}/adCategories/{ad_category}".format( + network_code=network_code, + ad_category=ad_category, + ) + + @staticmethod + def parse_ad_category_path(path: str) -> Dict[str, str]: + """Parses a ad_category path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/adCategories/(?P.+?)$", path + ) + return m.groupdict() if m else {} + + @staticmethod + def ad_spot_path( + network_code: str, + ad_spot: str, + ) -> str: + """Returns a fully-qualified ad_spot string.""" + return "networks/{network_code}/adSpots/{ad_spot}".format( + network_code=network_code, + ad_spot=ad_spot, + ) + + @staticmethod + def parse_ad_spot_path(path: str) -> Dict[str, str]: + """Parses a ad_spot path into its component segments.""" + m = re.match(r"^networks/(?P.+?)/adSpots/(?P.+?)$", path) + return m.groupdict() if m else {} + @staticmethod def ad_unit_path( network_code: str, @@ -350,6 +386,26 @@ def parse_content_bundle_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def content_label_path( + network_code: str, + content_label: str, + ) -> str: + """Returns a fully-qualified content_label string.""" + return "networks/{network_code}/contentLabels/{content_label}".format( + network_code=network_code, + content_label=content_label, + ) + + @staticmethod + def parse_content_label_path(path: str) -> Dict[str, str]: + """Parses a content_label path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/contentLabels/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def custom_targeting_key_path( network_code: str, @@ -473,6 +529,26 @@ def parse_geo_target_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def inventory_url_path( + network_code: str, + inventory_url: str, + ) -> str: + """Returns a fully-qualified inventory_url string.""" + return "networks/{network_code}/inventoryUrls/{inventory_url}".format( + network_code=network_code, + inventory_url=inventory_url, + ) + + @staticmethod + def parse_inventory_url_path(path: str) -> Dict[str, str]: + """Parses a inventory_url path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/inventoryUrls/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def mobile_carrier_path( network_code: str, @@ -629,6 +705,26 @@ def parse_private_auction_deal_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def taxonomy_category_path( + network_code: str, + taxonomy_category: str, + ) -> str: + """Returns a fully-qualified taxonomy_category string.""" + return "networks/{network_code}/taxonomyCategories/{taxonomy_category}".format( + network_code=network_code, + taxonomy_category=taxonomy_category, + ) + + @staticmethod + def parse_taxonomy_category_path(path: str) -> Dict[str, str]: + """Parses a taxonomy_category path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/taxonomyCategories/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def common_billing_account_path( billing_account: str, diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/proposal_service/__init__.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/proposal_service/__init__.py new file mode 100644 index 000000000000..a4727ef00a9a --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/proposal_service/__init__.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +from .client import ProposalServiceClient + +__all__ = ("ProposalServiceClient",) diff --git a/packages/google-ads-admanager/google/ads/admanager_v1/services/proposal_service/client.py b/packages/google-ads-admanager/google/ads/admanager_v1/services/proposal_service/client.py new file mode 100644 index 000000000000..bfec79f664d8 --- /dev/null +++ b/packages/google-ads-admanager/google/ads/admanager_v1/services/proposal_service/client.py @@ -0,0 +1,3590 @@ +# -*- coding: utf-8 -*- +# Copyright 2026 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 +# +# 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. +# +import json +import logging as std_logging +import os +import re +import warnings +from collections import OrderedDict +from http import HTTPStatus +from typing import ( + Callable, + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, + cast, +) + +import google.protobuf +from google.api_core import client_options as client_options_lib +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.exceptions import MutualTLSChannelError # type: ignore +from google.auth.transport import mtls # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.ads.admanager_v1 import gapic_version as package_version +from google.ads.admanager_v1._compat import ( + get_api_endpoint, + get_default_mtls_endpoint, + get_universe_domain, + read_environment_variables, + should_use_client_cert, +) + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object, None] # type: ignore + +try: + from google.api_core import client_logging # type: ignore + + CLIENT_LOGGING_SUPPORTED = True # pragma: NO COVER +except ImportError: # pragma: NO COVER + CLIENT_LOGGING_SUPPORTED = False + +_LOGGER = std_logging.getLogger(__name__) + +import google.protobuf.field_mask_pb2 as field_mask_pb2 # type: ignore +import google.protobuf.timestamp_pb2 as timestamp_pb2 # type: ignore +from google.longrunning import operations_pb2 # type: ignore + +from google.ads.admanager_v1.services.proposal_service import pagers +from google.ads.admanager_v1.types import ( + applied_label, + custom_field_value, + proposal_messages, + proposal_service, + supply_path_type_enum, +) + +from .transports.base import DEFAULT_CLIENT_INFO, ProposalServiceTransport +from .transports.rest import ProposalServiceRestTransport + + +class ProposalServiceClientMeta(type): + """Metaclass for the ProposalService client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + + _transport_registry = OrderedDict() # type: Dict[str, Type[ProposalServiceTransport]] + _transport_registry["rest"] = ProposalServiceRestTransport + + def get_transport_class( + cls, + label: Optional[str] = None, + ) -> Type[ProposalServiceTransport]: + """Returns an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class ProposalServiceClient(metaclass=ProposalServiceClientMeta): + """Provides methods for handling ``Proposal`` objects.""" + + # Note: DEFAULT_ENDPOINT is deprecated. Use _DEFAULT_ENDPOINT_TEMPLATE instead. + DEFAULT_ENDPOINT = "admanager.googleapis.com" + DEFAULT_MTLS_ENDPOINT = get_default_mtls_endpoint(DEFAULT_ENDPOINT) + + _DEFAULT_ENDPOINT_TEMPLATE = "admanager.{UNIVERSE_DOMAIN}" + _DEFAULT_UNIVERSE = "googleapis.com" + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + ProposalServiceClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + @classmethod + def from_service_account_file(cls, filename: str, *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: + ProposalServiceClient: 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 + + @property + def transport(self) -> ProposalServiceTransport: + """Returns the transport used by the client instance. + + Returns: + ProposalServiceTransport: The transport used by the client + instance. + """ + return self._transport + + @staticmethod + def ad_category_path( + network_code: str, + ad_category: str, + ) -> str: + """Returns a fully-qualified ad_category string.""" + return "networks/{network_code}/adCategories/{ad_category}".format( + network_code=network_code, + ad_category=ad_category, + ) + + @staticmethod + def parse_ad_category_path(path: str) -> Dict[str, str]: + """Parses a ad_category path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/adCategories/(?P.+?)$", path + ) + return m.groupdict() if m else {} + + @staticmethod + def ad_spot_path( + network_code: str, + ad_spot: str, + ) -> str: + """Returns a fully-qualified ad_spot string.""" + return "networks/{network_code}/adSpots/{ad_spot}".format( + network_code=network_code, + ad_spot=ad_spot, + ) + + @staticmethod + def parse_ad_spot_path(path: str) -> Dict[str, str]: + """Parses a ad_spot path into its component segments.""" + m = re.match(r"^networks/(?P.+?)/adSpots/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def ad_unit_path( + network_code: str, + ad_unit: str, + ) -> str: + """Returns a fully-qualified ad_unit string.""" + return "networks/{network_code}/adUnits/{ad_unit}".format( + network_code=network_code, + ad_unit=ad_unit, + ) + + @staticmethod + def parse_ad_unit_path(path: str) -> Dict[str, str]: + """Parses a ad_unit path into its component segments.""" + m = re.match(r"^networks/(?P.+?)/adUnits/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def application_path( + network_code: str, + application: str, + ) -> str: + """Returns a fully-qualified application string.""" + return "networks/{network_code}/applications/{application}".format( + network_code=network_code, + application=application, + ) + + @staticmethod + def parse_application_path(path: str) -> Dict[str, str]: + """Parses a application path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/applications/(?P.+?)$", path + ) + return m.groupdict() if m else {} + + @staticmethod + def audience_segment_path( + network_code: str, + audience_segment: str, + ) -> str: + """Returns a fully-qualified audience_segment string.""" + return "networks/{network_code}/audienceSegments/{audience_segment}".format( + network_code=network_code, + audience_segment=audience_segment, + ) + + @staticmethod + def parse_audience_segment_path(path: str) -> Dict[str, str]: + """Parses a audience_segment path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/audienceSegments/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def bandwidth_group_path( + network_code: str, + bandwidth_group: str, + ) -> str: + """Returns a fully-qualified bandwidth_group string.""" + return "networks/{network_code}/bandwidthGroups/{bandwidth_group}".format( + network_code=network_code, + bandwidth_group=bandwidth_group, + ) + + @staticmethod + def parse_bandwidth_group_path(path: str) -> Dict[str, str]: + """Parses a bandwidth_group path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/bandwidthGroups/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def browser_path( + network_code: str, + browser: str, + ) -> str: + """Returns a fully-qualified browser string.""" + return "networks/{network_code}/browsers/{browser}".format( + network_code=network_code, + browser=browser, + ) + + @staticmethod + def parse_browser_path(path: str) -> Dict[str, str]: + """Parses a browser path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/browsers/(?P.+?)$", path + ) + return m.groupdict() if m else {} + + @staticmethod + def browser_language_path( + network_code: str, + browser_language: str, + ) -> str: + """Returns a fully-qualified browser_language string.""" + return "networks/{network_code}/browserLanguages/{browser_language}".format( + network_code=network_code, + browser_language=browser_language, + ) + + @staticmethod + def parse_browser_language_path(path: str) -> Dict[str, str]: + """Parses a browser_language path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/browserLanguages/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def cms_metadata_value_path( + network_code: str, + cms_metadata_value: str, + ) -> str: + """Returns a fully-qualified cms_metadata_value string.""" + return "networks/{network_code}/cmsMetadataValues/{cms_metadata_value}".format( + network_code=network_code, + cms_metadata_value=cms_metadata_value, + ) + + @staticmethod + def parse_cms_metadata_value_path(path: str) -> Dict[str, str]: + """Parses a cms_metadata_value path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/cmsMetadataValues/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def company_path( + network_code: str, + company: str, + ) -> str: + """Returns a fully-qualified company string.""" + return "networks/{network_code}/companies/{company}".format( + network_code=network_code, + company=company, + ) + + @staticmethod + def parse_company_path(path: str) -> Dict[str, str]: + """Parses a company path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/companies/(?P.+?)$", path + ) + return m.groupdict() if m else {} + + @staticmethod + def contact_path( + network_code: str, + contact: str, + ) -> str: + """Returns a fully-qualified contact string.""" + return "networks/{network_code}/contacts/{contact}".format( + network_code=network_code, + contact=contact, + ) + + @staticmethod + def parse_contact_path(path: str) -> Dict[str, str]: + """Parses a contact path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/contacts/(?P.+?)$", path + ) + return m.groupdict() if m else {} + + @staticmethod + def content_path( + network_code: str, + content: str, + ) -> str: + """Returns a fully-qualified content string.""" + return "networks/{network_code}/content/{content}".format( + network_code=network_code, + content=content, + ) + + @staticmethod + def parse_content_path(path: str) -> Dict[str, str]: + """Parses a content path into its component segments.""" + m = re.match(r"^networks/(?P.+?)/content/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def content_bundle_path( + network_code: str, + content_bundle: str, + ) -> str: + """Returns a fully-qualified content_bundle string.""" + return "networks/{network_code}/contentBundles/{content_bundle}".format( + network_code=network_code, + content_bundle=content_bundle, + ) + + @staticmethod + def parse_content_bundle_path(path: str) -> Dict[str, str]: + """Parses a content_bundle path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/contentBundles/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def content_label_path( + network_code: str, + content_label: str, + ) -> str: + """Returns a fully-qualified content_label string.""" + return "networks/{network_code}/contentLabels/{content_label}".format( + network_code=network_code, + content_label=content_label, + ) + + @staticmethod + def parse_content_label_path(path: str) -> Dict[str, str]: + """Parses a content_label path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/contentLabels/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def custom_field_path( + network_code: str, + custom_field: str, + ) -> str: + """Returns a fully-qualified custom_field string.""" + return "networks/{network_code}/customFields/{custom_field}".format( + network_code=network_code, + custom_field=custom_field, + ) + + @staticmethod + def parse_custom_field_path(path: str) -> Dict[str, str]: + """Parses a custom_field path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/customFields/(?P.+?)$", path + ) + return m.groupdict() if m else {} + + @staticmethod + def custom_targeting_key_path( + network_code: str, + custom_targeting_key: str, + ) -> str: + """Returns a fully-qualified custom_targeting_key string.""" + return ( + "networks/{network_code}/customTargetingKeys/{custom_targeting_key}".format( + network_code=network_code, + custom_targeting_key=custom_targeting_key, + ) + ) + + @staticmethod + def parse_custom_targeting_key_path(path: str) -> Dict[str, str]: + """Parses a custom_targeting_key path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/customTargetingKeys/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def custom_targeting_value_path( + network_code: str, + custom_targeting_value: str, + ) -> str: + """Returns a fully-qualified custom_targeting_value string.""" + return "networks/{network_code}/customTargetingValues/{custom_targeting_value}".format( + network_code=network_code, + custom_targeting_value=custom_targeting_value, + ) + + @staticmethod + def parse_custom_targeting_value_path(path: str) -> Dict[str, str]: + """Parses a custom_targeting_value path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/customTargetingValues/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def device_capability_path( + network_code: str, + device_capability: str, + ) -> str: + """Returns a fully-qualified device_capability string.""" + return "networks/{network_code}/deviceCapabilities/{device_capability}".format( + network_code=network_code, + device_capability=device_capability, + ) + + @staticmethod + def parse_device_capability_path(path: str) -> Dict[str, str]: + """Parses a device_capability path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/deviceCapabilities/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def device_category_path( + network_code: str, + device_category: str, + ) -> str: + """Returns a fully-qualified device_category string.""" + return "networks/{network_code}/deviceCategories/{device_category}".format( + network_code=network_code, + device_category=device_category, + ) + + @staticmethod + def parse_device_category_path(path: str) -> Dict[str, str]: + """Parses a device_category path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/deviceCategories/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def device_manufacturer_path( + network_code: str, + device_manufacturer: str, + ) -> str: + """Returns a fully-qualified device_manufacturer string.""" + return ( + "networks/{network_code}/deviceManufacturers/{device_manufacturer}".format( + network_code=network_code, + device_manufacturer=device_manufacturer, + ) + ) + + @staticmethod + def parse_device_manufacturer_path(path: str) -> Dict[str, str]: + """Parses a device_manufacturer path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/deviceManufacturers/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def geo_target_path( + network_code: str, + geo_target: str, + ) -> str: + """Returns a fully-qualified geo_target string.""" + return "networks/{network_code}/geoTargets/{geo_target}".format( + network_code=network_code, + geo_target=geo_target, + ) + + @staticmethod + def parse_geo_target_path(path: str) -> Dict[str, str]: + """Parses a geo_target path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/geoTargets/(?P.+?)$", path + ) + return m.groupdict() if m else {} + + @staticmethod + def inventory_url_path( + network_code: str, + inventory_url: str, + ) -> str: + """Returns a fully-qualified inventory_url string.""" + return "networks/{network_code}/inventoryUrls/{inventory_url}".format( + network_code=network_code, + inventory_url=inventory_url, + ) + + @staticmethod + def parse_inventory_url_path(path: str) -> Dict[str, str]: + """Parses a inventory_url path into its component segments.""" + m = re.match( + r"^networks/(?P.+?)/inventoryUrls/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def label_path( + network_code: str, + label: str, + ) -> str: + """Returns a fully-qualified label string.""" + return "networks/{network_code}/labels/{label}".format( + network_code=network_code, + label=label, + ) + + @staticmethod + def parse_label_path(path: str) -> Dict[str, str]: + """Parses a label path into its component segments.""" + m = re.match(r"^networks/(?P.+?)/labels/(?P