##// END OF EJS Templates
changes transient to expunge on cached repo instances, due to odd very rare problems with previos approach.
changes transient to expunge on cached repo instances, due to odd very rare problems with previos approach.

File last commit:

r734:49eb69d7 beta
r753:ee801aa6 beta
Show More
summary.py
128 lines | 5.0 KiB | text/x-python | PythonLexer
renamed project to rhodecode
r547 #!/usr/bin/env python
# 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
# 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
"""
from pylons import tmpl_context as c, request, url
updated setup for all newest versions...
r643 from vcs.exceptions import ChangesetError
renamed project to rhodecode
r547 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
from rhodecode.lib.base import BaseController, render
updated setup for all newest versions...
r643 from rhodecode.lib.utils import OrderedDict, EmptyChangeset
Refactor codes for scm model...
r691 from rhodecode.model.scm import ScmModel
renamed project to rhodecode
r547 from rhodecode.model.db import Statistics
from webhelpers.paginate import Page
from rhodecode.lib.celerylib import run_task
from rhodecode.lib.celerylib.tasks import get_commits_stats
from datetime import datetime, timedelta
from time import mktime
import calendar
import logging
#37 fixed json imports for python2.5...
r592 try:
import json
except ImportError:
#python 2.5 compatibility
import simplejson as json
renamed project to rhodecode
r547 log = logging.getLogger(__name__)
class SummaryController(BaseController):
removed shortlog from main menu, as duplicated functionality of changelog,...
r637
renamed project to rhodecode
r547 @LoginRequired()
@HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
removed shortlog from main menu, as duplicated functionality of changelog,...
r637 'repository.admin')
renamed project to rhodecode
r547 def __before__(self):
super(SummaryController, self).__before__()
removed shortlog from main menu, as duplicated functionality of changelog,...
r637
renamed project to rhodecode
r547 def index(self):
implemented user dashboards, and following system.
r734 scm_model = ScmModel()
c.repo_info = scm_model.get_repo(c.repo_name)
c.following = scm_model.is_following_repo(c.repo_name,
c.rhodecode_user.user_id)
removed shortlog from main menu, as duplicated functionality of changelog,...
r637 def url_generator(**kw):
return url('shortlog_home', repo_name=c.repo_name, **kw)
c.repo_changesets = Page(c.repo_info, page=1, items_per_page=10,
url=url_generator)
renamed project to rhodecode
r547 e = request.environ
removed shortlog from main menu, as duplicated functionality of changelog,...
r637
#49 Enabled anonymous access push and pull commands
r674 if self.rhodecode_user.username == 'default':
password = ':default'
else:
password = ''
uri = u'%(protocol)s://%(user)s%(password)s@%(host)s%(prefix)s/%(repo_name)s' % {
renamed project to rhodecode
r547 'protocol': e.get('wsgi.url_scheme'),
renamed hg_app to rhodecode
r548 'user':str(c.rhodecode_user.username),
#49 Enabled anonymous access push and pull commands
r674 'password':password,
renamed project to rhodecode
r547 'host':e.get('HTTP_HOST'),
'prefix':e.get('SCRIPT_NAME'),
'repo_name':c.repo_name, }
c.clone_repo_url = uri
c.repo_tags = OrderedDict()
for name, hash in c.repo_info.tags.items()[:10]:
updated setup for all newest versions...
r643 try:
c.repo_tags[name] = c.repo_info.get_changeset(hash)
except ChangesetError:
c.repo_tags[name] = EmptyChangeset(hash)
removed shortlog from main menu, as duplicated functionality of changelog,...
r637
renamed project to rhodecode
r547 c.repo_branches = OrderedDict()
for name, hash in c.repo_info.branches.items()[:10]:
updated setup for all newest versions...
r643 try:
c.repo_branches[name] = c.repo_info.get_changeset(hash)
except ChangesetError:
c.repo_branches[name] = EmptyChangeset(hash)
removed shortlog from main menu, as duplicated functionality of changelog,...
r637
td = datetime.today() + timedelta(days=1)
renamed project to rhodecode
r547 y, m, d = td.year, td.month, td.day
removed shortlog from main menu, as duplicated functionality of changelog,...
r637
renamed project to rhodecode
r547 ts_min_y = mktime((y - 1, (td - timedelta(days=calendar.mdays[m])).month,
d, 0, 0, 0, 0, 0, 0,))
ts_min_m = mktime((y, (td - timedelta(days=calendar.mdays[m])).month,
d, 0, 0, 0, 0, 0, 0,))
removed shortlog from main menu, as duplicated functionality of changelog,...
r637
renamed project to rhodecode
r547 ts_max_y = mktime((y, m, d, 0, 0, 0, 0, 0, 0,))
removed shortlog from main menu, as duplicated functionality of changelog,...
r637
renamed project to rhodecode
r547 run_task(get_commits_stats, c.repo_info.name, ts_min_y, ts_max_y)
c.ts_min = ts_min_m
c.ts_max = ts_max_y
removed shortlog from main menu, as duplicated functionality of changelog,...
r637
renamed project to rhodecode
r547 stats = self.sa.query(Statistics)\
.filter(Statistics.repository == c.repo_info.dbrepo)\
.scalar()
removed shortlog from main menu, as duplicated functionality of changelog,...
r637
renamed project to rhodecode
r547 if stats and stats.languages:
lang_stats = json.loads(stats.languages)
c.commit_data = stats.commit_activity
c.overview_data = stats.commit_activity_combined
c.trending_languages = json.dumps(OrderedDict(
sorted(lang_stats.items(), reverse=True,
key=lambda k: k[1])[:2]
)
)
else:
c.commit_data = json.dumps({})
c.overview_data = json.dumps([[ts_min_y, 0], [ts_max_y, 0] ])
c.trending_languages = json.dumps({})
removed shortlog from main menu, as duplicated functionality of changelog,...
r637
renamed project to rhodecode
r547 return render('summary/summary.html')