def test_finish(self):
     metric = metric_classes['NamespaceEdits'](
         name='NamespaceEdits',
         namespaces=[0, 1, 2],
         start_date='2013-05-01 00:00:00',
         end_date='2013-09-01 00:00:00',
     )
     options = {
         'individualResults': True,
         'aggregateResults': True,
         'aggregateSum': True,
         'aggregateAverage': True,
         'aggregateStandardDeviation': True,
     }
     ar = AggregateReport(
         metric,
         self.cohort,
         options,
         user_id=self.owner_user_id,
     )
     
     finished = ar.finish([
         {
             1: {'edits': 2},
             2: {'edits': 3},
             3: {'edits': 0},
             None: {'edits': 0}
         },
     ])
     
     assert_equals(
         finished[Aggregation.SUM]['edits'],
         5
     )
     assert_equals(
         finished[Aggregation.AVG]['edits'],
         r(1.25)
     )
     
     finished = ar.finish([
         {
             1: {'other_sub_metric': r(2.3)},
             2: {'other_sub_metric': r(3.4)},
             3: {'other_sub_metric': r(0.0)},
             None: {'other_sub_metric': 0}
         },
     ])
     
     assert_equals(
         finished[Aggregation.SUM]['other_sub_metric'],
         r(5.7)
     )
     assert_equals(
         finished[Aggregation.AVG]['other_sub_metric'],
         r(1.425)
     )
     assert_equals(
         finished[Aggregation.STD]['other_sub_metric'],
         r(1.4771)
     )
 def test_does_not_aggregate_null_values(self):
     metric = metric_classes['Threshold'](
         name='Threshold',
     )
     ar = AggregateReport(
         self.cohort,
         metric,
         individual=True,
         aggregate=True,
         aggregate_sum=True,
         aggregate_average=True,
         user_id=self.owner_user_id,
     )
     
     finished = ar.finish([
         {
             'namespace edits - fake cohort' : {
                 1: {'edits': 2, 'submetric': 1},
                 2: {'edits': 3, 'submetric': None},
                 3: {'edits': 0, 'submetric': 3},
                 None: {'edits': 0}
             }
         },
     ])
     
     assert_equals(
         finished[ar.result_key][Aggregation.SUM]['submetric'],
         4
     )
     assert_equals(
         finished[ar.result_key][Aggregation.AVG]['submetric'],
         2
     )
 def test_finish(self):
     metric = metric_classes['NamespaceEdits'](
         name='NamespaceEdits',
         namespaces=[0, 1, 2],
         start_date='2013-05-01 00:00:00',
         end_date='2013-09-01 00:00:00',
     )
     ar = AggregateReport(
         self.cohort,
         metric,
         individual=True,
         aggregate=True,
         aggregate_sum=True,
         aggregate_average=True,
         aggregate_std_deviation=True,
         user_id=self.owner_user_id,
     )
     
     finished = ar.finish([
         {
             'namespace edits - fake cohort' : {
                 1: {'edits': 2},
                 2: {'edits': 3},
                 3: {'edits': 0},
                 None: {'edits': 0}
             }
         },
         {
             'some other metric - fake cohort' : {
                 1: {'other_sub_metric': r(2.3)},
                 2: {'other_sub_metric': r(3.4)},
                 3: {'other_sub_metric': r(0.0)},
                 None: {'other_sub_metric': 0}
             }
         },
     ])
     
     assert_equals(
         finished[ar.result_key][Aggregation.SUM]['edits'],
         5
     )
     assert_equals(
         finished[ar.result_key][Aggregation.SUM]['other_sub_metric'],
         r(5.7)
     )
     assert_equals(
         finished[ar.result_key][Aggregation.AVG]['edits'],
         r(1.25)
     )
     assert_equals(
         finished[ar.result_key][Aggregation.AVG]['other_sub_metric'],
         r(1.425)
     )
     assert_equals(
         finished[ar.result_key][Aggregation.STD]['other_sub_metric'],
         r(1.4771)
     )
 def test_finish(self):
     cohort = self.session.query(Cohort).get(self.test_cohort_id)
     metric = metric_classes['NamespaceEdits'](
         name='NamespaceEdits',
         namespaces=[0, 1, 2],
         start_date='2013-06-01',
         end_date='2013-09-01',
     )
     ar = AggregateReport(
         cohort,
         metric,
         individual=True,
         aggregate=True,
         aggregate_sum=True,
         aggregate_average=True,
         aggregate_std_deviation=True,
         user_id=self.test_user_id,
     )
     
     finished = ar.finish([
         {
             'namespace edits - fake cohort' : {
                 1: {'edits': 2},
                 2: {'edits': 3},
                 3: {'edits': 0},
                 None: {'edits': 0}
             }
         },
         {
             'some other metric - fake cohort' : {
                 1: {'other_sub_metric': Decimal(2.3)},
                 2: {'other_sub_metric': Decimal(3.4)},
                 3: {'other_sub_metric': Decimal(0.0)},
                 None: {'other_sub_metric': 0}
             }
         },
     ])
     
     assert_equals(
         finished[ar.result_key][Aggregation.SUM]['edits'],
         5
     )
     assert_equals(
         finished[ar.result_key][Aggregation.SUM]['other_sub_metric'],
         Decimal(5.7)
     )
     assert_equals(
         finished[ar.result_key][Aggregation.AVG]['edits'],
         # TODO: Again, figure out this crazy "None" user id
         Decimal(1.25)
     )
     assert_equals(
         finished[ar.result_key][Aggregation.AVG]['other_sub_metric'],
         Decimal(1.425)
     )
