def test_delete_campaign(self): response = yield self.get_response("campaign_delete", []) self.assertIsNotNone(response) self.assertTrue(response['result']) response = yield self.get_response("campaign_delete", [self.CAMPAIGN_DATA['campaign_id']]) self.assertIsNotNone(response) self.assertTrue(response['result']) # Add campaign response = yield self.get_response("campaign_update", [self.CAMPAIGN_DATA]) self.assertIsNotNone(response) self.assertTrue(response['result']) # Mark it as removed response = yield self.get_response("campaign_delete", [self.CAMPAIGN_DATA['campaign_id']]) self.assertIsNotNone(response) # Verify it's marked campaign_doc = yield db_utils.get_campaign( self.CAMPAIGN_DATA['campaign_id']) self.assertEqual(1, campaign_doc['time_end']) campaign_banners = yield db_utils.get_campaign_banners( self.CAMPAIGN_DATA['campaign_id']) self.assertEqual(len(campaign_banners), 0)
def test_change_campaign(self): changed_campaign_data = copy.deepcopy(self.CAMPAIGN_DATA) changed_campaign_data['budget'] = 200 changed_campaign_data['banners'] = [{ 'banner_id': 'changed', 'banner_size': '100x200', 'keywords': {} }] response = yield self.get_response("campaign_update", [changed_campaign_data]) self.assertIsNotNone(response) self.assertTrue(response['result']) campaign_doc = yield db_utils.get_campaign( changed_campaign_data['campaign_id']) self.assertIsNotNone(campaign_doc) self.assertEqual(campaign_doc['campaign_id'], changed_campaign_data['campaign_id']) self.assertEqual(campaign_doc['budget'], changed_campaign_data['budget']) campaign_banners = yield db_utils.get_campaign_banners( changed_campaign_data['campaign_id']) self.assertEqual(len(campaign_banners), 1) self.assertEqual(campaign_banners[0]['banner_id'], changed_campaign_data['banners'][0]['banner_id'])
def test_add_campaign(self): response = yield self.get_response("campaign_update", []) self.assertIsNotNone(response) self.assertTrue(response['result']) response = yield self.get_response("campaign_update", [self.CAMPAIGN_DATA]) self.assertIsNotNone(response) self.assertTrue(response['result']) campaign_doc = yield db_utils.get_campaign( self.CAMPAIGN_DATA['campaign_id']) self.assertIsNotNone(campaign_doc) self.assertEqual(campaign_doc['campaign_id'], self.CAMPAIGN_DATA['campaign_id']) self.assertEqual(campaign_doc['budget'], 1000) campaign_banners = yield db_utils.get_campaign_banners( self.CAMPAIGN_DATA['campaign_id']) self.assertEqual(len(campaign_banners), 2) for banner_doc in campaign_banners: self.assertIn( banner_doc['banner_id'], [elem['banner_id'] for elem in self.CAMPAIGN_DATA['banners']])
def test_campaign(self): cmp_doc = { "campaign_id": "campaign_id", "time_start": 12345, "time_end": 12347, "max_cpc": 100, "max_cpm": 200, "budget": 1000, "filters": {} } yield db_utils.update_campaign(cmp_doc) campaign_doc = yield db_utils.get_campaign("campaign_id") self.assertEqual(campaign_doc['time_start'], 12345) self.assertEqual(campaign_doc['time_end'], 12347) self.assertEqual(campaign_doc['max_cpc'], 100) self.assertEqual(campaign_doc['max_cpm'], 200) self.assertEqual(campaign_doc['budget'], 1000) yield db_utils.delete_campaign("campaign_id") campaign_doc = yield db_utils.get_campaign("campaign_id") self.assertEqual(None, campaign_doc) for i in range(1000): cmp_doc = { "campaign_id": i, "time_start": 12345, "time_end": 12347, "max_cpc": 100, "max_cpm": 200, "budget": 1000, "filters": {} } yield db_utils.update_campaign(cmp_doc) counter = 0 campaign_iter = yield db_utils.get_campaign_iter() while True: campaign_doc = yield campaign_iter.next() if not campaign_doc: break counter += 1 self.assertEqual(counter, 1000)
def delete_campaign(campaign_id): """ Remove campaign. :param campaign_id: :return: """ logger = logging.getLogger(__name__) # Delete campaign banners yield logger.info("Removing campaign banners for {0}".format(campaign_id)) yield db_utils.delete_campaign_banners(campaign_id) # "Delete" campaign # Set time_end to 1 - the campaign will be cleaned up during calculation task. yield logger.info("Removing campaign for {0}".format(campaign_id)) campaign_doc = yield db_utils.get_campaign(campaign_id) if campaign_doc: campaign_doc['time_end'] = 1 yield db_utils.update_campaign(campaign_doc)
def add_event(eventobj): """ Insert (create or update) event object into the database. Update keywords and view statistics (for user value method) :param eventobj: Event object :return: """ logger = logging.getLogger(__name__) event_doc = eventobj.to_json() event_doc['campaign_id'] = 'not_found' banner_doc = yield db_utils.get_banner(eventobj.banner_id) if not banner_doc: yield logger.warning("Event update: No banner found.") else: campaign_doc = yield db_utils.get_campaign(banner_doc['campaign_id']) if not campaign_doc: yield logger.warning("Event update: No campaign found.") else: event_doc['campaign_id'] = campaign_doc['campaign_id'] inserted = yield db_utils.update_event(event_doc) if stats_consts.CALCULATION_METHOD == 'user_value': # Update global keywords cache and user keyword stats. view_view_keywords = [] for user_keyword, user_val in eventobj.our_keywords.items(): view_view_keywords.append( common_utils.genkey(user_keyword, user_val)) yield stats_legacy.add_view_keywords(eventobj.user_id, view_view_keywords) defer.returnValue(inserted)