diff pylons_app/controllers/summary.py @ 362:558eb7c5028f rhodecode-0.0.0.8.0

version bump to 0.8 hg app 0.8 new template. Add yui flot and graph into summary page. + various tweeks and patches into look of application
author Marcin Kuzminski <marcin@python-works.com>
date Sat, 24 Jul 2010 02:17:48 +0200
parents fdf9f6ee5217
children ec7b76d4bda4
line wrap: on
line diff
--- a/pylons_app/controllers/summary.py	Sat Jul 24 00:53:43 2010 +0200
+++ b/pylons_app/controllers/summary.py	Sat Jul 24 02:17:48 2010 +0200
@@ -2,7 +2,7 @@
 # encoding: utf-8
 # summary controller for pylons
 # Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
- 
+# 
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
 # as published by the Free Software Foundation; version 2
@@ -22,12 +22,18 @@
 summary controller for pylons
 @author: marcink
 """
+from datetime import datetime, timedelta
 from pylons import tmpl_context as c, request
 from pylons_app.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 from pylons_app.lib.base import BaseController, render
+from pylons_app.lib.helpers import person
+from pylons_app.lib.utils import OrderedDict
 from pylons_app.model.hg_model import HgModel
+from time import mktime
 from webhelpers.paginate import Page
+import calendar
 import logging
+
 log = logging.getLogger(__name__)
 
 class SummaryController(BaseController):
@@ -56,5 +62,77 @@
         c.repo_branches = {}
         for name, hash in c.repo_info.branches.items()[:10]:
             c.repo_branches[name] = c.repo_info.get_changeset(hash)
-                    
+
+        c.commit_data = self.__get_commit_stats(c.repo_info)
+        
         return render('summary/summary.html')
+
+
+
+    def __get_commit_stats(self, repo):
+        aggregate = OrderedDict()
+        
+        
+        #graph range
+        td = datetime.today() 
+        y = td.year
+        m = td.month
+        d = td.day
+        c.ts_min = mktime((y, (td - timedelta(days=calendar.mdays[m] - 1)).month, d, 0, 0, 0, 0, 0, 0,))
+        c.ts_max = mktime((y, m, d, 0, 0, 0, 0, 0, 0,))
+        
+        
+#        #generate this monhts keys
+#        dates_range = OrderedDict()
+#        year_range = range(2010, datetime.today().year + 1)
+#        month_range = range(1, datetime.today().month + 1)
+#        
+#
+#        
+#        for y in year_range:
+#            for m in month_range:
+#                for d in range(1, calendar.mdays[m] + 1):
+#                    k = '%s-%s-%s' % (y, m, d)
+#                    timetupple = [int(x) for x in k.split('-')]
+#                    timetupple.extend([0 for _ in xrange(6)])
+#                    k = mktime(timetupple)                    
+#                    dates_range[k] = 0
+        
+        def author_key_cleaner(k):
+            k = person(k)
+            return k
+                
+        for cs in repo:
+            k = '%s-%s-%s' % (cs.date.timetuple()[0], cs.date.timetuple()[1],
+                              cs.date.timetuple()[2])
+            timetupple = [int(x) for x in k.split('-')]
+            timetupple.extend([0 for _ in xrange(6)])
+            k = mktime(timetupple)
+            if aggregate.has_key(author_key_cleaner(cs.author)):
+                if aggregate[author_key_cleaner(cs.author)].has_key(k):
+                    aggregate[author_key_cleaner(cs.author)][k] += 1
+                else:
+                    #aggregate[author_key_cleaner(cs.author)].update(dates_range)
+                    if k >= c.ts_min and k <= c.ts_max:
+                        aggregate[author_key_cleaner(cs.author)][k] = 1
+            else:
+                if k >= c.ts_min and k <= c.ts_max:
+                    aggregate[author_key_cleaner(cs.author)] = OrderedDict()
+                    #aggregate[author_key_cleaner(cs.author)].update(dates_range)
+                    aggregate[author_key_cleaner(cs.author)][k] = 1
+        
+        d = ''
+        tmpl0 = u""""%s":%s"""
+        tmpl1 = u"""{label:"%s",data:%s},"""
+        for author in aggregate:
+            d += tmpl0 % (author.decode('utf8'),
+                          tmpl1 \
+                          % (author.decode('utf8'),
+                        [[x, aggregate[author][x]] for x in aggregate[author]]))
+        if d == '':
+            d = '"%s":{label:"%s",data:[[0,0],]}' \
+                % (author_key_cleaner(repo.contact),
+                   author_key_cleaner(repo.contact))
+        return d
+
+