Milimetric has uploaded a new change for review.
https://gerrit.wikimedia.org/r/80674
Change subject: now 88 percent
......................................................................
now 88 percent
Change-Id: Id11f701b2d5c285afaa41705c7562953b317acfc
---
A tests/test_models/test_aggregate_report.py
R tests/test_models/test_run_report.py
M wikimetrics/models/report_nodes/aggregate_report.py
3 files changed, 173 insertions(+), 5 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/analytics/wikimetrics
refs/changes/74/80674/1
diff --git a/tests/test_models/test_aggregate_report.py
b/tests/test_models/test_aggregate_report.py
new file mode 100644
index 0000000..ca536dc
--- /dev/null
+++ b/tests/test_models/test_aggregate_report.py
@@ -0,0 +1,165 @@
+from decimal import Decimal
+from nose.tools import assert_equals, assert_true
+from wikimetrics.metrics import metric_classes
+from wikimetrics.models import (
+ Aggregation, AggregateReport, PersistentReport, Cohort,
+)
+from ..fixtures import QueueDatabaseTest, DatabaseTest
+
+
+class AggregateReportTest(QueueDatabaseTest):
+
+ 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
+ inner_key = self.session.query(PersistentReport)\
+ .filter(PersistentReport.id == ar.children[0].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)
+ )
+
+
+class AggregateReportWithoutQueueTest(DatabaseTest):
+
+ 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_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)
+
+# NOTE: a sample output of AggregateReport:
+#{
+ #'f5ca5afe-6b2d-4052-bd51-6cbeaeba5eb9': {
+ #'Standard Deviation': {
+ #'edits': 'Not Implemented'
+ #},
+ #'Individual Results': [
+ #{
+ #1: {'edits': 2},
+ #2: {'edits': 3},
+ #3: {'edits': 0},
+ #None: {'edits': 0}
+ #}
+ #],
+ #'Sum': {
+ #'edits': Decimal('5')
+ #},
+ #'Average': {
+ #'edits': Decimal('1.25')
+ #}
+ #},
+ #'f5930c16-03ba-4069-a05e-e57f9f8e2f5c': {
+ #1: {'edits': 2},
+ #2: {'edits': 3},
+ #3: {'edits': 0},
+ #None: {'edits': 0}
+ #}
+#}
diff --git a/tests/test_models/test_report_response.py
b/tests/test_models/test_run_report.py
similarity index 100%
rename from tests/test_models/test_report_response.py
rename to tests/test_models/test_run_report.py
diff --git a/wikimetrics/models/report_nodes/aggregate_report.py
b/wikimetrics/models/report_nodes/aggregate_report.py
index 2a5586c..b7514cf 100644
--- a/wikimetrics/models/report_nodes/aggregate_report.py
+++ b/wikimetrics/models/report_nodes/aggregate_report.py
@@ -111,12 +111,15 @@
helper[key]['count'] += 1
if type_of_aggregate == Aggregation.SUM:
- aggregation[key] = helper[key]['sum']
+ aggregation[key] = round(
+ helper[key]['sum'],
+ 4
+ )
elif type_of_aggregate == Aggregation.AVG:
- if helper[key]['count'] != 0:
- aggregation[key] = helper[key]['sum'] /
helper[key]['count']
- else:
- aggregation[key] = 0
+ aggregation[key] = round(
+ helper[key]['sum'] / helper[key]['count'],
+ 4
+ )
elif type_of_aggregate == Aggregation.STD:
aggregation[key] = 'Not Implemented'
pass
--
To view, visit https://gerrit.wikimedia.org/r/80674
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Id11f701b2d5c285afaa41705c7562953b317acfc
Gerrit-PatchSet: 1
Gerrit-Project: analytics/wikimetrics
Gerrit-Branch: master
Gerrit-Owner: Milimetric <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits