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

Reply via email to