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) )
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))
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))
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_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)
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)} )
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))
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))