You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2013/09/06 23:05:39 UTC

[01/10] git commit: [#6545] re-order app_config_id, label index so it can be shared

Updated Branches:
  refs/heads/db/6545 [created] 531d571de


[#6545] re-order app_config_id,label index so it can be shared

..shared with the main app_config_id index.  It was added in 1fc1d377
for faster ticket label lookup, but the order doesn't matter, so
better to share the first part of the index.


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/2501fb49
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/2501fb49
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/2501fb49

Branch: refs/heads/db/6545
Commit: 2501fb49a0466be98b5906dc30164031810cefa8
Parents: 56043b1
Author: Dave Brondsema <db...@slashdotmedia.com>
Authored: Wed Sep 4 13:53:35 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Fri Sep 6 15:47:57 2013 +0000

----------------------------------------------------------------------
 Allura/allura/model/artifact.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2501fb49/Allura/allura/model/artifact.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/artifact.py b/Allura/allura/model/artifact.py
index 294c3d0..31fb78a 100644
--- a/Allura/allura/model/artifact.py
+++ b/Allura/allura/model/artifact.py
@@ -61,7 +61,9 @@ class Artifact(MappedClass):
     class __mongometa__:
         session = artifact_orm_session
         name='artifact'
-        indexes = [ 'app_config_id', ('labels', 'app_config_id') ]
+        indexes = [
+            ('app_config_id', 'label'),
+        ]
         def before_save(data):
             if not getattr(artifact_orm_session._get(), 'skip_mod_date', False):
                 data['mod_date'] = datetime.utcnow()


[02/10] git commit: [#6545] [#5907] use status in last_post()

Posted by br...@apache.org.
[#6545] [#5907] use status in last_post()

* we only want to show approved posts
* it uses the (discussion_id, status, timestamp) index


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/aac6efc8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/aac6efc8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/aac6efc8

Branch: refs/heads/db/6545
Commit: aac6efc8943bff5b17f5eafeccaaace1cb667983
Parents: 32d7659
Author: Dave Brondsema <db...@slashdotmedia.com>
Authored: Wed Sep 4 15:24:44 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Fri Sep 6 15:47:58 2013 +0000

----------------------------------------------------------------------
 Allura/allura/model/discuss.py                                 | 5 +++--
 ForgeDiscussion/forgediscussion/tests/functional/test_forum.py | 5 ++---
 2 files changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/aac6efc8/Allura/allura/model/discuss.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/discuss.py b/Allura/allura/model/discuss.py
index 07a6269..e227b47 100644
--- a/Allura/allura/model/discuss.py
+++ b/Allura/allura/model/discuss.py
@@ -92,9 +92,10 @@ class Discussion(Artifact, ActivityObject):
 
     @LazyProperty
     def last_post(self):
-        # TODO add status: to query
         q = self.post_class().query.find(dict(
-                discussion_id=self._id))\
+                discussion_id=self._id,
+                status='ok'
+                ))\
             .sort('timestamp', pymongo.DESCENDING)\
             .limit(1)\
             .hint([('discussion_id', pymongo.ASCENDING),

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/aac6efc8/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
index 89efa7c..12238c8 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
@@ -353,9 +353,8 @@ class TestForum(TestController):
             assert r.location.startswith('http://localhost/p/test/discussion/testforum/thread/'), r.location
 
         def _check():
-            # FIXME fix [#5907]
-            #r = self.app.get('/discussion/')
-            #assert 'Test Zero Posts' not in r
+            r = self.app.get('/discussion/')
+            assert 'Test Zero Posts' not in r
             r = self.app.get('/discussion/testforum/')
             assert 'Test Zero Posts' not in r
 


[09/10] git commit: [#6545] bump ming version for query.aggregate

Posted by br...@apache.org.
[#6545] bump ming version for query.aggregate


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/a57cbaa0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/a57cbaa0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/a57cbaa0

Branch: refs/heads/db/6545
Commit: a57cbaa0b8ec90a561f2e7407037d4d1e44b3cdc
Parents: f664110
Author: Dave Brondsema <db...@slashdotmedia.com>
Authored: Fri Sep 6 20:37:03 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Fri Sep 6 20:37:03 2013 +0000

----------------------------------------------------------------------
 requirements-common.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a57cbaa0/requirements-common.txt
----------------------------------------------------------------------
diff --git a/requirements-common.txt b/requirements-common.txt
index 5e261a0..42bdadb 100644
--- a/requirements-common.txt
+++ b/requirements-common.txt
@@ -21,7 +21,7 @@ httplib2==0.7.4
 iso8601==0.1.4
 Jinja2==2.6
 Markdown==2.2.0
-Ming==0.3.7
+Ming==0.3.10
 oauth2==1.5.170
 # tg2 dep PasteDeploy must specified before TurboGears2, to avoid a version/allow-hosts problem
 Paste==1.7.5.1


[08/10] git commit: [#6545] tweak graph point size

Posted by br...@apache.org.
[#6545] tweak graph point size


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/3a75d47e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/3a75d47e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/3a75d47e

Branch: refs/heads/db/6545
Commit: 3a75d47e403ecbb194bd4aaaf2c5c790c59e194d
Parents: 75bc10b
Author: Dave Brondsema <db...@slashdotmedia.com>
Authored: Fri Sep 6 20:17:20 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Fri Sep 6 20:34:28 2013 +0000

----------------------------------------------------------------------
 .../templates/discussionforums/stats_graph.html         | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/3a75d47e/ForgeDiscussion/forgediscussion/templates/discussionforums/stats_graph.html
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/templates/discussionforums/stats_graph.html b/ForgeDiscussion/forgediscussion/templates/discussionforums/stats_graph.html
index e05506b..39e4ef8 100644
--- a/ForgeDiscussion/forgediscussion/templates/discussionforums/stats_graph.html
+++ b/ForgeDiscussion/forgediscussion/templates/discussionforums/stats_graph.html
@@ -65,9 +65,17 @@
   /*global chartProjectStats */
   $(document).ready(function () {
     var series = function(data){
+      var size;
+      if (data.length < 20) {
+        size = 3;
+      } else if (data.length < 100) {
+        size = 2;
+      } else  {
+        size = 1;
+      }
       return [{label: "Posts",
-              lines: {show: true, lineWidth: 3},
-              points: {show:true, radius:2, fill: true, fillColor: '#0685c6'},
+              lines: {show: true, lineWidth: size},
+              points: {show:true, radius:size, fill: true, fillColor: '#0685c6'},
               data: data, shadowSize: 0}
              ];
     };


[07/10] git commit: [#6545] add CSS for daterange picker, graph

Posted by br...@apache.org.
[#6545] add CSS for daterange picker, graph


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/75bc10b5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/75bc10b5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/75bc10b5

Branch: refs/heads/db/6545
Commit: 75bc10b55e2492bb6cf6f81085693f8bd18f70d2
Parents: dca43da
Author: Dave Brondsema <db...@slashdotmedia.com>
Authored: Fri Sep 6 19:58:15 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Fri Sep 6 20:34:28 2013 +0000

----------------------------------------------------------------------
 Allura/allura/nf/allura/css/site_style.css      |  77 +++++++++++++-
 .../public/nf/css/forge/ui.daterangepicker.css  | 103 +++++++++++++++++++
 Allura/allura/public/nf/js/stats.js             |  13 +--
 .../templates/discussionforums/stats_graph.html |   1 +
 rat-excludes.txt                                |   1 +
 5 files changed, 184 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/75bc10b5/Allura/allura/nf/allura/css/site_style.css
----------------------------------------------------------------------
diff --git a/Allura/allura/nf/allura/css/site_style.css b/Allura/allura/nf/allura/css/site_style.css
index 662b4f6..b85f54d 100644
--- a/Allura/allura/nf/allura/css/site_style.css
+++ b/Allura/allura/nf/allura/css/site_style.css
@@ -1905,7 +1905,6 @@ nav .ico {
   -ms-border-radius: 4px;
   -khtml-border-radius: 4px;
   border-radius: 4px;
-  z-index: 1;
   position: relative;
   width: 785px;
 }
@@ -2607,6 +2606,82 @@ div.attachment_thumb .file_type span {
   overflow: auto;
 }
 
+/* Stats Graph */
+
+#stats_date_picker {
+  text-align: right;
+  width: 340px;
+  display: inline;
+  float: left;
+  overflow: hidden;
+  *zoom: 1;
+  margin: 0 10px;
+}
+#stats_date_picker input {
+  width: 228px !important;
+}
+
+#stats-viz-container {
+  width: 700px;
+  display: inline;
+  float: left;
+  overflow: hidden;
+  *zoom: 1;
+  margin: 0 10px;
+  overflow: hidden;
+}
+
+#stats-viz {
+  height: 400px;
+}
+#stats-viz td {
+  border-width: 0;
+}
+
+#stats-viz .xaxis {
+  text-align: center;
+} 
+#stats-viz .yaxis {
+  -webkit-transform: rotate(270deg);  -moz-transform: rotate(270deg);
+  -ms-transform: rotate(270deg);
+  -o-transform: rotate(270deg);
+  transform: rotate(270deg);
+  max-width: 1em;
+}
+  
+#project_stats_holder {
+  width: 600px;
+  height: 350px;
+} 
+#project_stats_holder div.legend table {
+  width: auto;
+}
+#project_stats_holder .tickLabel {
+  margin-left: -4px;
+}
+#project_stats_holder .tooltip {
+  background: #3f3f3f;
+  border: 1px solid #222;
+  opacity: .8;
+  z-index: 1000;
+  padding: 5px 10px;
+  color: #fff;
+}
+#project_stats_holder .base, #project_stats_holder #content_base {
+  margin: 0;
+  background: none;
+  border-width: 0;
+}
+
+.chart-tooltip {
+  position: absolute;
+  display: none;
+  background: white;
+  border: 1px solid black;
+  border-radius: 0.5em;
+  padding: 0 0.3em;
+}
+
 /* Messages */
 .error, .notice, .success, .ok, .info {
   padding: .8em;

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/75bc10b5/Allura/allura/public/nf/css/forge/ui.daterangepicker.css
----------------------------------------------------------------------
diff --git a/Allura/allura/public/nf/css/forge/ui.daterangepicker.css b/Allura/allura/public/nf/css/forge/ui.daterangepicker.css
new file mode 100644
index 0000000..6c71e83
--- /dev/null
+++ b/Allura/allura/public/nf/css/forge/ui.daterangepicker.css
@@ -0,0 +1,103 @@
+/*styles for jquery ui daterangepicker plugin */
+
+.ui-daterangepickercontain {
+	position: absolute;
+	z-index: 999;
+}
+.ui-daterangepickercontain .ui-daterangepicker {
+	float: left;
+	padding: 5px !important;
+	width: auto;
+	display: inline;
+	background-image: none !important;
+	clear: left;
+}
+.ui-daterangepicker ul, .ui-daterangepicker .ranges, .ui-daterangepicker .range-start, .ui-daterangepicker .range-end {
+	float: left;
+	padding: 0;
+	margin: 0;
+}
+.ui-daterangepicker .ranges {
+	width: auto;
+	position: relative;
+	padding: 5px 5px 40px 0;
+	margin-left: 10px;
+}
+.ui-daterangepicker .range-start, .ui-daterangepicker .range-end {
+	margin-left: 5px;
+}
+.ui-daterangepicker button.btnDone {
+	margin: 0 5px 5px 0;
+	position: absolute;
+	bottom: 0;
+	right: 0;
+	clear: both;
+	cursor: pointer;
+	font-size: 1.1em;
+}
+.ui-daterangepicker ul {
+	width: 17.6em;
+	background: none;
+	border: 0;
+}
+.ui-daterangepicker li {
+	list-style: none;
+	padding: 1px;
+	cursor: pointer;
+	margin: 1px 0;
+}
+.ui-daterangepicker li.ui-state-hover, .ui-daterangepicker li.ui-state-active {
+	padding: 0;
+}
+.ui-daterangepicker li.preset_0 {
+	margin-top: 1.5em !important;
+}
+.ui-daterangepicker .ui-widget-content a {
+	text-decoration: none !important;
+}
+.ui-daterangepicker li a {
+	font-weight: normal;
+	margin: .3em .5em;
+	display: block;
+}
+.ui-daterangepicker li span {
+	float: right;
+	margin: .3em .2em;
+}
+.ui-daterangepicker .title-start, .ui-daterangepicker .title-end {
+	display: block;
+	margin: 0 0 .2em;
+	font-size: 1em;
+	padding: 0 4px 2px;
+}
+.ui-daterangepicker .ui-datepicker-inline {
+	font-size: 1em;
+}
+.ui-daterangepicker-arrows {
+	padding: 2px;
+	width: 204px;
+	position: relative;
+}
+.ui-daterangepicker-arrows input.ui-rangepicker-input {
+	width: 158px;
+	margin: 0 2px 0 20px;
+	padding: 2px;
+	height: 1.1em;
+}
+.ui-daterangepicker-arrows .ui-daterangepicker-prev, .ui-daterangepicker-arrows .ui-daterangepicker-next {
+	position: absolute;
+	top: 2px; 
+	padding: 1px;
+}
+.ui-daterangepicker-arrows .ui-daterangepicker-prev {
+	left: 2px;
+}
+.ui-daterangepicker-arrows .ui-daterangepicker-next {
+	right: 2px;
+}
+.ui-daterangepicker-arrows .ui-daterangepicker-prev:hover, 
+.ui-daterangepicker-arrows .ui-daterangepicker-next:hover,
+.ui-daterangepicker-arrows .ui-daterangepicker-prev:focus, 
+.ui-daterangepicker-arrows .ui-daterangepicker-next:focus {
+	padding: 0;
+}

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/75bc10b5/Allura/allura/public/nf/js/stats.js
----------------------------------------------------------------------
diff --git a/Allura/allura/public/nf/js/stats.js b/Allura/allura/public/nf/js/stats.js
index 72e12dc..efbf938 100644
--- a/Allura/allura/public/nf/js/stats.js
+++ b/Allura/allura/public/nf/js/stats.js
@@ -100,25 +100,18 @@ function chartProjectStats(url, params, series, checkEmpty, tooltipFormat){
         if (previousPoint !== item.dataIndex) {
           previousPoint = item.dataIndex;
 
-          $("#tooltip").remove();
+          $(".chart-tooltip").remove();
           var x = item.datapoint[0].toFixed(0),
           y = item.datapoint[1].toFixed(0);
 
-          $('<div id="tooltip" class="tooltip">' + tooltipFormat(x,y,item) + '</div>').css( {
-            position: 'absolute',
-            display: 'none',
+          $('<div class="chart-tooltip">' + tooltipFormat(x,y,item) + '</div>').css( {
             top: item.pageY - 5,
             left: item.pageX + 5,
-            zIndex: 1,
-            background: 'white',
-            border: '1px solid black',
-            borderRadius: '0.5em',
-            padding: '0 0.3em',
           }).appendTo("body").fadeIn(200);
         }
       }
       else {
-        $("#tooltip").remove();
+        $(".chart-tooltip").remove();
         previousPoint = null;
       }
   });

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/75bc10b5/ForgeDiscussion/forgediscussion/templates/discussionforums/stats_graph.html
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/templates/discussionforums/stats_graph.html b/ForgeDiscussion/forgediscussion/templates/discussionforums/stats_graph.html
index a6587b3..e05506b 100644
--- a/ForgeDiscussion/forgediscussion/templates/discussionforums/stats_graph.html
+++ b/ForgeDiscussion/forgediscussion/templates/discussionforums/stats_graph.html
@@ -54,6 +54,7 @@
 
 {% block extra_css %}
 <link rel="stylesheet" type="text/css" href="{{g.forge_static('css/smoothness/jquery-ui-1.8.4.custom.css')}}"/>
+<link rel="stylesheet" type="text/css" href="{{g.forge_static('css/forge/ui.daterangepicker.css')}}"/>
 {% endblock %}
 
 {% block extra_js %}

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/75bc10b5/rat-excludes.txt
----------------------------------------------------------------------
diff --git a/rat-excludes.txt b/rat-excludes.txt
index d62c09f..30ded2a 100644
--- a/rat-excludes.txt
+++ b/rat-excludes.txt
@@ -22,6 +22,7 @@ Allura/allura/lib/widgets/resources/js/jquery.textarea.js
 Allura/allura/lib/widgets/resources/js/jquery.tools.min.js
 Allura/allura/public/nf/css/blueprint/
 Allura/allura/public/nf/css/forge/accordion.css
+Allura/allura/public/nf/css/forge/ui.daterangepicker.css
 Allura/allura/public/nf/css/smoothness/jquery-ui-1.8.4.custom.css
 Allura/allura/public/nf/images/beta_sf.psd
 Allura/allura/public/nf/js/jquery-base.js


[06/10] git commit: [#6545] remove SF-specific ticket graph (was deteriorating anyway)

Posted by br...@apache.org.
[#6545] remove SF-specific ticket graph (was deteriorating anyway)


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/dca43da2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/dca43da2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/dca43da2

Branch: refs/heads/db/6545
Commit: dca43da21bf113d23bd293c6657b5011996deeb6
Parents: 9aef835
Author: Dave Brondsema <db...@slashdotmedia.com>
Authored: Fri Sep 6 19:37:49 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Fri Sep 6 20:34:28 2013 +0000

----------------------------------------------------------------------
 .../forgetracker/templates/tracker/stats.html   | 55 +-------------------
 ForgeTracker/forgetracker/tracker_main.py       | 27 +---------
 2 files changed, 2 insertions(+), 80 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/dca43da2/ForgeTracker/forgetracker/templates/tracker/stats.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/stats.html b/ForgeTracker/forgetracker/templates/tracker/stats.html
index 6351cf7..9db3fb3 100644
--- a/ForgeTracker/forgetracker/templates/tracker/stats.html
+++ b/ForgeTracker/forgetracker/templates/tracker/stats.html
@@ -41,57 +41,4 @@
 <li>7 days: {{week_comments}}</li>
 <li>14 days: {{fortnight_comments}}</li>
 <li>30 days: {{month_comments}}</li>
-</ul>
-{% if show_stats %}
-<h2>Open and closed tickets over time</h2>
-<form class="bp" action="{{request.path_url}}">
-  <div id="stats_date_picker">
-    <label for="dates">Date Range: </label>
-    <input value="{{dates}}" type="text" class="text ui-corner-all" name="dates" id="dates">
-  </div>
-</form>
-
-<div id="stats-viz-container" class="project_stats">
-  <div id="stats-viz" class="ui-corner-left ui-corner-br">
-    <table>
-      <tr>
-        <td class="yaxis">Tickets</td>
-        <td>
-          <div id="project_stats_holder">
-            <div id="grid">
-                <div class="busy"></div>
-            </div>
-          </div>
-        </td>
-      </tr>
-      <tr>
-        <td colspan="2" class="xaxis">Date</td>
-      </tr>
-    </table>
-  </div>
-</div>
-{% endif %}
-{% endblock %}
-{% block extra_js %}
-{% if show_stats %}
-<script type="text/javascript" src="{{g.forge_static('js/jquery.flot.js')}}"></script>
-<script type="text/javascript" src="{{g.forge_static('js/jquery.daterangepicker.js')}}"></script>
-<script type="text/javascript" src="{{g.forge_static('js/stats.js')}}"></script>
-<script type="text/javascript">
-  /*global chartProjectStats */
-  $(document).ready(function () {
-    var series = function(data){
-      return [{label: "Opened", lines: {show: true, lineWidth: 3}, points: {show:true, radius:2, fill: true, fillColor: '#0685c6'}, data: data.opened, shadowSize: 0},
-              {label: "Closed", lines: {show: true, lineWidth: 3}, points: {show:true, radius:2, fill: true, fillColor: '#87c706'}, data: data.closed, shadowSize: 0}];
-    };
-    var checkEmpty = function(data){
-      return !data.opened && !data.closed;
-    };
-    var tooltipFormat = function(x,y,item){
-      return y + " tickets";
-    };
-    chartProjectStats('{{c.app.url}}stats_data',{},series,checkEmpty,tooltipFormat);
-  });
-</script>
-{% endif %}
-{% endblock %}
\ No newline at end of file
+</ul>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/dca43da2/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 4f2d7d2..3727b58 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -57,7 +57,6 @@ from allura.lib import widgets as w
 from allura.lib import validators as V
 from allura.lib.widgets import form_fields as ffw
 from allura.lib.widgets.subscriptions import SubscribeForm
-from allura.lib.zarkov_helpers import zero_fill_zarkov_result
 from allura.controllers import AppDiscussionController, AppDiscussionRestController
 from allura.controllers import attachments as ac
 from allura.controllers import BaseController
@@ -928,10 +927,6 @@ class RootController(BaseController, FeedController):
         if dates is None:
             today = datetime.utcnow()
             dates = "%s to %s" % ((today - timedelta(days=61)).strftime('%Y-%m-%d'), today.strftime('%Y-%m-%d'))
-        if c.app.config.get_tool_data('sfx', 'group_artifact_id') and config.get('zarkov.webservice_host'):
-            show_stats = True
-        else:
-            show_stats = False
         return dict(
                 now=str(now),
                 week_ago=str(week_ago),
@@ -949,28 +944,8 @@ class RootController(BaseController, FeedController):
                 closed=closed,
                 globals=globals,
                 dates=dates,
-                show_stats=show_stats)
+        )
 
-    @expose('json:')
-    def stats_data(self, begin=None, end=None, **kw):
-        if c.app.config.get_tool_data('sfx', 'group_artifact_id') and config.get('zarkov.webservice_host'):
-            if begin is None and end is None:
-                end_time = datetime.utcnow()
-                begin_time = (end_time - timedelta(days=61))
-                end = end_time.strftime('%Y-%m-%d')
-                begin = begin_time.strftime('%Y-%m-%d')
-            else:
-                end_time = datetime.strptime(end,'%Y-%m-%d')
-                begin_time = datetime.strptime(begin,'%Y-%m-%d')
-            time_interval = 'date'
-            if end_time - begin_time > timedelta(days=183):
-                time_interval = 'month'
-            q_filter = 'group-tracker-%s/%s/%s/' % (time_interval,c.project.get_tool_data('sfx', 'group_id'),c.app.config.get_tool_data('sfx', 'group_artifact_id'))
-            params = urlencode({'data': '{"c":"tracker","b":"'+q_filter+begin+'","e":"'+q_filter+end+'"}'})
-            read_zarkov = json.load(urlopen(config.get('zarkov.webservice_host')+'/q', params))
-            return zero_fill_zarkov_result(read_zarkov, time_interval, begin, end)
-        else:
-            return dict()
 
     @expose()
     @validate(W.subscribe_form)


[04/10] git commit: [#6545] Add graph of forum posts

Posted by br...@apache.org.
[#6545] Add graph of forum posts


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/9aef835c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/9aef835c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/9aef835c

Branch: refs/heads/db/6545
Commit: 9aef835c6384d117b50196155308368d8e23e89b
Parents: aac6efc
Author: Dave Brondsema <db...@slashdotmedia.com>
Authored: Wed Sep 4 22:06:19 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Fri Sep 6 20:34:20 2013 +0000

----------------------------------------------------------------------
 Allura/allura/lib/helpers.py                    |  6 ++
 Allura/allura/public/nf/js/stats.js             | 29 ++++---
 .../forgediscussion/controllers/root.py         | 81 +++++++++++++++++++-
 ForgeDiscussion/forgediscussion/forum_main.py   |  2 +-
 .../templates/discussionforums/stats_graph.html | 79 +++++++++++++++++++
 .../forgetracker/templates/tracker/stats.html   |  4 -
 6 files changed, 184 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9aef835c/Allura/allura/lib/helpers.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/helpers.py b/Allura/allura/lib/helpers.py
index 0e13fad..9c3d9e4 100644
--- a/Allura/allura/lib/helpers.py
+++ b/Allura/allura/lib/helpers.py
@@ -1006,3 +1006,9 @@ def iter_entry_points(group, *a, **kw):
     for ep in pkg_resources.iter_entry_points(group, *a, **kw):
         if ep.name not in disabled:
             yield ep
+
+
+# http://stackoverflow.com/a/1060330/79697
+def daterange(start_date, end_date):
+    for n in range(int((end_date - start_date).days)):
+        yield start_date + timedelta(n)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9aef835c/Allura/allura/public/nf/js/stats.js
----------------------------------------------------------------------
diff --git a/Allura/allura/public/nf/js/stats.js b/Allura/allura/public/nf/js/stats.js
index 2c803f6..72e12dc 100644
--- a/Allura/allura/public/nf/js/stats.js
+++ b/Allura/allura/public/nf/js/stats.js
@@ -20,26 +20,30 @@
 /*global jQuery, $, addCommas */
 jQuery(function($) {
     // date range picker
-    if ($('.picker input').length) {
-        $('.picker input').daterangepicker({
+    var input = $('#stats_date_picker input');
+    if (input.length) {
+        input.daterangepicker({
             onOpen: function() {
-                $('.picker input')[0].prev_value = $('.picker input').val();
+                input[0].prev_value = input.val();
             },
             onClose: function() {
-                if ($('.picker input')[0].prev_value !== $('.picker input').val()) {
-                    $('.picker input').parents('form').submit();
-                    //console.log('close',$('.picker input').val());
+                if (input[0].prev_value !== input.val()) {
+                    input.parents('form').submit();
                 }
             },
             rangeSplitter: 'to',
             dateFormat: 'yy-mm-dd', // yy is 4 digit
-            earliestDate: new Date($('.picker input').attr('data-start-date')),
+            earliestDate: new Date(input.attr('data-start-date')),
             latestDate: new Date()
         });
     }
 });
 
 function chartProjectStats(url, params, series, checkEmpty, tooltipFormat){
+    var timeformat = "%y-%0m-%0d";
+    tooltipFormat = tooltipFormat || function(x,y,item) {
+        return y + " on " + $.plot.formatDate(new Date(parseInt(x, 10)), timeformat);
+    };
     var holder = $('#stats-viz');
     var dates = $('#dates').val().split(' to ');
     var begin = Date.parse(dates[0]).setTimezoneOffset(0);
@@ -64,7 +68,7 @@ function chartProjectStats(url, params, series, checkEmpty, tooltipFormat){
             colors: ['#0685c6','#87c706','#c7c706','#c76606'],
             xaxis:{
               mode: "time",
-              timeformat: "%y-%0m-%0d",
+              timeformat: timeformat,
               minTickSize: [1, "day"],
               min: begin,
               max: end,
@@ -103,8 +107,13 @@ function chartProjectStats(url, params, series, checkEmpty, tooltipFormat){
           $('<div id="tooltip" class="tooltip">' + tooltipFormat(x,y,item) + '</div>').css( {
             position: 'absolute',
             display: 'none',
-            top: item.pageY + 5,
-            left: item.pageX + 5
+            top: item.pageY - 5,
+            left: item.pageX + 5,
+            zIndex: 1,
+            background: 'white',
+            border: '1px solid black',
+            borderRadius: '0.5em',
+            padding: '0 0.3em',
           }).appendTo("body").fadeIn(200);
         }
       }

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9aef835c/ForgeDiscussion/forgediscussion/controllers/root.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/controllers/root.py b/ForgeDiscussion/forgediscussion/controllers/root.py
index fa0e97b..9250ad0 100644
--- a/ForgeDiscussion/forgediscussion/controllers/root.py
+++ b/ForgeDiscussion/forgediscussion/controllers/root.py
@@ -18,10 +18,12 @@
 import json
 import logging
 from urllib import unquote
-from itertools import imap
+from datetime import date, datetime, timedelta, time
+from time import mktime
+from collections import OrderedDict
 
 from tg import expose, validate, redirect, flash, response
-from tg.decorators import with_trailing_slash
+from tg.decorators import with_trailing_slash, without_trailing_slash
 from pylons import tmpl_context as c, app_globals as g
 from pylons import request
 from formencode import validators
@@ -212,6 +214,81 @@ class RootController(BaseController, DispatchIndex, FeedController):
              'Recent posts to %s' % app.config.options.mount_label,
             app.url)
 
+    @without_trailing_slash
+    @expose('jinja:forgediscussion:templates/discussionforums/stats_graph.html')
+    def stats(self, dates=None, **kw):
+        if not dates:
+            dates = "{} to {}".format(
+                (date.today() - timedelta(days=60)).strftime('%Y-%m-%d'),
+                date.today().strftime('%Y-%m-%d'))
+        return dict(
+            dates=dates,
+        )
+
+    @expose('json')
+    @validate(dict(
+        begin=h.DateTimeConverter(if_empty=None, if_invalid=None),
+        end=h.DateTimeConverter(if_empty=None, if_invalid=None),
+    ))
+    def stats_data(self, begin=None, end=None, **kw):
+        end = end or date.today()
+        begin = begin or end - timedelta(days=60)
+
+        discussion_id_q = {
+            '$in': [d._id for d in c.app.forums]
+        }
+        # must be ordered dict, so that sorting by this works properly
+        grouping = OrderedDict()
+        grouping['year'] = {'$year': '$timestamp'}
+        grouping['month'] = {'$month': '$timestamp'}
+        grouping['day'] = {'$dayOfMonth': '$timestamp'}
+        {
+            'year': {'$year': '$timestamp'},
+            'month': {'$month': '$timestamp'},
+            'day': {'$dayOfMonth': '$timestamp'},
+        }
+        mongo_data = model.ForumPost.query.aggregate([
+            {'$match': {
+                'discussion_id': discussion_id_q,
+                'status': 'ok',
+                'timestamp': {
+                    # convert date to datetime to make pymongo happy
+                    '$gte': datetime.combine(begin, time.min),
+                    '$lte': datetime.combine(end, time.max),
+                },
+            }},
+            {'$group': {
+                '_id': grouping,
+                'posts': {'$sum': 1},
+            }},
+            {'$sort': {
+                '_id': pymongo.ASCENDING,
+            }},
+        ])['result']
+
+        def reformat_data(mongo_data):
+            def item(day, val):
+                return [
+                    mktime(day.timetuple()) * 1000,
+                    val
+                ]
+
+            next_expected_date = begin
+            for d in mongo_data:
+                this_date = datetime(d['_id']['year'], d['_id']['month'], d['_id']['day'])
+                for day in h.daterange(next_expected_date, this_date):
+                    yield item(day, 0)
+                yield item(this_date, d['posts'])
+                next_expected_date = this_date + timedelta(days=1)
+            for day in h.daterange(next_expected_date, end + timedelta(days=1)):
+                yield item(day, 0)
+
+        return dict(
+            begin=begin,
+            end=end,
+            data=list(reformat_data(mongo_data)),
+        )
+
 
 class RootRestController(BaseController):
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9aef835c/ForgeDiscussion/forgediscussion/forum_main.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/forum_main.py b/ForgeDiscussion/forgediscussion/forum_main.py
index 54c4bef..2145037 100644
--- a/ForgeDiscussion/forgediscussion/forum_main.py
+++ b/ForgeDiscussion/forgediscussion/forum_main.py
@@ -172,6 +172,7 @@ class ForgeDiscussionApp(Application):
                 l.append(SitemapEntry(
                         'Mark as Spam', 'flag_as_spam',
                         ui_icon=g.icons['flag'], className='sidebar_thread_spam'))
+            l.append(SitemapEntry('Stats Graph', c.app.url + 'stats', ui_icon=g.icons['stats']))
             if forum_links:
                 l.append(SitemapEntry('Forums'))
                 l = l + forum_links
@@ -301,4 +302,3 @@ class ForumAdminController(DefaultAdminController):
     def add_forum(self, add_forum=None, **kw):
         f = utils.create_forum(self.app, add_forum)
         redirect(f.url())
-

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9aef835c/ForgeDiscussion/forgediscussion/templates/discussionforums/stats_graph.html
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/templates/discussionforums/stats_graph.html b/ForgeDiscussion/forgediscussion/templates/discussionforums/stats_graph.html
new file mode 100644
index 0000000..a6587b3
--- /dev/null
+++ b/ForgeDiscussion/forgediscussion/templates/discussionforums/stats_graph.html
@@ -0,0 +1,79 @@
+{#-
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-#}
+{% extends g.theme.master %}
+
+{% block title %}{{c.project.name}} / {{c.app.config.options.mount_label}} / Stats{% endblock %}
+
+{% block header %}Stats{% endblock %}
+
+{% block content %}
+<form>
+  <div id="stats_date_picker">
+    <label for="dates">Date Range: </label>
+    <input value="{{dates}}" type="text" class="text ui-corner-all" name="dates" id="dates">
+  </div>
+</form>
+
+<div id="stats-viz-container" class="project_stats">
+  <div id="stats-viz" class="ui-corner-left ui-corner-br">
+    <table>
+      <tr>
+        <td class="yaxis">Posts</td>
+        <td>
+          <div id="project_stats_holder">
+            <div id="grid">
+                <div class="busy"></div>
+            </div>
+          </div>
+        </td>
+      </tr>
+      <tr>
+        <td colspan="2" class="xaxis">Date</td>
+      </tr>
+    </table>
+  </div>
+</div>
+
+{% endblock %}
+
+{% block extra_css %}
+<link rel="stylesheet" type="text/css" href="{{g.forge_static('css/smoothness/jquery-ui-1.8.4.custom.css')}}"/>
+{% endblock %}
+
+{% block extra_js %}
+<script type="text/javascript" src="{{g.forge_static('js/jquery.flot.js')}}"></script>
+<script type="text/javascript" src="{{g.forge_static('js/jquery.daterangepicker.js')}}"></script>
+<script type="text/javascript" src="{{g.forge_static('js/stats.js')}}"></script>
+<script type="text/javascript">
+  /*global chartProjectStats */
+  $(document).ready(function () {
+    var series = function(data){
+      return [{label: "Posts",
+              lines: {show: true, lineWidth: 3},
+              points: {show:true, radius:2, fill: true, fillColor: '#0685c6'},
+              data: data, shadowSize: 0}
+             ];
+    };
+    var checkEmpty = function(data){
+      return !data.length;
+    };
+    chartProjectStats('{{c.app.url}}stats_data',{},series,checkEmpty);
+  });
+</script>
+{% endblock %}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9aef835c/ForgeTracker/forgetracker/templates/tracker/stats.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/stats.html b/ForgeTracker/forgetracker/templates/tracker/stats.html
index f4ac5b9..6351cf7 100644
--- a/ForgeTracker/forgetracker/templates/tracker/stats.html
+++ b/ForgeTracker/forgetracker/templates/tracker/stats.html
@@ -91,10 +91,6 @@
       return y + " tickets";
     };
     chartProjectStats('{{c.app.url}}stats_data',{},series,checkEmpty,tooltipFormat);
-
-    $('#dates').change(function(){
-      $("form.bp").submit();
-    });
   });
 </script>
 {% endif %}


[03/10] git commit: [#6545] remove old indexes and code; add 'timestamp' to discussion_id,status index

Posted by br...@apache.org.
[#6545] remove old indexes and code; add 'timestamp' to discussion_id,status index

* Message's index on timestamp was added in 76e8541c for stats on ticket comments,
  our new index is a better fit
* Message's slug & parent_id indexes were added in ebb201de for now-unused
  replies() and descendants() methods


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/32d76590
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/32d76590
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/32d76590

Branch: refs/heads/db/6545
Commit: 32d7659079e11d2622d4dbd80893ae43336b4b61
Parents: 2501fb4
Author: Dave Brondsema <db...@slashdotmedia.com>
Authored: Wed Sep 4 13:58:06 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Fri Sep 6 15:47:58 2013 +0000

----------------------------------------------------------------------
 Allura/allura/model/artifact.py              | 25 -----------------------
 Allura/allura/model/discuss.py               | 17 +++++++--------
 Allura/allura/tests/model/test_artifact.py   | 18 ----------------
 Allura/allura/tests/model/test_discussion.py |  1 -
 ForgeTracker/forgetracker/tracker_main.py    |  4 +++-
 5 files changed, 12 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/32d76590/Allura/allura/model/artifact.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/artifact.py b/Allura/allura/model/artifact.py
index 31fb78a..58e96c6 100644
--- a/Allura/allura/model/artifact.py
+++ b/Allura/allura/model/artifact.py
@@ -561,7 +561,6 @@ class Message(Artifact):
     class __mongometa__:
         session = artifact_orm_session
         name='message'
-        indexes = Artifact.__mongometa__.indexes + [ 'slug', 'parent_id', 'timestamp' ]
     type_s='Generic Message'
 
     _id=FieldProperty(str, if_missing=h.gen_message_id)
@@ -591,30 +590,6 @@ class Message(Artifact):
         from .auth import User
         return User.query.get(_id=self.author_id) or User.anonymous()
 
-    def reply(self):
-        new_id = h.gen_message_id()
-        slug, full_slug = self.make_slugs(self)
-        new_args = dict(
-            state(self).document,
-            _id=new_id,
-            slug=slug,
-            full_slug=full_slug,
-            parent_id=self._id,
-            timestamp=datetime.utcnow(),
-            author_id=c.user._id)
-        return self.__class__(**new_args)
-
-    def descendants(self):
-        q = self.query.find(dict(slug={'$gt':self.slug})).sort('slug')
-        for msg in q:
-            if msg.slug.startswith(self.slug):
-                yield msg
-            else:
-                break
-
-    def replies(self):
-        return self.query.find(dict(parent_id=self._id))
-
     def index(self):
         result = Artifact.index(self)
         author = self.author()

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/32d76590/Allura/allura/model/discuss.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/discuss.py b/Allura/allura/model/discuss.py
index 057bb97..07a6269 100644
--- a/Allura/allura/model/discuss.py
+++ b/Allura/allura/model/discuss.py
@@ -92,11 +92,15 @@ class Discussion(Artifact, ActivityObject):
 
     @LazyProperty
     def last_post(self):
+        # TODO add status: to query
         q = self.post_class().query.find(dict(
                 discussion_id=self._id))\
             .sort('timestamp', pymongo.DESCENDING)\
             .limit(1)\
-            .hint([('discussion_id', pymongo.ASCENDING), ('status', pymongo.ASCENDING)])
+            .hint([('discussion_id', pymongo.ASCENDING),
+                   ('status', pymongo.ASCENDING),
+                   ('timestamp', pymongo.ASCENDING),
+                   ])
             # hint is to try to force the index to be used, since mongo wouldn't select it sometimes
             # https://groups.google.com/forum/#!topic/mongodb-user/0TEqPfXxQU8
         return q.first()
@@ -358,12 +362,6 @@ class Thread(Artifact, ActivityObject):
         return self.query_posts(page=page, limit=limit,
                                 timestamp=timestamp, style=style).all()
 
-    def top_level_posts(self):
-        return self.post_class().query.find(dict(
-                thread_id=self._id,
-                parent_id=None,
-                status='ok'))
-
     def url(self):
         # Can't use self.discussion because it might change during the req
         discussion = self.discussion_class().query.get(_id=self.discussion_id)
@@ -441,7 +439,10 @@ class Post(Message, VersionedArtifact, ActivityObject):
     class __mongometa__:
         name = 'post'
         history_class = PostHistory
-        indexes = [('discussion_id', 'status'), 'thread_id']
+        indexes = [
+            ('discussion_id', 'status', 'timestamp'),  # used in general lookups, last_post, etc
+            'thread_id'
+        ]
     type_s = 'Post'
 
     thread_id = ForeignIdProperty(Thread)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/32d76590/Allura/allura/tests/model/test_artifact.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/model/test_artifact.py b/Allura/allura/tests/model/test_artifact.py
index d110d5e..639b247 100644
--- a/Allura/allura/tests/model/test_artifact.py
+++ b/Allura/allura/tests/model/test_artifact.py
@@ -158,24 +158,6 @@ def test_versioning():
     assert ss.text != pg.text
     assert pg.history().count() == 3
 
-@with_setup(setUp, tearDown)
-def test_messages():
-    m = Checkmessage()
-    assert m.author() == c.user
-    rm1 = m.reply()
-    assert rm1.slug.startswith(m.slug)
-    rm2 = rm1.reply()
-    rm3 = m.reply()
-    ThreadLocalORMSession.flush_all()
-    assert rm1 in list(m.descendants())
-    assert rm2 in list(m.descendants())
-    assert rm1 in list(m.replies())
-    assert rm2 not in list(m.replies())
-    idx = m.index()
-    assert 'author_user_name_t' in idx
-    assert 'author_display_name_t' in idx
-    assert 'timestamp_dt' in idx
-    assert m.shorthand_id() == m.slug
 
 @with_setup(setUp, tearDown)
 def test_messages_unknown_lookup():

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/32d76590/Allura/allura/tests/model/test_discussion.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/model/test_discussion.py b/Allura/allura/tests/model/test_discussion.py
index 34e550a..36731bc 100644
--- a/Allura/allura/tests/model/test_discussion.py
+++ b/Allura/allura/tests/model/test_discussion.py
@@ -108,7 +108,6 @@ def test_thread_methods():
     assert t.subscription
     t.subscription = False
     assert not t.subscription
-    assert t.top_level_posts().count() == 2
     assert t.post_count == 3
     jsn = t.__json__()
     assert '_id' in jsn

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/32d76590/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 8aa29f6..4f2d7d2 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -896,7 +896,9 @@ class RootController(BaseController, FeedController):
 
     def ticket_comments_since(self, when=None):
         q = dict(
-            discussion_id=c.app.config.discussion_id)
+            discussion_id=c.app.config.discussion_id,
+            status='ok',
+        )
         if when is not None:
             q['timestamp'] = {'$gte':when}
         return M.Post.query.find(q).count()


[05/10] git commit: [#6545] ignore query string when checking for active sidebar item

Posted by br...@apache.org.
[#6545] ignore query string when checking for active sidebar item


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/f6641101
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/f6641101
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/f6641101

Branch: refs/heads/db/6545
Commit: f66411014598f23683e88992ca32655b80baa95b
Parents: 3a75d47
Author: Dave Brondsema <db...@slashdotmedia.com>
Authored: Fri Sep 6 20:33:41 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Fri Sep 6 20:34:28 2013 +0000

----------------------------------------------------------------------
 Allura/allura/templates/jinja_master/sidebar_menu.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/f6641101/Allura/allura/templates/jinja_master/sidebar_menu.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/jinja_master/sidebar_menu.html b/Allura/allura/templates/jinja_master/sidebar_menu.html
index f8b9c8e..08beed2 100644
--- a/Allura/allura/templates/jinja_master/sidebar_menu.html
+++ b/Allura/allura/templates/jinja_master/sidebar_menu.html
@@ -23,7 +23,7 @@
       <ul class="sidebarmenu">
       {% do ul_active.append(True) %}
     {% endif %}
-    <li{% if request.url.find(s.url,-s.url.__len__()) != -1 %} class="active"{% endif %}>
+    <li{% if request.path.find(s.url,-s.url.__len__()) != -1 %} class="active"{% endif %}>
       <a href="{{s.url}}"{% if s.className %} class="{{s.className or ''}}"{% endif %}>{% if s.ui_icon %}<b data-icon="{{s.ui_icon.char}}" class="ico {{s.ui_icon.css}}"></b> {% endif %}<span{% if s.small != None %} class="has_small"{% endif %}>{{h.really_unicode(s.label)}}</span>{% if s.small != None %}<small>{{s.small}}</small>{% endif %}</a>
     </li>
   {% else %}


[10/10] git commit: [#6545] tests

Posted by br...@apache.org.
[#6545] tests


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/531d571d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/531d571d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/531d571d

Branch: refs/heads/db/6545
Commit: 531d571de4559aa6579553138a104e1d3dae4101
Parents: a57cbaa
Author: Dave Brondsema <db...@slashdotmedia.com>
Authored: Fri Sep 6 21:05:29 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Fri Sep 6 21:05:29 2013 +0000

----------------------------------------------------------------------
 Allura/allura/tests/test_helpers.py             |  7 +++-
 .../tests/functional/test_forum.py              | 43 ++++++++++++++++++++
 2 files changed, 49 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/531d571d/Allura/allura/tests/test_helpers.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/test_helpers.py b/Allura/allura/tests/test_helpers.py
index e9bc8f9..d4e5a0c 100644
--- a/Allura/allura/tests/test_helpers.py
+++ b/Allura/allura/tests/test_helpers.py
@@ -19,8 +19,9 @@
 
 from unittest import TestCase
 from os import path
-from mock import Mock, patch
+from datetime import datetime
 
+from mock import Mock, patch
 from pylons import tmpl_context as c
 from nose.tools import eq_, assert_equals
 from IPython.testing.decorators import skipif, module_not_available
@@ -428,3 +429,7 @@ def test_absurl_no_request():
 def test_absurl_with_request():
     assert_equals(h.absurl('/p/test/foobar'), 'https://www.mysite.com/p/test/foobar')
 
+
+def test_daterange():
+    assert_equals(list(h.daterange(datetime(2013, 1, 1), datetime(2013, 1, 4))),
+                 [datetime(2013, 1, 1), datetime(2013, 1, 2), datetime(2013, 1, 3)])
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/531d571d/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
index 12238c8..7980bee 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
@@ -762,3 +762,46 @@ class TestForum(TestController):
         assert u'téstforum'.encode('utf-8') in r
         r = self.app.get(u'/p/test/discussion/create_topic/téstforum/'.encode('utf-8'))
         assert u'<option value="téstforum" selected>Tést Forum</option>' in r
+
+
+class TestForumStats(TestController):
+
+    def test_stats(self):
+        self.app.get('/discussion/stats', status=200)
+
+    @mock.patch('ming.session.Session.aggregate')  # mim doesn't support aggregate
+    def test_stats_data(self, aggregate):
+        # partial data, some days are implicit 0
+        aggregate.return_value = {'result': [
+            {"_id": {
+                "year": 2013,
+                "month": 1,
+                "day": 2},
+             "posts": 3
+            },
+            {"_id": {
+                "year": 2013,
+                "month": 1,
+                "day": 3},
+             "posts": 5
+            },
+            {"_id": {
+                "year": 2013,
+                "month": 1,
+                "day": 5},
+             "posts": 2
+            },
+        ]}
+        r = self.app.get('/discussion/stats_data?begin=2013-01-01&end=2013-01-06')
+        assert_equal(r.json, {
+            'begin': '2013-01-01 00:00:00',
+            'end': '2013-01-06 00:00:00',
+            'data': [
+                [1356998400000, 0],
+                [1357084800000, 3],
+                [1357171200000, 5],
+                [1357257600000, 0],
+                [1357344000000, 2],
+                [1357430400000, 0],
+            ]
+        })