예제 #5
0
    def test_aggregate_empty_results(self):
        '''
         Tests what happens when no users are
         returned for the initial metric run
         so there are no users to agreggate
         '''
        self.create_wiki_cohort()

        metric = metric_classes['NamespaceEdits'](
            name='NamespaceEdits',
            namespaces=[0, 1, 2],
            start_date='2010-01-01 00:00:00',
            end_date='2010-01-02 00:00:00',
        )
        options = {
            'individualResults': True,
            'aggregateResults': True,
            'aggregateSum': True,
            'aggregateAverage': True,
            'aggregateStandardDeviation': True,
        }

        ar = AggregateReport(
            metric,
            self.basic_wiki_cohort,
            options,
            user_id=self.basic_wiki_cohort_owner,
        )
        result = ar.task.delay(ar).get()

        assert_equals(result[Aggregation.IND].keys(), [])
        assert_equals(result[Aggregation.SUM]['edits'], r(0))
        assert_equals(result[Aggregation.AVG]['edits'], r(0))
        assert_equals(result[Aggregation.STD]['edits'], r(0))
예제 #6
0
    def test_basic_response(self):
        metric = metric_classes['NamespaceEdits'](
            name='NamespaceEdits',
            namespaces=[0, 1, 2],
            start_date='2013-01-01 00:00:00',
            end_date='2013-01-02 00:00:00',
        )
        options = {
            'individualResults': True,
            'aggregateResults': True,
            'aggregateSum': True,
            'aggregateAverage': True,
            'aggregateStandardDeviation': True,
        }

        ar = AggregateReport(
            metric,
            self.cohort,
            options,
            user_id=self.owner_user_id,
        )
        result = ar.task.delay(ar).get()

        assert_equals(result[Aggregation.IND][self.editor(0)]['edits'], 2)
        assert_equals(result[Aggregation.AVG]['edits'], r(1.0))
        assert_equals(result[Aggregation.STD]['edits'], r(1.0))
    def test_basic_response(self):
        cohort = self.session.query(Cohort).get(self.test_cohort_id)
        metric = metric_classes['NamespaceEdits'](
            name='NamespaceEdits',
            namespaces=[0, 1, 2],
            start_date='2013-06-01',
            end_date='2013-09-01',
        )
        ar = AggregateReport(
            cohort,
            metric,
            individual=True,
            aggregate=True,
            aggregate_sum=True,
            aggregate_average=True,
            aggregate_std_deviation=True,
            user_id=self.test_user_id,
        )
        result = ar.task.delay(ar).get()

        aggregate_key = self.session.query(PersistentReport)\
            .filter(PersistentReport.id == ar.persistent_id)\
            .one()\
            .result_key

        assert_equals(
            result[aggregate_key][Aggregation.IND][0][
                self.test_mediawiki_user_id]['edits'], 2)
        assert_equals(result[aggregate_key][Aggregation.AVG]['edits'],
                      Decimal(1.25))
예제 #8
0
    def test_does_not_aggregate_null_values(self):
        metric = metric_classes['Threshold'](name='Threshold', )
        options = {
            'individualResults': True,
            'aggregateResults': True,
            'aggregateSum': True,
            'aggregateAverage': True,
            'aggregateStandardDeviation': True,
        }

        ar = AggregateReport(
            metric,
            self.cohort,
            options,
            user_id=self.owner_user_id,
        )

        finished = ar.finish([
            {
                1: {
                    'edits': 2,
                    'submetric': 1
                },
                2: {
                    'edits': 3,
                    'submetric': None
                },
                3: {
                    'edits': 0,
                    'submetric': 3
                },
                None: {
                    'edits': 0
                }
            },
        ])

        assert_equals(finished[Aggregation.SUM]['submetric'], 4)
        assert_equals(finished[Aggregation.AVG]['submetric'], 2)
