googleads-dfa-reporting-samples icon indicating copy to clipboard operation
googleads-dfa-reporting-samples copied to clipboard

existing pricing period Data Truncation when adding new pricing periods to the existing placement

Open datadogcoder opened this issue 4 months ago • 1 comments

Hi Team

I am facing a existing pricing period data truncation issue when inserting a new pricing period row using DCM API.

NOTE: The github code reference link does not have placement.Patch method usage. This pricing insert is working fine when using google API explorer. What is the problem with my code? def create_pricing_period(pricing): try: return { 'startDate': pricing['pricingperiodstartdate'], 'endDate': pricing['pricingperiodenddate'], 'units': pricing['units'], 'rateOrCostNanos': int(float(pricing['rateorcostnanos']) * 1e9), 'pricingComment': pricing['pricingcomment'] } except ValueError as e: print(f"Error converting rateOrCostNanos: {e}") return None

def patch_pricing_period_to_placement(campaign_id, placement_id, site_id, new_pricing_period):
    try:
        placement = dfa_service.placements().get(profileId=profile_id, id=placement_id).execute()
        print("current placement data",placement)

        pricing_schedule = placement.get('pricingSchedule', {})
        pricing_periods = pricing_schedule.get('pricingPeriods', [])
        print("Old pricing period", pricing_periods)
        # Directly append new pricing period without validation
        #pricing_periods.append(new_pricing_period)
        print("New pricing period", new_pricing_period)

     ```

Update body aligned with provided structure

        update_body = {
            'pricingSchedule': {
                'pricingPeriods': new_pricing_period
            }
        }
            placement.update(update_body)
            updated_placement = dfa_service.placements().patch(
                profileId=profile_id,
                id=placement_id,
                body=update_body
            ).execute()
            # updated_placement = dfa_service.placements().update(
            #     profileId=profile_id,
            #     body=placement
            # ).execute()
            # get an updated copy of data - test this on monday ???
            # placement.update(updated_placement)
            print(f"New pricing period added successfully: {updated_placement}")

        except Exception as e:
            print(f"An error occurred while patching pricing period: {e}")

    print(pricing_schedule_df.columns)
    for _, pricing in pricing_schedule_df.iterrows():
        print(pricing)
        campaign_id = pricing['campaignid']
        placement_id = pricing['placementid']
        site_id = pricing['siteid']
        print(f"Processing CampaignID: {campaign_id}, PlacementID: {placement_id}, SiteID: {site_id}")

        matching_campaign = find_matching_campaign_placement(campaign_id, placement_id, site_id)

        if matching_campaign is not None:
            new_pricing_period = create_pricing_period(pricing)

            if new_pricing_period:
                patch_pricing_period_to_placement(campaign_id, placement_id, site_id, new_pricing_period)
                # placement = dfa_service.placements().get(profileId=profile_id, id=placement_id).execute()

        else:
            print(f"No matching campaign found for CampaignID: {campaign_id}, PlacementID: {placement_id}, SiteID: {site_id}")

datadogcoder avatar Oct 09 '24 21:10 datadogcoder