def associate_with_creative(lineitem, creative): dfp_association_service = DfpService("LineItemCreativeAssociationService") lineitem_id = lineitem["id"] creative_id = creative["id"] values = [{ "key": "lineItemId", "value": { "xsi_type": "NumberValue", "value": lineitem_id, }, }, { "key": "creativeId", "value": { "xsi_type": "NumberValue", "value": creative_id, }, }] query = "WHERE lineItemId = :lineItemId AND creativeId = :creativeId" statement = dfp.FilterStatement(query, values, 1) response = dfp_association_service.execute( "getLineItemCreativeAssociationsByStatement", statement.ToStatement()) if ("results" in response and len(response["results"])): association = response["results"][0] else: associations = dfp_association_service.execute( "createLineItemCreativeAssociations", [{ "lineItemId": lineitem_id, "creativeId": creative_id, }]) return associations[0]
def get_order(user): dfp_order_service = DfpService("OrderService") advertiser = advertisers_service.upsert_advertiser(user) advertiser_id = advertiser.id if not advertiser_id: return None values = [{ "key": "advertiserId", "value": { "xsi_type": "NumberValue", "value": advertiser_id, }, }, { "key": "traffickerId", "value": { "xsi_type": "NumberValue", "value": g.dfp_selfserve_trafficker_id, }, }] query = "WHERE advertiserId = :advertiserId AND traffickerId = :traffickerId" statement = dfp.FilterStatement(query, values, 1) response = dfp_order_service.execute( "getOrdersByStatement", statement.ToStatement()) if ("results" in response and len(response["results"])): return response["results"][0] else: return None
def get_order(user): dfp_order_service = DfpService("OrderService") advertiser = advertisers_service.upsert_advertiser(user) advertiser_id = advertiser.id if not advertiser_id: return None values = [{ "key": "advertiserId", "value": { "xsi_type": "NumberValue", "value": advertiser_id, }, }, { "key": "traffickerId", "value": { "xsi_type": "NumberValue", "value": g.dfp_selfserve_trafficker_id, }, }] query = "WHERE advertiserId = :advertiserId AND traffickerId = :traffickerId" statement = dfp.FilterStatement(query, values, 1) response = dfp_order_service.execute("getOrdersByStatement", statement.ToStatement()) if ("results" in response and len(response["results"])): return response["results"][0] else: return None
def _perform_lineitem_action(action, query): dfp_lineitem_service = DfpService("LineItemService") statement = dfp.FilterStatement(query) response = dfp_lineitem_service.execute("performLineItemAction", {"xsi_type": action}, statement.ToStatement()) return response
def bulk_upsert(users): inserts = filter( lambda user: not getattr(user, "dfp_advertiser_id", False), users) existing = filter(lambda user: getattr(user, "dfp_advertiser_id", False), users) dfp_company_service = DfpService("CompanyService") companies = [] if inserts: companies += dfp_company_service.execute( "createCompanies", [{ "name": user.name, "type": "ADVERTISER", "externalId": user._fullname, } for user in inserts]) if existing: statement = dfp.FilterStatement( "WHERE externalId IN (%s)" % ", ".join(["'" + user._fullname + "'" for user in existing])) while True: response = dfp_company_service.execute( "getCompaniesByStatement", statement.ToStatement(), ) if "results" in response: companies += response["results"] statement.offset += dfp.SUGGESTED_PAGE_LIMIT else: break companies_by_fullname = { company.externalId: company for company in companies } for user in users: company = companies_by_fullname[user._fullname] user.dfp_advertiser_id = company.id user._commit() return companies
def _perform_lineitem_action(action, query): dfp_lineitem_service = DfpService("LineItemService") statement = dfp.FilterStatement(query) response = dfp_lineitem_service.execute( "performLineItemAction", {"xsi_type": action}, statement.ToStatement()) return response
def bulk_upsert(users): inserts = filter(lambda user: not getattr(user, "dfp_advertiser_id", False), users) existing = filter(lambda user: getattr(user, "dfp_advertiser_id", False), users) dfp_company_service = DfpService("CompanyService") companies = [] if inserts: companies += dfp_company_service.execute("createCompanies", [{ "name": user.name, "type": "ADVERTISER", "externalId": user._fullname, } for user in inserts]) if existing: statement = dfp.FilterStatement( "WHERE externalId IN (%s)" % ", ".join(["'" + user._fullname + "'" for user in existing])) while True: response = dfp_company_service.execute( "getCompaniesByStatement", statement.ToStatement(), ) if "results" in response: companies += response["results"] statement.offset += dfp.SUGGESTED_PAGE_LIMIT else: break companies_by_fullname = { company.externalId: company for company in companies} for user in users: company = companies_by_fullname[user._fullname] user.dfp_advertiser_id = company.id user._commit() return companies
def create_lineitem(user, campaign): dfp_lineitem_service = DfpService("LineItemService") order = orders_service.upsert_order(user) try: lineitem = _campaign_to_lineitem(campaign, order=order) except ValueError as e: g.log.debug("unable to convert campaign to valid line item for campaign %s" % campaign._fullname) raise e lineitems = dfp_lineitem_service.execute("createLineItems", [lineitem]) return lineitems[0]
def create_lineitem(user, campaign): dfp_lineitem_service = DfpService("LineItemService") order = orders_service.upsert_order(user) try: lineitem = _campaign_to_lineitem(campaign, order=order) except ValueError as e: g.log.debug( "unable to convert campaign to valid line item for campaign %s" % campaign._fullname) raise e lineitems = dfp_lineitem_service.execute("createLineItems", [lineitem]) return lineitems[0]
def get_placement_by_name(name): dfp_placement_service = DfpService("PlacementService") values = [{"key": "name", "value": {"xsi_type": "TextValue", "value": name}}] query = "WHERE name = :name" statement = dfp.FilterStatement(query, values, 1) response = dfp_placement_service.execute("getPlacementsByStatement", statement.ToStatement()) if "results" in response and len(response["results"]): return response["results"][0] else: return None
def create_advertiser(user): dfp_company_service = DfpService("CompanyService") companies = dfp_company_service.execute("createCompanies", [{ "name": user.name, "type": "ADVERTISER", "externalId": user._fullname, }]) advertiser = companies[0] user.dfp_advertiser_id = advertiser["id"] user._commit() return advertiser
def create_creative(user, link): dfp_creative_service = DfpService("CreativeService") advertiser = advertisers_service.upsert_advertiser(user) creative = _link_to_creative(link, advertiser=advertiser) response = dfp_creative_service.execute("createCreatives", [creative]) if (response and len(response)): creative = response[0] link.dfp_creative_id = creative.id link._commit() return creative else: return None
def upsert_lineitem(user, campaign): dfp_lineitem_service = DfpService("LineItemService") lineitem = get_lineitem(campaign) if not lineitem: return create_lineitem(user, campaign) if lineitem["isArchived"]: raise ValueError("cannot update archived lineitem (lid: %s, cid: %s)" % (lineitem["id"], campaign._id)) updated = _campaign_to_lineitem(campaign, existing=lineitem) lineitems = dfp_lineitem_service.execute("updateLineItems", [updated]) return lineitems[0]
def create_order(user): dfp_order_service = DfpService("OrderService") advertiser_id = getattr(user, "dfp_advertiser_id", None) if not advertiser_id: raise ValueError("user doesn't have a dfp advertiser account: %s" % user._id) orders = [{ "name": "%s-selfserve" % user.name, "advertiserId": advertiser_id, "salespersonId": g.dfp_selfserve_salesperson_id, "traffickerId": g.dfp_selfserve_trafficker_id, "externalOrderId": user._id, }] orders = dfp_order_service.execute("createOrders", orders) return orders[0]
def by_id(creative_id): dfp_creative_service = DfpService("CreativeService") values = [{ "key": "id", "value": { "xsi_type": "NumberValue", "value": creative_id, }, }] query = "WHERE id = :id" statement = dfp.FilterStatement(query, values, 1).ToStatement() response = dfp_creative_service.execute("getCreativesByStatement", statement) if ("results" in response and len(response["results"])): return response["results"][0] else: return None
def get_lineitem(campaign): dfp_lineitem_service = DfpService("LineItemService") values = [{ "key": "externalId", "value": { "xsi_type": "TextValue", "value": campaign._fullname, }, }] query = "WHERE externalId = :externalId" statement = dfp.FilterStatement(query, values, 1) response = dfp_lineitem_service.execute("getLineItemsByStatement", statement.ToStatement()) if ("results" in response and len(response["results"])): return response["results"][0] else: return None
def get_lineitem(campaign): dfp_lineitem_service = DfpService("LineItemService") values = [{ "key": "externalId", "value": { "xsi_type": "TextValue", "value": campaign._fullname, }, }] query = "WHERE externalId = :externalId" statement = dfp.FilterStatement(query, values, 1) response = dfp_lineitem_service.execute( "getLineItemsByStatement", statement.ToStatement()) if ("results" in response and len(response["results"])): return response["results"][0] else: return None
def get_placement_by_name(name): dfp_placement_service = DfpService("PlacementService") values = [{ "key": "name", "value": { "xsi_type": "TextValue", "value": name, }, }] query = "WHERE name = :name" statement = dfp.FilterStatement(query, values, 1) response = dfp_placement_service.execute("getPlacementsByStatement", statement.ToStatement()) if ("results" in response and len(response["results"])): return response["results"][0] else: return None
def get_template_by_name(name): dfp_template_service = DfpService("CreativeTemplateService") values = [{ "key": "name", "value": { "xsi_type": "TextValue", "value": name, }, }] query = "WHERE name = :name" statement = dfp.FilterStatement(query, values, 1) response = dfp_template_service.execute( "getCreativeTemplatesByStatement", statement.ToStatement()) if ("results" in response and len(response["results"])): return response["results"][0] else: return None
def get_advertiser(user): advertiser_id = getattr(user, "dfp_advertiser_id", None) if not advertiser_id: return None values = [{ "key": "id", "value": { "xsi_type": "NumberValue", "value": advertiser_id, }, }] dfp_company_service = DfpService("CompanyService") statement = dfp.FilterStatement("WHERE id = :id", values, 1).ToStatement() response = dfp_company_service.execute("getCompaniesByStatement", statement) if "results" in response and len(response["results"]): return response["results"][0] else: return None
def bulk_upsert(links): updates = filter(lambda user: getattr(user, "dfp_creative_id", False), links) inserts = filter(lambda user: not getattr(user, "dfp_creative_id", False), links) dfp_creative_service = DfpService("CreativeService") creatives = [] if updates: existing_creatives = {} statement = dfp.FilterStatement( "WHERE id IN (%s)" % ", ".join([str(link.dfp_creative_id) for link in updates])) while True: response = dfp_creative_service.execute( "getCreativesByStatement", statement.ToStatement(), ) if "results" in response: for creative in response["results"]: existing_creatives[creative.id] = creative statement.offset += dfp.SUGGESTED_PAGE_LIMIT else: break updated = dfp_creative_service.execute("updateCreatives", [ _link_to_creative( link=link, existing=existing_creatives[link.dfp_creative_id], ) for link in updates]) creatives += updated if inserts: authors = Account._byID([link.author_id for link in inserts], return_dict=False) advertisers = advertisers_service.bulk_upsert(authors) advertisers_by_author = { advertiser.externalId: advertiser for advertiser in advertisers} inserted = dfp_creative_service.execute("createCreatives", [ _link_to_creative( link=link, advertiser=advertisers_by_author[ Account._fullname_from_id36(to36(link.author_id)) ], ) for link in inserts]) creatives += inserted creatives_by_fullname = { utils.get_template_variable(creative, "link_id"): creative for creative in creatives} for link in links: creative = creatives_by_fullname[link._fullname] link.dfp_creative_id = creative.id link._commit() return creatives
def update_creative(link, creative): dfp_creative_service = DfpService("CreativeService") updated = _link_to_creative(link, existing=creative) creatives = dfp_creative_service.execute("updateCreatives", [updated]) return creatives[0]
def bulk_upsert(links): updates = filter(lambda user: getattr(user, "dfp_creative_id", False), links) inserts = filter(lambda user: not getattr(user, "dfp_creative_id", False), links) dfp_creative_service = DfpService("CreativeService") creatives = [] if updates: existing_creatives = {} statement = dfp.FilterStatement( "WHERE id IN (%s)" % ", ".join([str(link.dfp_creative_id) for link in updates])) while True: response = dfp_creative_service.execute( "getCreativesByStatement", statement.ToStatement(), ) if "results" in response: for creative in response["results"]: existing_creatives[creative.id] = creative statement.offset += dfp.SUGGESTED_PAGE_LIMIT else: break updated = dfp_creative_service.execute("updateCreatives", [ _link_to_creative( link=link, existing=existing_creatives[link.dfp_creative_id], ) for link in updates ]) creatives += updated if inserts: authors = Account._byID([link.author_id for link in inserts], return_dict=False) advertisers = advertisers_service.bulk_upsert(authors) advertisers_by_author = { advertiser.externalId: advertiser for advertiser in advertisers } inserted = dfp_creative_service.execute("createCreatives", [ _link_to_creative( link=link, advertiser=advertisers_by_author[Account._fullname_from_id36( to36(link.author_id))], ) for link in inserts ]) creatives += inserted creatives_by_fullname = { utils.get_template_variable(creative, "link_id"): creative for creative in creatives } for link in links: creative = creatives_by_fullname[link._fullname] link.dfp_creative_id = creative.id link._commit() return creatives