예제 #9
0
    def test_timeseries_day(self):
        metric = NamespaceEdits(
            namespaces=[0],
            start_date='2012-12-31 00:00:00',
            end_date='2013-01-03 00:00:00',
            timeseries=TimeseriesChoices.DAY,
        )
        options = {
            'individualResults': True,
            'aggregateResults': True,
            'aggregateSum': True,
            'aggregateAverage': True,
            'aggregateStandardDeviation': True,
        }

        ar = AggregateReport(
            metric,
            self.cohort,
            options,
            user_id=self.owner_user_id,
        )
        results = ar.task.delay(ar).get()

        self.session.commit()

        assert_equals(
            results[Aggregation.IND][self.editor(0)]['edits'], {
                '2012-12-31 00:00:00': 1,
                '2013-01-01 00:00:00': 2,
                '2013-01-02 00:00:00': 0,
            })
        assert_equals(
            results[Aggregation.SUM]['edits'], {
                '2012-12-31 00:00:00': 1,
                '2013-01-01 00:00:00': 5,
                '2013-01-02 00:00:00': 2,
            })
        assert_equals(
            results[Aggregation.AVG]['edits'], {
                '2012-12-31 00:00:00': r(0.25),
                '2013-01-01 00:00:00': r(1.25),
                '2013-01-02 00:00:00': r(0.5),
            })
        assert_equals(
            results[Aggregation.STD]['edits'], {
                '2012-12-31 00:00:00': r(0.4330),
                '2013-01-01 00:00:00': r(0.4330),
                '2013-01-02 00:00:00': r(0.8660),
            })
 def test_does_not_aggregate_null_values(self):
     metric = metric_classes['Threshold'](
         name='Threshold',
     )
     options = {
         'individualResults': True,
         'aggregateResults': True,
         'aggregateSum': True,
         'aggregateAverage': True,
         'aggregateStandardDeviation': True,
     }
     
     ar = AggregateReport(
         metric,
         self.cohort,
         options,
         user_id=self.owner_user_id,
     )
     
     finished = ar.finish([
         {
             1: {'edits': 2, 'submetric': 1},
             2: {'edits': 3, 'submetric': None},
             3: {'edits': 0, 'submetric': 3},
             None: {'edits': 0}
         },
     ])
     
     assert_equals(
         finished[Aggregation.SUM]['submetric'],
         4
     )
     assert_equals(
         finished[Aggregation.AVG]['submetric'],
         2
     )
    def test_repr(self):
        cohort = self.session.query(Cohort).get(self.test_cohort_id)
        metric = metric_classes['NamespaceEdits'](
            name='NamespaceEdits',
            namespaces=[0, 1, 2],
            start_date='2013-06-01',
            end_date='2013-09-01',
        )
        ar = AggregateReport(
            cohort,
            metric,
            individual=True,
            aggregate=True,
            aggregate_sum=True,
            aggregate_average=True,
            aggregate_std_deviation=True,
            user_id=self.test_user_id,
        )

        assert_true(str(ar).find('AggregateReport') >= 0)
