Пример #1
0
 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})