##// END OF EJS Templates
don't invalidate cache before handling hook
don't invalidate cache before handling hook

File last commit:

r3276:eaa887c6 beta
r3277:5440ea1d beta
Show More
summary.py
261 lines | 9.6 KiB | text/x-python | PythonLexer
extended trending languages to more entries, implemented new faster and "fancy"...
r763 # -*- coding: utf-8 -*-
"""
fixed spelling mistakes, and some minor docs bugs
r860 rhodecode.controllers.summary
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
extended trending languages to more entries, implemented new faster and "fancy"...
r763
Summary controller for Rhodecode
source code cleanup: remove trailing white space, normalize file endings
r1203
extended trending languages to more entries, implemented new faster and "fancy"...
r763 :created_on: Apr 18, 2010
:author: marcink
2012 copyrights
r1824 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
extended trending languages to more entries, implemented new faster and "fancy"...
r763 :license: GPLv3, see COPYING for more details.
"""
fixed license issue #149
r1206 # 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, either version 3 of the License, or
# (at your option) any later version.
source code cleanup: remove trailing white space, normalize file endings
r1203 #
renamed project to rhodecode
r547 # 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.
source code cleanup: remove trailing white space, normalize file endings
r1203 #
renamed project to rhodecode
r547 # You should have received a copy of the GNU General Public License
fixed license issue #149
r1206 # along with this program. If not, see <http://www.gnu.org/licenses/>.
extended trending languages to more entries, implemented new faster and "fancy"...
r763
implements #215 Repository view uses a README (text/markdown + rst)
r1605 import traceback
fixes #62, added option to disable statistics for each repository
r810 import calendar
import logging
fixes issue #385 clone by ID url was loosing proxy prefix in URL
r2099 import urllib
fixes #62, added option to disable statistics for each repository
r810 from time import mktime
implements #215 Repository view uses a README (text/markdown + rst)
r1605 from datetime import timedelta, date
configurable clone url...
r1652 from urlparse import urlparse
fixes #62, added option to disable statistics for each repository
r810
configurable clone url...
r1652 from pylons import tmpl_context as c, request, url, config
fixes #62, added option to disable statistics for each repository
r810 from pylons.i18n.translation import _
implemented #83 show repo size on summary page
r3246 from webob.exc import HTTPBadRequest
fixes #62, added option to disable statistics for each repository
r810
Cached readme generation...
r1607 from beaker.cache import cache_region, region_invalidate
implemented #83 show repo size on summary page
r3246 from rhodecode.lib.compat import product
from rhodecode.lib.vcs.exceptions import ChangesetError, EmptyRepositoryError, \
NodeDoesNotExistError
utils/conf...
r2109 from rhodecode.config.conf import ALL_READMES, ALL_EXTS, LANGUAGES_EXTENSIONS_MAP
Cached readme generation...
r1607 from rhodecode.model.db import Statistics, CacheInvalidation
implemented #83 show repo size on summary page
r3246 from rhodecode.lib.utils import jsonify
utils/conf...
r2109 from rhodecode.lib.utils2 import safe_unicode
implemented #83 show repo size on summary page
r3246 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator,\
NotAnonymous
another major codes rewrite:...
r1045 from rhodecode.lib.base import BaseRepoController, render
Bumped mercurial version to 2.3...
r2684 from rhodecode.lib.vcs.backends.base import EmptyChangeset
implements #215 Repository view uses a README (text/markdown + rst)
r1605 from rhodecode.lib.markup_renderer import MarkupRenderer
renamed project to rhodecode
r547 from rhodecode.lib.celerylib import run_task
utils/conf...
r2109 from rhodecode.lib.celerylib.tasks import get_commits_stats
Added dedicated repo pager to support reversed new way slicing method of vcs and get_changesets method
r1098 from rhodecode.lib.helpers import RepoPage
fixed issues with python2.5...
r1514 from rhodecode.lib.compat import json, OrderedDict
fixed readme rendering bug....
r2326 from rhodecode.lib.vcs.nodes import FileNode
fixes #62, added option to disable statistics for each repository
r810
renamed project to rhodecode
r547 log = logging.getLogger(__name__)
Cached readme generation...
r1607 README_FILES = [''.join([x[0][0], x[1][0]]) for x in
implements #215 Repository view uses a README (text/markdown + rst)
r1605 sorted(list(product(ALL_READMES, ALL_EXTS)),
key=lambda y:y[0][1] + y[1][1])]
pep8ify
r1212
- fixed issue with missing commits on some repos commands...
r1807
another major codes rewrite:...
r1045 class SummaryController(BaseRepoController):
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
changes for #56
r1171 def index(self, repo_name):
Fixes issue #201...
r1373 c.dbrepo = dbrepo = c.rhodecode_db_repo
changes for #56
r1171 c.following = self.scm_model.is_following_repo(repo_name,
pep8ify
r1212 self.rhodecode_user.user_id)
removed shortlog from main menu, as duplicated functionality of changelog,...
r637 def url_generator(**kw):
fixes issue #166, made clone-uri use the pylons build in url generators, that way it's more safe.
r1249 return url('shortlog_home', repo_name=repo_name, size=10, **kw)
removed shortlog from main menu, as duplicated functionality of changelog,...
r637
pep8ify
r1212 c.repo_changesets = RepoPage(c.rhodecode_repo, page=1,
items_per_page=10, url=url_generator)
#574 Show pull request status also in shortlog (if any)
r2884 page_revisions = [x.raw_id for x in list(c.repo_changesets)]
c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
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':
configurable clone url...
r1652 # for default(anonymous) user we don't need to pass credentials
Rewrite simehg for enabling cloning with raw url for anonymous access + some optimizations for making less queries when authenticating users....
r910 username = ''
password = ''
#49 Enabled anonymous access push and pull commands
r674 else:
replaced all global calls to template context (rhodecode_user), into instance attributes
r1121 username = str(self.rhodecode_user.username)
fixed wrong clone url for anonymous access
r936 password = '@'
#49 Enabled anonymous access push and pull commands
r674
configurable clone url...
r1652 parsed_url = urlparse(url.current(qualified=True))
optimized summary page for disabled stats
r1719
configurable clone url...
r1652 default_clone_uri = '{scheme}://{user}{pass}{netloc}{path}'
optimized summary page for disabled stats
r1719
uri_tmpl = config.get('clone_uri', default_clone_uri)
uri_tmpl = uri_tmpl.replace('{', '%(').replace('}', ')s')
fixes issue #385 clone by ID url was loosing proxy prefix in URL
r2099 decoded_path = safe_unicode(urllib.unquote(parsed_url.path))
implements #285: Implemented non changeable urls for clone url, and web views
r1813 uri_dict = {
philip.j@hostdime.com
Added uri encoding to the username so that usernames with '@' in them (such as email address/users from LDAP) will...
r3048 'user': urllib.quote(username),
implements #285: Implemented non changeable urls for clone url, and web views
r1813 'pass': password,
'scheme': parsed_url.scheme,
'netloc': parsed_url.netloc,
fixes issue #385 clone by ID url was loosing proxy prefix in URL
r2099 'path': decoded_path
implements #285: Implemented non changeable urls for clone url, and web views
r1813 }
fixes issue #385 clone by ID url was loosing proxy prefix in URL
r2099
implements #285: Implemented non changeable urls for clone url, and web views
r1813 uri = uri_tmpl % uri_dict
# generate another clone url by id
fixes issue #385 clone by ID url was loosing proxy prefix in URL
r2099 uri_dict.update(
{'path': decoded_path.replace(repo_name, '_%s' % c.dbrepo.repo_id)}
)
implements #285: Implemented non changeable urls for clone url, and web views
r1813 uri_id = uri_tmpl % uri_dict
optimized summary page for disabled stats
r1719
renamed project to rhodecode
r547 c.clone_repo_url = uri
implements #285: Implemented non changeable urls for clone url, and web views
r1813 c.clone_repo_url_id = uri_id
renamed project to rhodecode
r547 c.repo_tags = OrderedDict()
fixes issue #385 clone by ID url was loosing proxy prefix in URL
r2099 for name, hash_ in c.rhodecode_repo.tags.items()[:10]:
updated setup for all newest versions...
r643 try:
fixes issue #385 clone by ID url was loosing proxy prefix in URL
r2099 c.repo_tags[name] = c.rhodecode_repo.get_changeset(hash_)
updated setup for all newest versions...
r643 except ChangesetError:
fixes issue #385 clone by ID url was loosing proxy prefix in URL
r2099 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()
fixes issue #385 clone by ID url was loosing proxy prefix in URL
r2099 for name, hash_ in c.rhodecode_repo.branches.items()[:10]:
updated setup for all newest versions...
r643 try:
fixes issue #385 clone by ID url was loosing proxy prefix in URL
r2099 c.repo_branches[name] = c.rhodecode_repo.get_changeset(hash_)
updated setup for all newest versions...
r643 except ChangesetError:
fixes issue #385 clone by ID url was loosing proxy prefix in URL
r2099 c.repo_branches[name] = EmptyChangeset(hash_)
removed shortlog from main menu, as duplicated functionality of changelog,...
r637
fixed graph bug
r937 td = date.today() + timedelta(days=1)
td_1m = td - timedelta(days=calendar.mdays[td.month])
td_1y = td - timedelta(days=365)
removed shortlog from main menu, as duplicated functionality of changelog,...
r637
fixed graph bug
r937 ts_min_m = mktime(td_1m.timetuple())
ts_min_y = mktime(td_1y.timetuple())
ts_max_y = mktime(td.timetuple())
removed shortlog from main menu, as duplicated functionality of changelog,...
r637
another major code rafactor, reimplemented (almost from scratch)...
r1038 if dbrepo.enable_statistics:
optimized summary page for disabled stats
r1719 c.show_stats = True
fixes #62, added option to disable statistics for each repository
r810 c.no_data_msg = _('No data loaded yet')
added recursion limit for stats gathering, sometimes it did >1000 loops which lead to python throwing max recursion depth exceeded error....
r3276 recurse_limit = 500 # don't recurse more than 500 times when parsing
run_task(get_commits_stats, c.dbrepo.repo_name, ts_min_y,
ts_max_y, recurse_limit)
fixes #62, added option to disable statistics for each repository
r810 else:
optimized summary page for disabled stats
r1719 c.show_stats = False
fixes for vcs 0.2.0and new slicing methods
r1082 c.no_data_msg = _('Statistics are disabled for this repository')
renamed project to rhodecode
r547 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)\
another major code rafactor, reimplemented (almost from scratch)...
r1038 .filter(Statistics.repository == dbrepo)\
renamed project to rhodecode
r547 .scalar()
removed shortlog from main menu, as duplicated functionality of changelog,...
r637
added percentage of progress of gathered commit activity statistics
r1181 c.stats_percentage = 0
removed shortlog from main menu, as duplicated functionality of changelog,...
r637
renamed project to rhodecode
r547 if stats and stats.languages:
another major code rafactor, reimplemented (almost from scratch)...
r1038 c.no_data = False is dbrepo.enable_statistics
small fixes for git support
r1281 lang_stats_d = json.loads(stats.languages)
renamed project to rhodecode
r547 c.commit_data = stats.commit_activity
c.overview_data = stats.commit_activity_combined
fixed issues with python2.5...
r1514
changed list comprehesion into generator
r1499 lang_stats = ((x, {"count": y,
fixes issue #166, made clone-uri use the pylons build in url generators, that way it's more safe.
r1249 "desc": LANGUAGES_EXTENSIONS_MAP.get(x)})
changed list comprehesion into generator
r1499 for x, y in lang_stats_d.items())
fixed issue #165 trending source files are now stored in cache as ext only, and translated to description only when displaying, so future changes of mappings will take affect right away....
r1244
fixes issue #271...
r1890 c.trending_languages = json.dumps(
sorted(lang_stats, reverse=True, key=lambda k: k[1])[:10]
)
- fixed issue with missing commits on some repos commands...
r1807 last_rev = stats.stat_on_revision + 1
c.repo_last_rev = c.rhodecode_repo.count()\
added percentage of progress of gathered commit activity statistics
r1181 if c.rhodecode_repo.revisions else 0
if last_rev == 0 or c.repo_last_rev == 0:
pass
else:
c.stats_percentage = '%.2f' % ((float((last_rev)) /
c.repo_last_rev) * 100)
renamed project to rhodecode
r547 else:
c.commit_data = json.dumps({})
pep8ify
r1212 c.overview_data = json.dumps([[ts_min_y, 0], [ts_max_y, 10]])
renamed project to rhodecode
r547 c.trending_languages = json.dumps({})
small fixes for summary graph, added message about no data for the graph, when empty
r800 c.no_data = True
fixed issues with python2.5...
r1514
another major code rafactor, reimplemented (almost from scratch)...
r1038 c.enable_downloads = dbrepo.enable_downloads
implemented #84 downloads can be enabled/disabled per each repository from now.
r962 if c.enable_downloads:
changes for #56
r1171 c.download_options = self._get_download_links(c.rhodecode_repo)
added branch/tag options to download links in summary
r942
Readme renderer now uses landing_rev parameter to render the readme based on...
r2603 c.readme_data, c.readme_file = \
self.__get_readme_data(c.rhodecode_db_repo)
renamed project to rhodecode
r547 return render('summary/summary.html')
implemented #83 show repo size on summary page
r3246 @NotAnonymous()
@jsonify
def repo_size(self, repo_name):
if request.is_xhr:
return _('repository size: %s') % c.rhodecode_db_repo._repo_size()
else:
raise HTTPBadRequest()
Readme renderer now uses landing_rev parameter to render the readme based on...
r2603 def __get_readme_data(self, db_repo):
repo_name = db_repo.repo_name
implements #215 Repository view uses a README (text/markdown + rst)
r1605
Cached readme generation...
r1607 @cache_region('long_term')
def _get_readme_from_cache(key):
readme_data = None
readme_file = None
mover verbose logging in readme search function
r2633 log.debug('Looking for README file')
Cached readme generation...
r1607 try:
Readme renderer now uses landing_rev parameter to render the readme based on...
r2603 # get's the landing revision! or tip if fails
cs = db_repo.get_landing_changeset()
Don't scan for readmes if changeset is an EmptyChangeset
r2788 if isinstance(cs, EmptyChangeset):
raise EmptyRepositoryError()
Cached readme generation...
r1607 renderer = MarkupRenderer()
for f in README_FILES:
try:
readme = cs.get_node(f)
fixed readme rendering bug....
r2326 if not isinstance(readme, FileNode):
continue
Cached readme generation...
r1607 readme_file = f
mover verbose logging in readme search function
r2633 log.debug('Found README file `%s` rendering...' %
readme_file)
Cached readme generation...
r1607 readme_data = renderer.render(readme.content, f)
break
except NodeDoesNotExistError:
continue
except ChangesetError:
don't use db-repo instance on readme file fetching, use regular scm get_repo that doesn't hide exceptions
r2252 log.error(traceback.format_exc())
Cached readme generation...
r1607 pass
except EmptyRepositoryError:
pass
except Exception:
log.error(traceback.format_exc())
return readme_data, readme_file
don't use db-repo instance on readme file fetching, use regular scm get_repo that doesn't hide exceptions
r2252 key = repo_name + '_README'
Cached readme generation...
r1607 inv = CacheInvalidation.invalidate(key)
if inv is not None:
region_invalidate(_get_readme_from_cache, None, key)
CacheInvalidation.set_valid(inv.cache_key)
return _get_readme_from_cache(key)
implements #215 Repository view uses a README (text/markdown + rst)
r1605
added branch/tag options to download links in summary
r942 def _get_download_links(self, repo):
download_l = []
branches_group = ([], _("Branches"))
tags_group = ([], _("Tags"))
another major codes rewrite:...
r1045 for name, chs in c.rhodecode_repo.branches.items():
added branch/tag options to download links in summary
r942 #chs = chs.split(':')[-1]
branches_group[0].append((chs, name),)
download_l.append(branches_group)
another major codes rewrite:...
r1045 for name, chs in c.rhodecode_repo.tags.items():
added branch/tag options to download links in summary
r942 #chs = chs.split(':')[-1]
tags_group[0].append((chs, name),)
download_l.append(tags_group)
return download_l