예제 #12
0
    def test_repr(self):
        metric = metric_classes['NamespaceEdits'](
            name='NamespaceEdits',
            namespaces=[0, 1, 2],
            start_date='2013-05-01 00:00:00',
            end_date='2013-09-01 00:00:00',
        )

        options = {
            'individualResults': True,
            'aggregateResults': True,
            'aggregateSum': True,
            'aggregateAverage': True,
            'aggregateStandardDeviation': True,
        }

        ar = AggregateReport(
            metric,
            self.cohort,
            options,
            user_id=self.owner_user_id,
        )

        assert_true(str(ar).find('AggregateReport') >= 0)
 def test_finish_timeseries(self):
     metric = NamespaceEdits(
         namespaces=[0],
         start_date='2012-12-31 00:00:00',
         end_date='2013-01-03 00:00:00',
         timeseries=TimeseriesChoices.DAY,
     )
     options = {
         'individualResults': True,
         'aggregateResults': True,
         'aggregateSum': True,
         'aggregateAverage': True,
         'aggregateStandardDeviation': True,
     }
     ar = AggregateReport(
         metric,
         self.cohort,
         options,
         user_id=self.owner_user_id,
     )
     
     finished = ar.finish([
         {
             1: {'edits': {'date1': 1, 'date2': 2}},
             2: {'edits': {'date1': 0, 'date2': 1}},
             3: {'edits': {'date1': 0, 'date2': 0}},
             None: {'edits': {'date1': None, 'date2': None}}
         },
     ])
     
     assert_equals(
         finished[Aggregation.SUM]['edits'],
         {'date1': 1, 'date2': 3}
     )
     assert_equals(
         finished[Aggregation.AVG]['edits'],
         {'date1': r(0.3333), 'date2': r(1.0)}
     )
     assert_equals(
         finished[Aggregation.STD]['edits'],
         {'date1': r(0.4714), 'date2': r(0.8165)}
     )
     
     finished = ar.finish([
         {
             1: {'other_sub_metric': {'date3': r(2.3), 'date4': 0}},
             2: {'other_sub_metric': {'date3': 0, 'date4': r(3.4)}},
             3: {'other_sub_metric': {'date3': None, 'date4': None}},
             None: {'other_sub_metric': {'date3': None, 'date4': None}}
         },
     ])
     
     assert_equals(
         finished[Aggregation.SUM]['other_sub_metric'],
         {'date3': r(2.3), 'date4': r(3.4)}
     )
     assert_equals(
         finished[Aggregation.AVG]['other_sub_metric'],
         {'date3': r(1.15), 'date4': r(1.7)}
     )
     assert_equals(
         finished[Aggregation.STD]['other_sub_metric'],
         {'date3': r(1.15), 'date4': r(1.7)}
     )
 def test_finish_timeseries(self):
     metric = NamespaceEdits(
         namespaces=[0],
         start_date='2012-12-31 00:00:00',
         end_date='2013-01-03 00:00:00',
         timeseries=TimeseriesChoices.DAY,
     )
     ar = AggregateReport(
         self.cohort,
         metric,
         individual=True,
         aggregate=True,
         aggregate_sum=True,
         aggregate_average=True,
         aggregate_std_deviation=True,
         user_id=self.owner_user_id,
     )
     
     finished = ar.finish([
         {
             'namespace edits - fake cohort' : {
                 1: {'edits': {'date1': 1, 'date2': 2}},
                 2: {'edits': {'date1': 0, 'date2': 1}},
                 3: {'edits': {'date1': 0, 'date2': 0}},
                 None: {'edits': {'date1': None, 'date2': None}}
             }
         },
         {
             'some other metric - fake cohort' : {
                 1: {'other_sub_metric': {'date3': r(2.3), 'date4': 0}},
                 2: {'other_sub_metric': {'date3': 0, 'date4': r(3.4)}},
                 3: {'other_sub_metric': {'date3': None, 'date4': None}},
                 None: {'other_sub_metric': {'date3': None, 'date4': None}}
             }
         },
     ])
     
     assert_equals(
         finished[ar.result_key][Aggregation.SUM]['edits'],
         {'date1': 1, 'date2': 3}
     )
     assert_equals(
         finished[ar.result_key][Aggregation.SUM]['other_sub_metric'],
         {'date3': r(2.3), 'date4': r(3.4)}
     )
     assert_equals(
         finished[ar.result_key][Aggregation.AVG]['edits'],
         {'date1': r(0.3333), 'date2': r(1.0)}
     )
     assert_equals(
         finished[ar.result_key][Aggregation.AVG]['other_sub_metric'],
         {'date3': r(1.15), 'date4': r(1.7)}
     )
     assert_equals(
         finished[ar.result_key][Aggregation.STD]['edits'],
         {'date1': r(0.4714), 'date2': r(0.8165)}
     )
     assert_equals(
         finished[ar.result_key][Aggregation.STD]['other_sub_metric'],
         {'date3': r(1.15), 'date4': r(1.7)}
     )
