Milimetric has submitted this change and it was merged.

Change subject: moving report nodes in their own directory
......................................................................


moving report nodes in their own directory

Change-Id: If2ebcf6bc26d128b851d5361ea2f352e3528af3e
---
M wikimetrics/models/__init__.py
A wikimetrics/models/persistent_report.py
A wikimetrics/models/report_nodes/__init__.py
A wikimetrics/models/report_nodes/aggregate_report.py
R wikimetrics/models/report_nodes/concat_metrics_report.py
R wikimetrics/models/report_nodes/metric_report.py
R wikimetrics/models/report_nodes/multi_project_metric_report.py
R wikimetrics/models/report_nodes/report.py
R wikimetrics/models/report_nodes/run_report.py
M wikimetrics/static/js/site.js
10 files changed, 101 insertions(+), 73 deletions(-)

Approvals:
  Milimetric: Verified; Looks good to me, approved



diff --git a/wikimetrics/models/__init__.py b/wikimetrics/models/__init__.py
index 0d0be3b..a3b2f35 100644
--- a/wikimetrics/models/__init__.py
+++ b/wikimetrics/models/__init__.py
@@ -1,12 +1,10 @@
 from mediawiki import *
+from report_nodes import *
+
 from cohort import *
 from cohort_user import *
 from cohort_wikiuser import *
-from concat_metrics_report import *
-from report import *
-from metric_report import *
-from run_report import *
-from multi_project_metric_report import *
+from persistent_report import *
 from user import *
 from wikiuser import *
 
diff --git a/wikimetrics/models/persistent_report.py 
b/wikimetrics/models/persistent_report.py
new file mode 100644
index 0000000..769324a
--- /dev/null
+++ b/wikimetrics/models/persistent_report.py
@@ -0,0 +1,40 @@
+import celery
+from sqlalchemy import Column, Integer, String, DateTime, Boolean, func
+from sqlalchemy.orm import Session
+from wikimetrics.configurables import db, queue
+
+
+__all__ = ['PersistentReport']
+
+
+class PersistentReport(db.WikimetricsBase):
+    """
+    Stores each report node that runs in a report node tree to the database.
+    Stores the necessary information to fetch the results from Celery as
+    well as to re-run the node.
+    """
+    __tablename__ = 'report'
+    
+    id = Column(Integer, primary_key=True)
+    created = Column(DateTime, default=func.now())
+    user_id = Column(Integer)
+    result_key = Column(String(50))
+    status = Column(String(50))
+    name = Column(String(2000))
+    show_in_ui = Column(Boolean)
+    parameters = Column(String(4000))
+    
+    def update_status(self):
+        # if we don't have the result key leave as is (PENDING)
+        if self.result_key and self.status not in (celery.states.READY_STATES):
+            # TODO: fix nasty inline import.  Can't import up above because of 
circular reference
+            from wikimetrics.models.report_nodes import Report
+            celery_task = Report.task.AsyncResult(self.result_key)
+            self.status = celery_task.status
+            existing_session = Session.object_session(self)
+            if not existing_session:
+                existing_session = db.get_session()
+                existing_session.add(self)
+            existing_session.commit()
+            # if the result is still an AsyncResult, leave it as PENDING
+            #if isinstance(celery_task.result, AsyncResult):
diff --git a/wikimetrics/models/report_nodes/__init__.py 
b/wikimetrics/models/report_nodes/__init__.py
new file mode 100644
index 0000000..779c573
--- /dev/null
+++ b/wikimetrics/models/report_nodes/__init__.py
@@ -0,0 +1,9 @@
+from aggregate_report import *
+from concat_metrics_report import *
+from metric_report import *
+from multi_project_metric_report import *
+from report import *
+from run_report import *
+
+# ignore flake8 because of F403 violation
+# flake8: noqa
diff --git a/wikimetrics/models/report_nodes/aggregate_report.py 
b/wikimetrics/models/report_nodes/aggregate_report.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/wikimetrics/models/report_nodes/aggregate_report.py
diff --git a/wikimetrics/models/concat_metrics_report.py 
b/wikimetrics/models/report_nodes/concat_metrics_report.py
similarity index 95%
rename from wikimetrics/models/concat_metrics_report.py
rename to wikimetrics/models/report_nodes/concat_metrics_report.py
index b461027..01fe064 100644
--- a/wikimetrics/models/concat_metrics_report.py
+++ b/wikimetrics/models/report_nodes/concat_metrics_report.py
@@ -1,11 +1,10 @@
-from wikimetrics.configurables import queue
 import report
 import pprint
