##// END OF EJS Templates
moved loged in user propagation out of forms,...
moved loged in user propagation out of forms, update user model to get auto update last login. bugfix with redirect log fixed forms logic a little bit some other tweeks

File last commit:

r439:728fbb69 default
r442:d66a7fa7 default
Show More
summary.py
139 lines | 6.2 KiB | text/x-python | PythonLexer
licensing updates, code cleanups
r252 #!/usr/bin/env python
# encoding: utf-8
# summary controller for pylons
# Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
version bump to 0.8...
r362 #
licensing updates, code cleanups
r252 # 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
# of the License or (at your opinion) any later version of the license.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
"""
Created on April 18, 2010
summary controller for pylons
@author: marcink
"""
version bump to 0.8...
r362 from datetime import datetime, timedelta
some beaker cache changes, and added repr to models
r232 from pylons import tmpl_context as c, request
Implemented permissions into hg app, secured admin controllers, templates and repository specific controllers
r318 from pylons_app.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
r245 from pylons_app.lib.base import BaseController, render
version bump to 0.8...
r362 from pylons_app.lib.helpers import person
from pylons_app.lib.utils import OrderedDict
switched filters into webhelpers for easy of usage....
r282 from pylons_app.model.hg_model import HgModel
version bump to 0.8...
r362 from time import mktime
switched filters into webhelpers for easy of usage....
r282 from webhelpers.paginate import Page
version bump to 0.8...
r362 import calendar
Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user....
r191 import logging
version bump to 0.8...
r362
Marcin Kuzminski
Moved summary to seperate controller,...
r82 log = logging.getLogger(__name__)
class SummaryController(BaseController):
Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user....
r191
@LoginRequired()
Implemented permissions into hg app, secured admin controllers, templates and repository specific controllers
r318 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
'repository.admin')
Marcin Kuzminski
Moved summary to seperate controller,...
r82 def __before__(self):
Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user....
r191 super(SummaryController, self).__before__()
Implemented permissions into hg app, secured admin controllers, templates and repository specific controllers
r318
Marcin Kuzminski
Moved summary to seperate controller,...
r82 def index(self):
hg_model = HgModel()
c.repo_info = hg_model.get_repo(c.repo_name)
switched filters into webhelpers for easy of usage....
r282 c.repo_changesets = Page(list(c.repo_info[:10]), page=1, items_per_page=20)
Marcin Kuzminski
Moved summary to seperate controller,...
r82 e = request.environ
Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user....
r191 uri = u'%(protocol)s://%(user)s@%(host)s/%(repo_name)s' % {
some beaker cache changes, and added repr to models
r232 'protocol': e.get('wsgi.url_scheme'),
'user':str(c.hg_app_user.username),
'host':e.get('HTTP_HOST'),
'repo_name':c.repo_name, }
Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user....
r191 c.clone_repo_url = uri
fixed sorting of tags and branches. Fix made in vcs.
r389 c.repo_tags = OrderedDict()
fixed branches and tags, fetching for new vcs implementation
r277 for name, hash in c.repo_info.tags.items()[:10]:
c.repo_tags[name] = c.repo_info.get_changeset(hash)
fixed sorting of tags and branches. Fix made in vcs.
r389 c.repo_branches = OrderedDict()
fixed branches and tags, fetching for new vcs implementation
r277 for name, hash in c.repo_info.branches.items()[:10]:
c.repo_branches[name] = c.repo_info.get_changeset(hash)
version bump to 0.8...
r362
c.commit_data = self.__get_commit_stats(c.repo_info)
Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user....
r191 return render('summary/summary.html')
version bump to 0.8...
r362
def __get_commit_stats(self, repo):
aggregate = OrderedDict()
#graph range
some small changes to commit activity graph
r390 td = datetime.today() + timedelta(days=1)
fixed bug in summary graph
r439 y, m, d = td.year, td.month, td.day
c.ts_min = mktime((y, (td - timedelta(days=calendar.mdays[m])).month,
fixes translations, style updates....
r410 d, 0, 0, 0, 0, 0, 0,))
version bump to 0.8...
r362 c.ts_max = mktime((y, m, d, 0, 0, 0, 0, 0, 0,))
def author_key_cleaner(k):
k = person(k)
fixed bug when author had " in name, thus breaking the javascript data format...
r421 k = k.replace('"', "'") #for js data compatibilty
version bump to 0.8...
r362 return k
*** failed to import extension hggit: No module named hggit
added 200 last commits for summary page until issue #29 is resolved
r429 for cs in repo[:200]:#added limit 200 until fix #29 is made
version bump to 0.8...
r362 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):
fixes translations, style updates....
r410 aggregate[author_key_cleaner(cs.author)][k]["commits"] += 1
aggregate[author_key_cleaner(cs.author)][k]["added"] += len(cs.added)
aggregate[author_key_cleaner(cs.author)][k]["changed"] += len(cs.changed)
aggregate[author_key_cleaner(cs.author)][k]["removed"] += len(cs.removed)
version bump to 0.8...
r362 else:
#aggregate[author_key_cleaner(cs.author)].update(dates_range)
if k >= c.ts_min and k <= c.ts_max:
fixes translations, style updates....
r410 aggregate[author_key_cleaner(cs.author)][k] = {}
aggregate[author_key_cleaner(cs.author)][k]["commits"] = 1
aggregate[author_key_cleaner(cs.author)][k]["added"] = len(cs.added)
aggregate[author_key_cleaner(cs.author)][k]["changed"] = len(cs.changed)
aggregate[author_key_cleaner(cs.author)][k]["removed"] = len(cs.removed)
version bump to 0.8...
r362 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)
fixes translations, style updates....
r410 aggregate[author_key_cleaner(cs.author)][k] = {}
aggregate[author_key_cleaner(cs.author)][k]["commits"] = 1
aggregate[author_key_cleaner(cs.author)][k]["added"] = len(cs.added)
aggregate[author_key_cleaner(cs.author)][k]["changed"] = len(cs.changed)
aggregate[author_key_cleaner(cs.author)][k]["removed"] = len(cs.removed)
version bump to 0.8...
r362
d = ''
tmpl0 = u""""%s":%s"""
fixes translations, style updates....
r410 tmpl1 = u"""{label:"%s",data:%s,schema:["commits"]},"""
version bump to 0.8...
r362 for author in aggregate:
fixes translations, style updates....
r410
*** failed to import extension hggit: No module named hggit
removed decodes, thus it should be implemented on vcs side...
r428 d += tmpl0 % (author,
version bump to 0.8...
r362 tmpl1 \
*** failed to import extension hggit: No module named hggit
removed decodes, thus it should be implemented on vcs side...
r428 % (author,
fixes translations, style updates....
r410 [{"time":x,
"commits":aggregate[author][x]['commits'],
"added":aggregate[author][x]['added'],
"changed":aggregate[author][x]['changed'],
"removed":aggregate[author][x]['removed'],
} for x in aggregate[author]]))
version bump to 0.8...
r362 if d == '':
Implemented search using whoosh. Still as experimental option.
r406 d = '"%s":{label:"%s",data:[[0,1],]}' \
version bump to 0.8...
r362 % (author_key_cleaner(repo.contact),
author_key_cleaner(repo.contact))
return d