예제 #15
0
    def test_finish_timeseries(self):
        metric = NamespaceEdits(
            namespaces=[0],
            start_date='2012-12-31 00:00:00',
            end_date='2013-01-03 00:00:00',
            timeseries=TimeseriesChoices.DAY,
        )
        options = {
            'individualResults': True,
            'aggregateResults': True,
            'aggregateSum': True,
            'aggregateAverage': True,
            'aggregateStandardDeviation': True,
        }
        ar = AggregateReport(
            metric,
            self.cohort,
            options,
            user_id=self.owner_user_id,
        )

        finished = ar.finish([
            {
                1: {
                    'edits': {
                        'date1': 1,
                        'date2': 2
                    }
                },
                2: {
                    'edits': {
                        'date1': 0,
                        'date2': 1
                    }
                },
                3: {
                    'edits': {
                        'date1': 0,
                        'date2': 0
                    }
                },
                None: {
                    'edits': {
                        'date1': None,
                        'date2': None
                    }
                }
            },
        ])

        assert_equals(finished[Aggregation.SUM]['edits'], {
            'date1': 1,
            'date2': 3
        })
        assert_equals(finished[Aggregation.AVG]['edits'], {
            'date1': r(0.3333),
            'date2': r(1.0)
        })
        assert_equals(finished[Aggregation.STD]['edits'], {
            'date1': r(0.4714),
            'date2': r(0.8165)
        })

        finished = ar.finish([
            {
                1: {
                    'other_sub_metric': {
                        'date3': r(2.3),
                        'date4': 0
                    }
                },
                2: {
                    'other_sub_metric': {
                        'date3': 0,
                        'date4': r(3.4)
                    }
                },
                3: {
                    'other_sub_metric': {
                        'date3': None,
                        'date4': None
                    }
                },
                None: {
                    'other_sub_metric': {
                        'date3': None,
                        'date4': None
                    }
                }
            },
        ])

        assert_equals(finished[Aggregation.SUM]['other_sub_metric'], {
            'date3': r(2.3),
            'date4': r(3.4)
        })
        assert_equals(finished[Aggregation.AVG]['other_sub_metric'], {
            'date3': r(1.15),
            'date4': r(1.7)
        })
        assert_equals(finished[Aggregation.STD]['other_sub_metric'], {
            'date3': r(1.15),
            'date4': r(1.7)
        })
    def test_finish(self):
        cohort = self.session.query(Cohort).get(self.test_cohort_id)
        metric = metric_classes['NamespaceEdits'](
            name='NamespaceEdits',
            namespaces=[0, 1, 2],
            start_date='2013-06-01',
            end_date='2013-09-01',
        )
        ar = AggregateReport(
            cohort,
            metric,
            individual=True,
            aggregate=True,
            aggregate_sum=True,
            aggregate_average=True,
            aggregate_std_deviation=True,
            user_id=self.test_user_id,
        )

        finished = ar.finish([
            {
                'namespace edits - fake cohort': {
                    1: {
                        'edits': 2
                    },
                    2: {
                        'edits': 3
                    },
                    3: {
                        'edits': 0
                    },
                    None: {
                        'edits': 0
                    }
                }
            },
            {
                'some other metric - fake cohort': {
                    1: {
                        'other_sub_metric': Decimal(2.3)
                    },
                    2: {
                        'other_sub_metric': Decimal(3.4)
                    },
                    3: {
                        'other_sub_metric': Decimal(0.0)
                    },
                    None: {
                        'other_sub_metric': 0
                    }
                }
            },
        ])

        assert_equals(finished[ar.result_key][Aggregation.SUM]['edits'], 5)
        assert_equals(
            finished[ar.result_key][Aggregation.SUM]['other_sub_metric'],
            Decimal(5.7))
        assert_equals(
            finished[ar.result_key][Aggregation.AVG]['edits'],
            # TODO: Again, figure out this crazy "None" user id
            Decimal(1.25))
        assert_equals(
            finished[ar.result_key][Aggregation.AVG]['other_sub_metric'],
            Decimal(1.425))
예제 #17
0
    def test_finish(self):
        metric = metric_classes['NamespaceEdits'](
            name='NamespaceEdits',
            namespaces=[0, 1, 2],
            start_date='2013-05-01 00:00:00',
            end_date='2013-09-01 00:00:00',
        )
        options = {
            'individualResults': True,
            'aggregateResults': True,
            'aggregateSum': True,
            'aggregateAverage': True,
            'aggregateStandardDeviation': True,
        }
        ar = AggregateReport(
            metric,
            self.cohort,
            options,
            user_id=self.owner_user_id,
        )

        finished = ar.finish([
            {
                1: {
                    'edits': 2
                },
                2: {
                    'edits': 3
                },
                3: {
                    'edits': 0
                },
                None: {
                    'edits': 0
                }
            },
        ])

        assert_equals(finished[Aggregation.SUM]['edits'], 5)
        assert_equals(finished[Aggregation.AVG]['edits'], r(1.25))

        finished = ar.finish([
            {
                1: {
                    'other_sub_metric': r(2.3)
                },
                2: {
                    'other_sub_metric': r(3.4)
                },
                3: {
                    'other_sub_metric': r(0.0)
                },
                None: {
                    'other_sub_metric': 0
                }
            },
        ])

        assert_equals(finished[Aggregation.SUM]['other_sub_metric'], r(5.7))
        assert_equals(finished[Aggregation.AVG]['other_sub_metric'], r(1.425))
        assert_equals(finished[Aggregation.STD]['other_sub_metric'], r(1.4771))