Ejemplo n.º 1
0
    def test_perform_filtering(self):
        ''' Runs the filtering celery task '''
        visitor = models.relational.Visitor.objects.create()
        visit = visitor.visits.create(session_id='123', app_id=123, ip='127.0.0.1')

        ranked_edges = targeting.px3_crawl(self.token)
        # Ensure at least one edge passes filter:
        # (NOTE: May have to fiddle with campaign properties as well.)
        ranked_edges[0].secondary.state = 'Illinois'

        (
            edges_ranked,
            edges_filtered,
            filter_id,
            cs_slug,
            campaign_id,
            content_id,
        ) = targeting.perform_filtering(
            ranked_edges,
            campaign_id=1,
            content_id=1,
            fbid=1,
            visit_id=visit.pk,
            num_faces=1,
        )

        self.assertTrue(edges_ranked)
        self.assertEqual({type(edge) for edge in edges_ranked},
                         {models.datastructs.Edge})
        self.assertIsInstance(edges_filtered, models.datastructs.TieredEdges)
        self.assertEqual({type(edge) for edge in edges_filtered.edges},
                         {models.datastructs.Edge})
        self.assertIsInstance(filter_id, long)
        self.assertIsInstance(cs_slug, (types.NoneType, basestring))
Ejemplo n.º 2
0
    def test_px4_choiceset_filter(self, classifier_mock):
        # Configure null global filter:
        self.campaign.campaignglobalfilters.create(filter=self.default_filter, rand_cdf=1)

        # Configure choiceset:
        topics_filter = self.client.filters.create()
        topics_filter.filterfeatures.create(
            feature_type=models.relational.FilterFeatureType.objects.get_topics(),
            feature='topics[Weather]',
            operator=models.FilterFeature.Operator.MIN,
            value=0.1,
        )
        choice_set = self.client.choicesets.create()
        choice_set.choicesetfilters.create(filter=topics_filter)
        self.campaign.campaignchoicesets.create(choice_set=choice_set, rand_cdf=1)

        # px3
        ranked_edges = targeting.px3_crawl(self.token)
        result = targeting.perform_filtering(
            ranked_edges,
            fbid=self.token.fbid,
            campaign_id=self.campaign.pk,
            content_id=self.content.pk,
            visit_id=self.visit.pk,
            num_faces=1,
        )
        self.assertTrue(result.ranked)
        self.assertTrue(result.filtered)
        self.assertEqual(len(result.filtered), len(result.ranked)) # no filtering

        # px4
        (stream, ranked_edges) = targeting.px4_crawl(self.token)
        self.assertTrue(stream)

        self.assertEqual(models.dynamo.PostTopics.items.count(), 0)

        filtering_result = targeting.px4_filter(
            stream,
            ranked_edges,
            fbid=self.token.fbid,
            campaign_id=self.campaign.pk,
            content_id=self.content.pk,
            visit_id=self.visit.pk,
            num_faces=1,
        )
        result = targeting.px4_rank(filtering_result)

        self.assertTrue(result.ranked)
        self.assertTrue(result.filtered)
        self.assertTrue(classifier_mock.called)

        self.assertGreater(models.dynamo.PostTopics.items.count(), 0)

        self.assertLess(len(result.filtered), len(result.ranked))
        mismatch = [user for user in result.filtered.secondaries
                    if user.topics['Weather'] < 0.1]
        self.assertFalse(mismatch)
Ejemplo n.º 3
0
    def test_fallback_cascade(self):
        # Some test users and edges
        test_user1 = models.User(
            fbid=1,
            fname='Test',
            lname='User',
            email='*****@*****.**',
            gender='male',
            birthday=timezone.datetime(1984, 1, 1, tzinfo=timezone.utc),
            city='Chicago',
            state='Illinois'
        )
        test_user2 = models.User(
            fbid=2,
            fname='Test',
            lname='User',
            email='*****@*****.**',
            gender='male',
            birthday=timezone.datetime(1984, 1, 1, tzinfo=timezone.utc),
            city='Toledo',
            state='Ohio'
        )
        test_edge1 = models.datastructs.UserNetwork.Edge(test_user1, test_user1, None, px3_score=0.5)
        test_edge2 = models.datastructs.UserNetwork.Edge(test_user1, test_user2, None, px3_score=0.4)
        visitor = models.relational.Visitor.objects.create(fbid=1)
        visit = visitor.visits.create(session_id='123', app_id=123, ip='127.0.0.1')

        ranked_edges = [test_edge2, test_edge1]
        (
            edges_ranked,
            edges_filtered,
            filter_id,
            cs_slug,
            campaign_id,
            content_id,
        ) = targeting.perform_filtering(
            ranked_edges,
            campaign_id=5,
            content_id=1,
            fbid=1,
            visit_id=visit.pk,
            num_faces=10,
        )

        self.assertEquals(edges_filtered.secondary_ids, (1, 2))
        self.assertEquals(edges_filtered[0]['campaign_id'], 5)
        self.assertEquals(edges_filtered[1]['campaign_id'], 6)