Mercurial > public > src > rhodecode
diff pylons_app/controllers/summary.py @ 388:558eb7c5028f v0.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 + +