def update(self, request, *args, **kwargs): line_item = self.get_object() data = copy.copy(request.data) data[ 'account_id'] = line_item.tw_campaign_id.tw_account_id.tw_account_id data['campaign_id'] = line_item.tw_campaign_id.tw_campaign_id data['line_item_id'] = line_item.pk data['paused'] = data.get('status') != 'enabled' res = TwitterLineItem.update(data) if res['success']: res = TwitterTargeting.set_targeting(data['targeting'], data['account_id']) if not res['success']: return Response(dict(messages=res['error']['messages']), status=status.HTTP_400_BAD_REQUEST) else: return Response(dict(error=res['message']), status=status.HTTP_400_BAD_REQUEST) data['tweet_ids'] = ','.join(data['tweet_ids']) res = TwitterPromotedTweet.set_promoted_tweet(data, data['account_id']) if res['success']: cpi_target_goal = data['cpi_target_goal'] revmap, created = TwitterRevmap.objects_raw.get_or_create( campaign_id=line_item.tw_campaign_id.campaign_id, tw_campaign_id=line_item.tw_campaign_id.pk, tw_line_item_id=line_item.pk) revmap.opt_type = 'install' revmap.opt_value = cpi_target_goal revmap.save() else: return Response(dict( error='Associating promotable tweets with line item failed!'), status=status.HTTP_400_BAD_REQUEST) return Response( TwitterLineItemDetailSerializer(self.get_object()).data)
def _update_tw_line_item(self, tw_line_item): self._log(tw_line_item.bid_amount_computed_reason) tw_line_item.save_raw() # Auto-optimize if tw_line_item.tw_line_item_id in settings.TW_AUTO_OPTIMIZE_LINE_ITEMS and \ tw_line_item.bid_amount_local_micro != tw_line_item.bid_amount_computed: self._log("Auto-optimizing tw_line_item_id %d to $%.2f" % (tw_line_item.tw_line_item_id, float(tw_line_item.bid_amount_computed) / 1000000)) tw_account_id = tw_line_item.tw_campaign_id.tw_account_id.tw_account_id res = TwitterLineItem.update({ 'account_id': tw_account_id, 'line_item_id': tw_line_item.tw_line_item_id, 'bid_amount_local_micro': tw_line_item.bid_amount_computed }) if not res['success']: self._log("ERROR: Failed updating tw_line_item_id bid: " + res['message'])
def post(self, request, *args, **kwargs): tw_line_items = request.DATA.get('tw_line_items') success_count = 0 for obj in tw_line_items: if obj.get('tw_line_item_id'): tw_line_item_id = obj['tw_line_item_id'] instance = TwitterLineItem.objects.filter( tw_line_item_id=tw_line_item_id).first() if obj.get('bid_amount_local_micro') and \ instance.bid_amount_local_micro != obj['bid_amount_local_micro']: account_id = instance.tw_campaign_id.tw_account_id.tw_account_id data = dict(account_id=account_id, line_item_id=tw_line_item_id, bid_amount_local_micro=obj.get( 'bid_amount_local_micro'), paused=(instance.status != 'enabled')) res = TwitterLineItem.update(data) if res['success']: success_count += 1 tw_campaign_id = instance.tw_campaign_id.tw_campaign_id campaign = instance.tw_campaign_id.campaign_id if obj.get('cpi_target_goal'): revmap, created = TwitterRevmap.objects.get_or_create( campaign_id=campaign, tw_campaign_id=tw_campaign_id, tw_line_item_id=tw_line_item_id) revmap.opt_type = 'install' if revmap.opt_value != obj['cpi_target_goal']: revmap.opt_value = obj['cpi_target_goal'] revmap.save() return Response({'status': 'ok', 'success_count': success_count})