+from wikimetrics.configurables import queue
 from metric_report import MetricReport
 
-__all__ = [
-    'ConcatMetricsReport',
-]
+
+__all__ = ['ConcatMetricsReport']
 
 
 class ConcatMetricsReport(report.ReportNode):
diff --git a/wikimetrics/models/metric_report.py 
b/wikimetrics/models/report_nodes/metric_report.py
similarity index 82%
rename from wikimetrics/models/metric_report.py
rename to wikimetrics/models/report_nodes/metric_report.py
index daab240..aabe68b 100644
--- a/wikimetrics/models/metric_report.py
+++ b/wikimetrics/models/report_nodes/metric_report.py
@@ -1,12 +1,11 @@
-import report
-from ..configurables import db
-
-__all__ = [
-    'MetricReport',
-]
+from wikimetrics.configurables import db
+from report import ReportLeaf
 
 
-class MetricReport(report.ReportLeaf):
+__all__ = ['MetricReport']
+
+
+class MetricReport(ReportLeaf):
     """
     Report type responsbile for running a single metric on a project-
     homogenous list of user_ids.  Like all reports, the database session
diff --git a/wikimetrics/models/multi_project_metric_report.py 
b/wikimetrics/models/report_nodes/multi_project_metric_report.py
similarity index 90%
rename from wikimetrics/models/multi_project_metric_report.py
rename to wikimetrics/models/report_nodes/multi_project_metric_report.py
index 2a03a0e..db21c97 100644
--- a/wikimetrics/models/multi_project_metric_report.py
+++ b/wikimetrics/models/report_nodes/multi_project_metric_report.py
@@ -1,7 +1,7 @@
+import json
 from wikimetrics.configurables import queue
 from celery.utils.log import get_task_logger
-import report
-import json
+from report import ReportNode
 from metric_report import MetricReport
 
 
@@ -10,9 +10,9 @@
 task_logger = get_task_logger(__name__)
 
 
-class MultiProjectMetricReport(report.ReportNode):
+class MultiProjectMetricReport(ReportNode):
     """
-    A report responsbile for running a single metric on a potentially
+    A node responsbile for running a single metric on a potentially
     project-heterogenous cohort. This just abstracts away the task
     of grouping the cohort by project and calling a MetricReport on
     each project-homogenous list of user_ids.
diff --git a/wikimetrics/models/report.py 
b/wikimetrics/models/report_nodes/report.py
similarity index 81%
rename from wikimetrics/models/report.py
rename to wikimetrics/models/report_nodes/report.py
index f2da94a..53fb307 100644
--- a/wikimetrics/models/report.py
+++ b/wikimetrics/models/report_nodes/report.py
@@ -1,20 +1,18 @@
-from sqlalchemy import Column, Integer, String, DateTime, Boolean, func
-from sqlalchemy.orm import Session
+import time
 import celery
 from celery import group, chord, current_task
 from celery.result import AsyncResult
 from celery.utils.log import get_task_logger
 from celery.contrib.methods import task_method
 from flask.ext.login import current_user
-import time
 from wikimetrics.configurables import db, queue
+from ..persistent_report import PersistentReport
 
 
 __all__ = [
     'Report',
     'ReportNode',
     'ReportLeaf',
-    'PersistentReport'
 ]
 
 
@@ -35,32 +33,6 @@
 
 
 task_logger = get_task_logger(__name__)
-
-
-class PersistentReport(db.WikimetricsBase):
-    __tablename__ = 'report'
-    
-    id = Column(Integer, primary_key=True)
-    created = Column(DateTime, default=func.now())
-    user_id = Column(Integer)
-    result_key = Column(String(50))
-    status = Column(String(50))
-    name = Column(String(2000))
-    show_in_ui = Column(Boolean)
-    parameters = Column(String(4000))
-    
-    def update_status(self):
-        # if we don't have the result key leave as is (PENDING)
-        if self.result_key and self.status not in (celery.states.READY_STATES):
-            celery_task = Report.task.AsyncResult(self.result_key)
-            self.status = celery_task.status
-            existing_session = Session.object_session(self)
-            if not existing_session:
-                existing_session = db.get_session()
-                existing_session.add(self)
-            existing_session.commit()
-            # if the result is still an AsyncResult, leave it as PENDING
-            #if isinstance(celery_task.result, AsyncResult):
 
 
 class Report(object):
