home.py
146 lines
| 5.1 KiB
| text/x-python
|
PythonLexer
r861 | # -*- coding: utf-8 -*- | |||
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. | ||||
r1203 | # | |||
r636 | # 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. | ||||
r1203 | # | |||
r636 | # You should have received a copy of the GNU General Public License | |||
r1206 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
|
r4116 | """ | ||
rhodecode.controllers.home | ||||
~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||
Home controller for Rhodecode | ||||
:created_on: Feb 18, 2010 | ||||
:author: marcink | ||||
:copyright: (c) 2013 RhodeCode GmbH. | ||||
:license: GPLv3, see LICENSE for more details. | ||||
""" | ||||
r861 | ||||
import logging | ||||
r636 | from pylons import tmpl_context as c, request | |||
r2936 | from pylons.i18n.translation import _ | |||
r2242 | from webob.exc import HTTPBadRequest | |||
r3154 | from sqlalchemy.sql.expression import func | |||
r861 | ||||
r2936 | import rhodecode | |||
from rhodecode.lib import helpers as h | ||||
|
r4116 | from rhodecode.lib.utils import jsonify, conditional_cache | ||
r3705 | from rhodecode.lib.compat import json | |||
|
r4116 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | ||
r636 | from rhodecode.lib.base import BaseController, render | |||
|
r4116 | from rhodecode.model.db import Repository, RepoGroup | ||
r3154 | from rhodecode.model.repo import RepoModel | |||
r1158 | ||||
r636 | log = logging.getLogger(__name__) | |||
r1212 | ||||
r636 | class HomeController(BaseController): | |||
def __before__(self): | ||||
super(HomeController, self).__before__() | ||||
r3749 | @LoginRequired() | |||
r636 | def index(self): | |||
|
r4116 | c.groups = self.scm_model.get_repo_groups() | ||
r2130 | c.group = None | |||
r2936 | ||||
|
r3752 | c.repos_list = Repository.query()\ | ||
.filter(Repository.group_id == None)\ | ||||
.order_by(func.lower(Repository.repo_name))\ | ||||
.all() | ||||
r2936 | ||||
|
r3752 | repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list, | ||
admin=False) | ||||
#json used to render the grid | ||||
c.data = json.dumps(repos_data) | ||||
r2936 | ||||
r636 | return render('/index.html') | |||
r1158 | ||||
r3749 | @LoginRequired() | |||
|
r4116 | @jsonify | ||
def repo_switcher_data(self): | ||||
#wrapper for conditional cache | ||||
def _c(): | ||||
log.debug('generating switcher repo/groups list') | ||||
r1366 | all_repos = Repository.query().order_by(Repository.repo_name).all() | |||
|
r4116 | repo_iter = self.scm_model.get_repos(all_repos, simple=True) | ||
all_groups = RepoGroup.query().order_by(RepoGroup.group_name).all() | ||||
repo_groups_iter = self.scm_model.get_repo_groups(all_groups) | ||||
res = [{ | ||||
'text': _('Groups'), | ||||
'children': [ | ||||
{'id': obj.group_name, 'text': obj.group_name, | ||||
'type': 'group', 'obj': {}} for obj in repo_groups_iter] | ||||
}, { | ||||
'text': _('Repositories'), | ||||
'children': [ | ||||
{'id': obj['name'], 'text': obj['name'], | ||||
'type': 'repo', 'obj': obj['dbrepo']} for obj in repo_iter] | ||||
}] | ||||
data = { | ||||
'more': False, | ||||
'results': res | ||||
} | ||||
return data | ||||
if request.is_xhr: | ||||
condition = False | ||||
compute = conditional_cache('short_term', 'cache_desc', | ||||
condition=condition, func=_c) | ||||
return compute() | ||||
r1158 | else: | |||
r2970 | raise HTTPBadRequest() | |||
r1608 | ||||
r3749 | @LoginRequired() | |||
|
r4116 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | ||
'repository.admin') | ||||
r1608 | def branch_tag_switcher(self, repo_name): | |||
if request.is_xhr: | ||||
|
r4116 | c.rhodecode_db_repo = Repository.get_by_repo_name(repo_name) | ||
|
r3437 | if c.rhodecode_db_repo: | ||
c.rhodecode_repo = c.rhodecode_db_repo.scm_instance | ||||
return render('/switch_to_list.html') | ||||
raise HTTPBadRequest() | ||||
|
r4116 | |||
@LoginRequired() | ||||
@HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | ||||
'repository.admin') | ||||
@jsonify | ||||
def repo_refs_data(self, repo_name): | ||||
repo = Repository.get_by_repo_name(repo_name).scm_instance | ||||
res = [] | ||||
_branches = repo.branches.items() | ||||
if _branches: | ||||
res.append({ | ||||
'text': _('Branch'), | ||||
'children': [{'id': rev, 'text': name, 'type': 'branch'} for name, rev in _branches] | ||||
}) | ||||
_tags = repo.tags.items() | ||||
if _tags: | ||||
res.append({ | ||||
'text': _('Tag'), | ||||
'children': [{'id': rev, 'text': name, 'type': 'tag'} for name, rev in _tags] | ||||
}) | ||||
_bookmarks = repo.bookmarks.items() | ||||
if _bookmarks: | ||||
res.append({ | ||||
'text': _('Bookmark'), | ||||
'children': [{'id': rev, 'text': name, 'type': 'book'} for name, rev in _bookmarks] | ||||
}) | ||||
data = { | ||||
'more': False, | ||||
'results': res | ||||
} | ||||
return data | ||||