@@ -89,7 +61,7 @@
         self.result_key = result_key
         self.children = children
         
-        # create PersistentReport and store id
+        # store report to database
         # note that result_key is always empty at this stage
         pj = PersistentReport(user_id=self.user_id,
                               status=self.status,
diff --git a/wikimetrics/models/run_report.py 
b/wikimetrics/models/report_nodes/run_report.py
similarity index 100%
rename from wikimetrics/models/run_report.py
rename to wikimetrics/models/report_nodes/run_report.py
diff --git a/wikimetrics/static/js/site.js b/wikimetrics/static/js/site.js
index 2a66170..9923cb8 100644
--- a/wikimetrics/static/js/site.js
+++ b/wikimetrics/static/js/site.js
@@ -15,6 +15,7 @@
             site.redirect(response.redirectTo);
             return false;
         } else {
+            site.clearMessages();
             return true;
         }
     },
@@ -32,7 +33,8 @@
         site.showMessage(message, 'success');
     },
     showMessage: function (message, category){
-        $('.site-messages').children().remove();
+        site.clearMessages();
+        
         if (!site.messageTemplate){
             site.messageTemplate = $('.messageTemplate').html();
         }
@@ -42,6 +44,9 @@
             .replace('##punctuation##', category !== 'info' ? '!' : '');
         $('.site-messages').append(html);
         $('body').scrollTop(0);
+    },
+    clearMessages: function (){
+        $('.site-messages').children().remove();
     },
     
     redirect: function (url){
@@ -61,33 +66,39 @@
     // Data population - usually done with something like Sammy JS
     // ***********************************************************
     populateCohorts: function(viewModel){
-        $.get('/cohorts/list/', function(data){
-            viewModel.cohorts(data.cohorts);
-        }).fail(site.failure);
+        $.get('/cohorts/list/')
+            .done(site.handleWith(function(data){
+                viewModel.cohorts(data.cohorts);
+            }))
+            .fail(site.failure);
     },
     
     populateMetrics: function(viewModel){
-        $.get('/metrics/list/', function(data){
-            viewModel.metrics(data.metrics);
-        }).fail(site.failure);
+        $.get('/metrics/list/')
+            .done(site.handleWith(function(data){
+                viewModel.metrics(data.metrics);
+            }))
+            .fail(site.failure);
     },
     
     populateReports: function(viewModel){
-        $.get('/reports/list/', function(data){
-            reports = viewModel.reports();
-            reportsDict = {};
-            for(j in reports){
-                reportsDict[reports[j].id] = reports[j];
-            }
-            for(dj in data.reports){
-                report = data.reports[dj];
-                if (report.id in reportsDict && report.status === 
reportsDict[report.id].status){
-                    continue;
+        $.get('/reports/list/')
+            .done(site.handleWith(function(data){
+                reports = viewModel.reports();
+                reportsDict = {};
+                for(j in reports){
+                    reportsDict[reports[j].id] = reports[j];
                 }
-                // if there's a difference, just replace the whole thing
-                viewModel.reports(data.reports);
-                return;
-            }
-        }).fail(site.failure);
+                for(dj in data.reports){
+                    report = data.reports[dj];
+                    if (report.id in reportsDict && report.status === 
reportsDict[report.id].status){
+                        continue;
+                    }
+                    // if there's a difference, just replace the whole thing
+                    viewModel.reports(data.reports);
+                    return;
+                }
+            }))
+            .fail(site.failure);
     },
 };

-- 
To view, visit https://gerrit.wikimedia.org/r/76559
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: If2ebcf6bc26d128b851d5361ea2f352e3528af3e
Gerrit-PatchSet: 1
Gerrit-Project: analytics/wikimetrics
Gerrit-Branch: master
Gerrit-Owner: Milimetric <[email protected]>
Gerrit-Reviewer: Milimetric <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to