application: not use config.scan(), and replace all @add_view decorator into a explicit add_view call for faster app start.

This commit is contained in:
Milka Kuzminski 2020-12-08 17:04:39 +01:00
parent 9d122ba26f
commit eb5ec20934
89 changed files with 2537 additions and 1706 deletions

View file

@ -527,6 +527,14 @@ class jsonrpc_deprecated_method(object):
return result
def add_api_methods(config):
from rhodecode.api.views import (
deprecated_api, gist_api, pull_request_api, repo_api, repo_group_api,
server_api, search_api, testing_api, user_api, user_group_api)
config.scan('rhodecode.api.views')
def includeme(config):
plugin_module = 'rhodecode.api'
plugin_settings = get_plugin_settings(
@ -549,7 +557,8 @@ def includeme(config):
config.add_route(
'apiv2', plugin_settings.get('url', DEFAULT_URL), jsonrpc_call=True)
config.scan(plugin_module, ignore='rhodecode.api.tests')
# register some exception handling view
config.add_view(exception_view, context=JSONRPCBaseError)
config.add_notfound_view(exception_view, jsonrpc_method_not_found=True)
add_api_methods(config)

View file

@ -144,3 +144,5 @@ def includeme(config):
labs_active = str2bool(settings.get('labs_settings_active', False))
navigation_registry_instance = NavigationRegistry(labs_active=labs_active)
config.registry.registerUtility(navigation_registry_instance)
log.debug('Created new nabigation instance, %s', navigation_registry_instance)

File diff suppressed because it is too large Load diff

View file

@ -21,7 +21,6 @@
import logging
from pyramid.httpexceptions import HTTPNotFound
from pyramid.view import view_config
from rhodecode.apps._base import BaseAppView
from rhodecode.model.db import joinedload, UserLog
@ -34,15 +33,13 @@ log = logging.getLogger(__name__)
class AdminAuditLogsView(BaseAppView):
def load_default_context(self):
c = self._get_local_tmpl_context()
return c
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_audit_logs', request_method='GET',
renderer='rhodecode:templates/admin/admin_audit_logs.mako')
def admin_audit_logs(self):
c = self.load_default_context()
@ -76,9 +73,6 @@ class AdminAuditLogsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_audit_log_entry', request_method='GET',
renderer='rhodecode:templates/admin/admin_audit_log_entry.mako')
def admin_audit_log_entry(self):
c = self.load_default_context()
audit_log_id = self.request.matchdict['audit_log_id']

View file

@ -23,7 +23,6 @@ import logging
import formencode
import formencode.htmlfill
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPFound
from pyramid.renderers import render
from pyramid.response import Response
@ -41,17 +40,13 @@ log = logging.getLogger(__name__)
class AdminDefaultSettingsView(BaseAppView):
def load_default_context(self):
c = self._get_local_tmpl_context()
return c
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_defaults_repositories', request_method='GET',
renderer='rhodecode:templates/admin/defaults/defaults.mako')
def defaults_repository_show(self):
c = self.load_default_context()
c.backends = BACKENDS.keys()
@ -72,9 +67,6 @@ class AdminDefaultSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_defaults_repositories_update', request_method='POST',
renderer='rhodecode:templates/admin/defaults/defaults.mako')
def defaults_repository_update(self):
_ = self.request.translate
c = self.load_default_context()

View file

@ -21,7 +21,6 @@ import os
import logging
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
from rhodecode.apps._base import BaseAppView
from rhodecode.apps._base.navigation import navigation_list
@ -99,9 +98,6 @@ class ExceptionsTrackerView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_exception_tracker', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings.mako')
def browse_exceptions(self):
_ = self.request.translate
c = self.load_default_context()
@ -117,9 +113,6 @@ class ExceptionsTrackerView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_exception_tracker_show', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings.mako')
def exception_show(self):
_ = self.request.translate
c = self.load_default_context()
@ -132,9 +125,6 @@ class ExceptionsTrackerView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_settings_exception_tracker_delete_all', request_method='POST',
renderer='rhodecode:templates/admin/settings/settings.mako')
def exception_delete_all(self):
_ = self.request.translate
c = self.load_default_context()
@ -159,9 +149,6 @@ class ExceptionsTrackerView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_settings_exception_tracker_delete', request_method='POST',
renderer='rhodecode:templates/admin/settings/settings.mako')
def exception_delete(self):
_ = self.request.translate
c = self.load_default_context()

View file

@ -21,7 +21,6 @@
import logging
from pyramid.httpexceptions import HTTPFound, HTTPNotFound
from pyramid.view import view_config
from rhodecode.apps._base import BaseAppView
from rhodecode.lib import helpers as h
@ -39,9 +38,6 @@ class AdminMainView(BaseAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='admin_home', request_method='GET',
renderer='rhodecode:templates/admin/main.mako')
def admin_main(self):
c = self.load_default_context()
c.active = 'admin'
@ -52,9 +48,6 @@ class AdminMainView(BaseAppView):
return self._get_template_context(c)
@LoginRequired()
@view_config(route_name='pull_requests_global_0', request_method='GET')
@view_config(route_name='pull_requests_global_1', request_method='GET')
@view_config(route_name='pull_requests_global', request_method='GET')
def pull_requests(self):
"""
Global redirect for Pull Requests

View file

@ -21,8 +21,6 @@
import collections
import logging
from pyramid.view import view_config
from rhodecode.apps._base import BaseAppView
from rhodecode.apps._base.navigation import navigation_list
from rhodecode.lib.auth import (LoginRequired, HasPermissionAllDecorator)
@ -39,9 +37,6 @@ class OpenSourceLicensesAdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_open_source', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings.mako')
def open_source_licenses(self):
c = self.load_default_context()
c.active = 'open_source'

View file

@ -25,7 +25,6 @@ import formencode.htmlfill
import datetime
from pyramid.interfaces import IRoutesMapper
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPFound
from pyramid.renderers import render
from pyramid.response import Response
@ -59,9 +58,6 @@ class AdminPermissionsView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_permissions_application', request_method='GET',
renderer='rhodecode:templates/admin/permissions/permissions.mako')
def permissions_application(self):
c = self.load_default_context()
c.active = 'application'
@ -90,9 +86,6 @@ class AdminPermissionsView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_permissions_application_update', request_method='POST',
renderer='rhodecode:templates/admin/permissions/permissions.mako')
def permissions_application_update(self):
_ = self.request.translate
c = self.load_default_context()
@ -149,9 +142,6 @@ class AdminPermissionsView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_permissions_object', request_method='GET',
renderer='rhodecode:templates/admin/permissions/permissions.mako')
def permissions_objects(self):
c = self.load_default_context()
c.active = 'objects'
@ -174,9 +164,6 @@ class AdminPermissionsView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_permissions_object_update', request_method='POST',
renderer='rhodecode:templates/admin/permissions/permissions.mako')
def permissions_objects_update(self):
_ = self.request.translate
c = self.load_default_context()
@ -225,9 +212,6 @@ class AdminPermissionsView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_permissions_branch', request_method='GET',
renderer='rhodecode:templates/admin/permissions/permissions.mako')
def permissions_branch(self):
c = self.load_default_context()
c.active = 'branch'
@ -249,9 +233,6 @@ class AdminPermissionsView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_permissions_global', request_method='GET',
renderer='rhodecode:templates/admin/permissions/permissions.mako')
def permissions_global(self):
c = self.load_default_context()
c.active = 'global'
@ -274,9 +255,6 @@ class AdminPermissionsView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_permissions_global_update', request_method='POST',
renderer='rhodecode:templates/admin/permissions/permissions.mako')
def permissions_global_update(self):
_ = self.request.translate
c = self.load_default_context()
@ -327,9 +305,6 @@ class AdminPermissionsView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_permissions_ips', request_method='GET',
renderer='rhodecode:templates/admin/permissions/permissions.mako')
def permissions_ips(self):
c = self.load_default_context()
c.active = 'ips'
@ -342,9 +317,6 @@ class AdminPermissionsView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_permissions_overview', request_method='GET',
renderer='rhodecode:templates/admin/permissions/permissions.mako')
def permissions_overview(self):
c = self.load_default_context()
c.active = 'perms'
@ -355,9 +327,6 @@ class AdminPermissionsView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_permissions_auth_token_access', request_method='GET',
renderer='rhodecode:templates/admin/permissions/permissions.mako')
def auth_token_access(self):
from rhodecode import CONFIG
@ -415,9 +384,6 @@ class AdminPermissionsView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_permissions_ssh_keys', request_method='GET',
renderer='rhodecode:templates/admin/permissions/permissions.mako')
def ssh_keys(self):
c = self.load_default_context()
c.active = 'ssh_keys'
@ -426,9 +392,6 @@ class AdminPermissionsView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_permissions_ssh_keys_data', request_method='GET',
renderer='json_ext', xhr=True)
def ssh_keys_data(self):
_ = self.request.translate
self.load_default_context()
@ -498,9 +461,6 @@ class AdminPermissionsView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_permissions_ssh_keys_update', request_method='POST',
renderer='rhodecode:templates/admin/permissions/permissions.mako')
def ssh_keys_update(self):
_ = self.request.translate
self.load_default_context()

View file

@ -22,7 +22,7 @@ import logging
import psutil
import signal
from pyramid.view import view_config
from rhodecode.apps._base import BaseAppView
from rhodecode.apps._base.navigation import navigation_list
@ -84,9 +84,6 @@ class AdminProcessManagementView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_process_management', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings.mako')
def process_management(self):
_ = self.request.translate
c = self.load_default_context()
@ -99,9 +96,6 @@ class AdminProcessManagementView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_process_management_data', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings_process_management_data.mako')
def process_management_data(self):
_ = self.request.translate
c = self.load_default_context()
@ -111,9 +105,6 @@ class AdminProcessManagementView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_settings_process_management_signal',
request_method='POST', renderer='json_ext')
def process_management_signal(self):
pids = self.request.json.get('pids', [])
result = []
@ -155,9 +146,6 @@ class AdminProcessManagementView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_settings_process_management_master_signal',
request_method='POST', renderer='json_ext')
def process_management_master_signal(self):
pid_data = self.request.json.get('pid_data', {})
pid = safe_int(pid_data['pid'])

View file

@ -25,7 +25,7 @@ import formencode
import formencode.htmlfill
from pyramid.httpexceptions import HTTPFound, HTTPForbidden
from pyramid.view import view_config
from pyramid.renderers import render
from pyramid.response import Response
@ -96,9 +96,6 @@ class AdminRepoGroupsView(BaseAppView, DataGridAppView):
# `repo_group_list_data` via RepoGroupList
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='repo_groups', request_method='GET',
renderer='rhodecode:templates/admin/repo_groups/repo_groups.mako')
def repo_group_list(self):
c = self.load_default_context()
return self._get_template_context(c)
@ -106,9 +103,6 @@ class AdminRepoGroupsView(BaseAppView, DataGridAppView):
# permission check inside
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='repo_groups_data', request_method='GET',
renderer='json_ext', xhr=True)
def repo_group_list_data(self):
self.load_default_context()
column_map = {
@ -254,9 +248,6 @@ class AdminRepoGroupsView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
# perm checks inside
@view_config(
route_name='repo_group_new', request_method='GET',
renderer='rhodecode:templates/admin/repo_groups/repo_group_add.mako')
def repo_group_new(self):
c = self.load_default_context()
@ -296,9 +287,6 @@ class AdminRepoGroupsView(BaseAppView, DataGridAppView):
@NotAnonymous()
@CSRFRequired()
# perm checks inside
@view_config(
route_name='repo_group_create', request_method='POST',
renderer='rhodecode:templates/admin/repo_groups/repo_group_add.mako')
def repo_group_create(self):
c = self.load_default_context()
_ = self.request.translate

View file

@ -23,7 +23,7 @@ import formencode
import formencode.htmlfill
from pyramid.httpexceptions import HTTPFound, HTTPForbidden
from pyramid.view import view_config
from pyramid.renderers import render
from pyramid.response import Response
@ -52,7 +52,6 @@ class AdminReposView(BaseAppView, DataGridAppView):
def load_default_context(self):
c = self._get_local_tmpl_context()
return c
def _load_form_data(self, c):
@ -65,9 +64,6 @@ class AdminReposView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
# perms check inside
@view_config(
route_name='repos', request_method='GET',
renderer='rhodecode:templates/admin/repos/repos.mako')
def repository_list(self):
c = self.load_default_context()
return self._get_template_context(c)
@ -75,9 +71,6 @@ class AdminReposView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
# perms check inside
@view_config(
route_name='repos_data', request_method='GET',
renderer='json_ext', xhr=True)
def repository_list_data(self):
self.load_default_context()
column_map = {
@ -162,9 +155,6 @@ class AdminReposView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
# perms check inside
@view_config(
route_name='repo_new', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_add.mako')
def repository_new(self):
c = self.load_default_context()
@ -216,9 +206,6 @@ class AdminReposView(BaseAppView, DataGridAppView):
@NotAnonymous()
@CSRFRequired()
# perms check inside
@view_config(
route_name='repo_create', request_method='POST',
renderer='rhodecode:templates/admin/repos/repos.mako')
def repository_create(self):
c = self.load_default_context()

View file

@ -20,7 +20,7 @@
import logging
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPFound
from rhodecode.apps._base import BaseAppView
@ -37,17 +37,13 @@ log = logging.getLogger(__name__)
class AdminSessionSettingsView(BaseAppView):
def load_default_context(self):
c = self._get_local_tmpl_context()
return c
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_sessions', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_sessions(self):
c = self.load_default_context()
@ -71,8 +67,6 @@ class AdminSessionSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_settings_sessions_cleanup', request_method='POST')
def settings_sessions_cleanup(self):
_ = self.request.translate
expire_days = safe_int(self.request.params.get('expire_days'))

View file

@ -27,7 +27,7 @@ import formencode
import formencode.htmlfill
import rhodecode
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPFound, HTTPNotFound
from pyramid.renderers import render
from pyramid.response import Response
@ -68,7 +68,6 @@ class AdminSettingsView(BaseAppView):
c.labs_active = str2bool(
rhodecode.CONFIG.get('labs_settings_active', 'true'))
c.navlist = navigation_list(self.request)
return c
@classmethod
@ -109,9 +108,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_vcs', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_vcs(self):
c = self.load_default_context()
c.active = 'vcs'
@ -139,9 +135,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_settings_vcs_update', request_method='POST',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_vcs_update(self):
_ = self.request.translate
c = self.load_default_context()
@ -207,9 +200,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_settings_vcs_svn_pattern_delete', request_method='POST',
renderer='json_ext', xhr=True)
def settings_vcs_delete_svn_pattern(self):
delete_pattern_id = self.request.POST.get('delete_svn_pattern')
model = VcsSettingsModel()
@ -225,9 +215,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_mapping', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_mapping(self):
c = self.load_default_context()
c.active = 'mapping'
@ -245,9 +232,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_settings_mapping_update', request_method='POST',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_mapping_update(self):
_ = self.request.translate
c = self.load_default_context()
@ -274,12 +258,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings.mako')
@view_config(
route_name='admin_settings_global', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_global(self):
c = self.load_default_context()
c.active = 'global'
@ -299,12 +277,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_settings_update', request_method='POST',
renderer='rhodecode:templates/admin/settings/settings.mako')
@view_config(
route_name='admin_settings_global_update', request_method='POST',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_global_update(self):
_ = self.request.translate
c = self.load_default_context()
@ -359,9 +331,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_visual', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_visual(self):
c = self.load_default_context()
c.active = 'visual'
@ -379,9 +348,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_settings_visual_update', request_method='POST',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_visual_update(self):
_ = self.request.translate
c = self.load_default_context()
@ -441,9 +407,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_issuetracker', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_issuetracker(self):
c = self.load_default_context()
c.active = 'issuetracker'
@ -470,9 +433,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_settings_issuetracker_test', request_method='POST',
renderer='string', xhr=True)
def settings_issuetracker_test(self):
error_container = []
@ -490,9 +450,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_settings_issuetracker_update', request_method='POST',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_issuetracker_update(self):
_ = self.request.translate
self.load_default_context()
@ -527,9 +484,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_settings_issuetracker_delete', request_method='POST',
renderer='json_ext', xhr=True)
def settings_issuetracker_delete(self):
_ = self.request.translate
self.load_default_context()
@ -547,9 +501,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_email', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_email(self):
c = self.load_default_context()
c.active = 'email'
@ -568,9 +519,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_settings_email_update', request_method='POST',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_email_update(self):
_ = self.request.translate
c = self.load_default_context()
@ -600,9 +548,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_hooks', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_hooks(self):
c = self.load_default_context()
c.active = 'hooks'
@ -624,12 +569,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_settings_hooks_update', request_method='POST',
renderer='rhodecode:templates/admin/settings/settings.mako')
@view_config(
route_name='admin_settings_hooks_delete', request_method='POST',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_hooks_update(self):
_ = self.request.translate
c = self.load_default_context()
@ -671,9 +610,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_search', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_search(self):
c = self.load_default_context()
c.active = 'search'
@ -685,9 +621,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_automation', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_automation(self):
c = self.load_default_context()
c.active = 'automation'
@ -696,9 +629,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_labs', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_labs(self):
c = self.load_default_context()
if not c.labs_active:
@ -720,9 +650,6 @@ class AdminSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_settings_labs_update', request_method='POST',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_labs_update(self):
_ = self.request.translate
c = self.load_default_context()

View file

@ -20,7 +20,7 @@
import logging
from pyramid.view import view_config
from rhodecode.apps._base import BaseAppView
from rhodecode.apps.svn_support.utils import generate_mod_dav_svn_config
@ -30,14 +30,11 @@ from rhodecode.lib.auth import (
log = logging.getLogger(__name__)
class SvnConfigAdminSettingsView(BaseAppView):
class AdminSvnConfigView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='admin_settings_vcs_svn_generate_cfg',
request_method='POST', renderer='json')
def vcs_svn_generate_config(self):
_ = self.request.translate
try:

View file

@ -21,7 +21,7 @@
import logging
import urllib2
from pyramid.view import view_config
import rhodecode
from rhodecode.apps._base import BaseAppView
@ -42,9 +42,6 @@ class AdminSystemInfoSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_system', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings.mako')
def settings_system_info(self):
_ = self.request.translate
c = self.load_default_context()
@ -169,9 +166,6 @@ class AdminSystemInfoSettingsView(BaseAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='admin_settings_system_update', request_method='GET',
renderer='rhodecode:templates/admin/settings/settings_system_update.mako')
def settings_system_info_check_update(self):
_ = self.request.translate
c = self.load_default_context()

View file

@ -24,7 +24,7 @@ import formencode
import formencode.htmlfill
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
from pyramid.response import Response
from pyramid.renderers import render
@ -51,19 +51,14 @@ class AdminUserGroupsView(BaseAppView, DataGridAppView):
def load_default_context(self):
c = self._get_local_tmpl_context()
PermissionModel().set_global_permission_choices(
c, gettext_translator=self.request.translate)
return c
# permission check in data loading of
# `user_groups_list_data` via UserGroupList
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='user_groups', request_method='GET',
renderer='rhodecode:templates/admin/user_groups/user_groups.mako')
def user_groups_list(self):
c = self.load_default_context()
return self._get_template_context(c)
@ -71,9 +66,6 @@ class AdminUserGroupsView(BaseAppView, DataGridAppView):
# permission check inside
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='user_groups_data', request_method='GET',
renderer='json_ext', xhr=True)
def user_groups_list_data(self):
self.load_default_context()
column_map = {
@ -197,9 +189,6 @@ class AdminUserGroupsView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAnyDecorator('hg.admin', 'hg.usergroup.create.true')
@view_config(
route_name='user_groups_new', request_method='GET',
renderer='rhodecode:templates/admin/user_groups/user_group_add.mako')
def user_groups_new(self):
c = self.load_default_context()
return self._get_template_context(c)
@ -207,9 +196,6 @@ class AdminUserGroupsView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAnyDecorator('hg.admin', 'hg.usergroup.create.true')
@CSRFRequired()
@view_config(
route_name='user_groups_create', request_method='POST',
renderer='rhodecode:templates/admin/user_groups/user_group_add.mako')
def user_groups_create(self):
_ = self.request.translate
c = self.load_default_context()

View file

@ -24,7 +24,6 @@ import formencode
import formencode.htmlfill
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
from pyramid.renderers import render
from pyramid.response import Response
@ -72,19 +71,12 @@ class AdminUsersView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='users', request_method='GET',
renderer='rhodecode:templates/admin/users/users.mako')
def users_list(self):
c = self.load_default_context()
return self._get_template_context(c)
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
# renderer defined below
route_name='users_data', request_method='GET',
renderer='json_ext', xhr=True)
def users_list_data(self):
self.load_default_context()
column_map = {
@ -183,9 +175,6 @@ class AdminUsersView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='users_new', request_method='GET',
renderer='rhodecode:templates/admin/users/user_add.mako')
def users_new(self):
_ = self.request.translate
c = self.load_default_context()
@ -196,9 +185,6 @@ class AdminUsersView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='users_create', request_method='POST',
renderer='rhodecode:templates/admin/users/user_add.mako')
def users_create(self):
_ = self.request.translate
c = self.load_default_context()
@ -309,9 +295,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='user_update', request_method='POST',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def user_update(self):
_ = self.request.translate
c = self.load_default_context()
@ -371,9 +354,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='user_delete', request_method='POST',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def user_delete(self):
_ = self.request.translate
c = self.load_default_context()
@ -496,9 +476,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='user_edit', request_method='GET',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def user_edit(self):
_ = self.request.translate
c = self.load_default_context()
@ -525,9 +502,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='user_edit_advanced', request_method='GET',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def user_edit_advanced(self):
_ = self.request.translate
c = self.load_default_context()
@ -584,9 +558,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='user_edit_global_perms', request_method='GET',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def user_edit_global_perms(self):
_ = self.request.translate
c = self.load_default_context()
@ -614,9 +585,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='user_edit_global_perms_update', request_method='POST',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def user_edit_global_perms_update(self):
_ = self.request.translate
c = self.load_default_context()
@ -682,9 +650,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='user_enable_force_password_reset', request_method='POST',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def user_enable_force_password_reset(self):
_ = self.request.translate
c = self.load_default_context()
@ -711,9 +676,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='user_disable_force_password_reset', request_method='POST',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def user_disable_force_password_reset(self):
_ = self.request.translate
c = self.load_default_context()
@ -741,9 +703,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='user_notice_dismiss', request_method='POST',
renderer='json_ext', xhr=True)
def user_notice_dismiss(self):
_ = self.request.translate
c = self.load_default_context()
@ -767,9 +726,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='user_create_personal_repo_group', request_method='POST',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def user_create_personal_repo_group(self):
"""
Create personal repository group for this user
@ -821,9 +777,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='edit_user_auth_tokens', request_method='GET',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def auth_tokens(self):
_ = self.request.translate
c = self.load_default_context()
@ -843,9 +796,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='edit_user_auth_tokens_view', request_method='POST',
renderer='json_ext', xhr=True)
def auth_tokens_view(self):
_ = self.request.translate
c = self.load_default_context()
@ -867,8 +817,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='edit_user_auth_tokens_add', request_method='POST')
def auth_tokens_add(self):
_ = self.request.translate
c = self.load_default_context()
@ -899,8 +847,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='edit_user_auth_tokens_delete', request_method='POST')
def auth_tokens_delete(self):
_ = self.request.translate
c = self.load_default_context()
@ -928,9 +874,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='edit_user_ssh_keys', request_method='GET',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def ssh_keys(self):
_ = self.request.translate
c = self.load_default_context()
@ -943,9 +886,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='edit_user_ssh_keys_generate_keypair', request_method='GET',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def ssh_keys_generate_keypair(self):
_ = self.request.translate
c = self.load_default_context()
@ -964,8 +904,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='edit_user_ssh_keys_add', request_method='POST')
def ssh_keys_add(self):
_ = self.request.translate
c = self.load_default_context()
@ -1017,8 +955,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='edit_user_ssh_keys_delete', request_method='POST')
def ssh_keys_delete(self):
_ = self.request.translate
c = self.load_default_context()
@ -1048,9 +984,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='edit_user_emails', request_method='GET',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def emails(self):
_ = self.request.translate
c = self.load_default_context()
@ -1065,8 +998,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='edit_user_emails_add', request_method='POST')
def emails_add(self):
_ = self.request.translate
c = self.load_default_context()
@ -1105,8 +1036,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='edit_user_emails_delete', request_method='POST')
def emails_delete(self):
_ = self.request.translate
c = self.load_default_context()
@ -1131,9 +1060,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='edit_user_ips', request_method='GET',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def ips(self):
_ = self.request.translate
c = self.load_default_context()
@ -1152,8 +1078,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='edit_user_ips_add', request_method='POST')
# NOTE(marcink): this view is allowed for default users, as we can
# edit their IP white list
def ips_add(self):
@ -1207,8 +1131,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='edit_user_ips_delete', request_method='POST')
# NOTE(marcink): this view is allowed for default users, as we can
# edit their IP white list
def ips_delete(self):
@ -1236,9 +1158,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='edit_user_groups_management', request_method='GET',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def groups_management(self):
c = self.load_default_context()
c.user = self.db_user
@ -1254,8 +1173,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='edit_user_groups_management_updates', request_method='POST')
def groups_management_updates(self):
_ = self.request.translate
c = self.load_default_context()
@ -1299,9 +1216,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='edit_user_audit_logs', request_method='GET',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def user_audit_logs(self):
_ = self.request.translate
c = self.load_default_context()
@ -1329,9 +1243,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='edit_user_audit_logs_download', request_method='GET',
renderer='string')
def user_audit_logs_download(self):
_ = self.request.translate
c = self.load_default_context()
@ -1352,9 +1263,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='edit_user_perms_summary', request_method='GET',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def user_perms_summary(self):
_ = self.request.translate
c = self.load_default_context()
@ -1367,9 +1275,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='edit_user_perms_summary_json', request_method='GET',
renderer='json_ext')
def user_perms_summary_json(self):
self.load_default_context()
perm_user = self.db_user.AuthUser(ip_addr=self.request.remote_addr)
@ -1378,9 +1283,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='edit_user_caches', request_method='GET',
renderer='rhodecode:templates/admin/users/user_edit.mako')
def user_caches(self):
_ = self.request.translate
c = self.load_default_context()
@ -1399,8 +1301,6 @@ class UsersView(UserAppView):
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
@CSRFRequired()
@view_config(
route_name='edit_user_caches_update', request_method='POST')
def user_caches_update(self):
_ = self.request.translate
c = self.load_default_context()

View file

@ -67,6 +67,8 @@ def maybe_create_history_store(event):
def includeme(config):
from rhodecode.apps.channelstream.views import ChannelstreamView
settings = config.registry.settings
PLUGIN_DEFINITION['config']['enabled'] = asbool(
settings.get('channelstream.enabled'))
@ -85,12 +87,20 @@ def includeme(config):
config.add_route(
name='channelstream_connect',
pattern=ADMIN_PREFIX + '/channelstream/connect')
config.add_view(
ChannelstreamView,
attr='channelstream_connect',
route_name='channelstream_connect', renderer='json_ext')
config.add_route(
name='channelstream_subscribe',
pattern=ADMIN_PREFIX + '/channelstream/subscribe')
config.add_view(
ChannelstreamView,
attr='channelstream_subscribe',
route_name='channelstream_subscribe', renderer='json_ext')
config.add_route(
name='channelstream_proxy',
pattern=settings.get('channelstream.proxy_path') or '/_channelstream')
# Scan module for configuration decorators.
config.scan('.views', ignore='.tests')

View file

@ -21,7 +21,7 @@
import logging
import uuid
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPBadRequest, HTTPForbidden, HTTPBadGateway
from rhodecode.apps._base import BaseAppView
@ -54,8 +54,7 @@ class ChannelstreamView(BaseAppView):
return c
@NotAnonymous()
@view_config(route_name='channelstream_connect', renderer='json_ext')
def connect(self):
def channelstream_connect(self):
""" handle authorization of users trying to connect """
self.load_default_context()
@ -132,8 +131,7 @@ class ChannelstreamView(BaseAppView):
return connect_result
@NotAnonymous()
@view_config(route_name='channelstream_subscribe', renderer='json_ext')
def subscribe(self):
def channelstream_subscribe(self):
""" can be used to subscribe specific connection to other channels """
self.load_default_context()
try:

View file

@ -35,6 +35,8 @@ class DebugStylePredicate(object):
def includeme(config):
from rhodecode.apps.debug_style.views import DebugStyleView
config.add_route_predicate(
'debug_style', DebugStylePredicate)
@ -42,18 +44,38 @@ def includeme(config):
name='debug_style_home',
pattern=ADMIN_PREFIX + '/debug_style',
debug_style=True)
config.add_view(
DebugStyleView,
attr='index',
route_name='debug_style_home', request_method='GET',
renderer=None)
config.add_route(
name='debug_style_email',
pattern=ADMIN_PREFIX + '/debug_style/email/{email_id}',
debug_style=True)
config.add_view(
DebugStyleView,
attr='render_email',
route_name='debug_style_email', request_method='GET',
renderer=None)
config.add_route(
name='debug_style_email_plain_rendered',
pattern=ADMIN_PREFIX + '/debug_style/email-rendered/{email_id}',
debug_style=True)
config.add_view(
DebugStyleView,
attr='render_email',
route_name='debug_style_email_plain_rendered', request_method='GET',
renderer=None)
config.add_route(
name='debug_style_template',
pattern=ADMIN_PREFIX + '/debug_style/t/{t_path}',
debug_style=True)
# Scan module for configuration decorators.
config.scan('.views', ignore='.tests')
config.add_view(
DebugStyleView,
attr='template',
route_name='debug_style_template', request_method='GET',
renderer=None)

View file

@ -22,7 +22,6 @@ import os
import logging
import datetime
from pyramid.view import view_config
from pyramid.renderers import render_to_response
from rhodecode.apps._base import BaseAppView
from rhodecode.lib.celerylib import run_task, tasks
@ -37,12 +36,8 @@ class DebugStyleView(BaseAppView):
def load_default_context(self):
c = self._get_local_tmpl_context()
return c
@view_config(
route_name='debug_style_home', request_method='GET',
renderer=None)
def index(self):
c = self.load_default_context()
c.active = 'index'
@ -51,12 +46,6 @@ class DebugStyleView(BaseAppView):
'debug_style/index.html', self._get_template_context(c),
request=self.request)
@view_config(
route_name='debug_style_email', request_method='GET',
renderer=None)
@view_config(
route_name='debug_style_email_plain_rendered', request_method='GET',
renderer=None)
def render_email(self):
c = self.load_default_context()
email_id = self.request.matchdict['email_id']
@ -457,9 +446,6 @@ users: description edit fixes
template, self._get_template_context(c),
request=self.request)
@view_config(
route_name='debug_style_template', request_method='GET',
renderer=None)
def template(self):
t_path = self.request.matchdict['t_path']
c = self.load_default_context()
@ -483,4 +469,3 @@ users: description edit fixes
return render_to_response(
'debug_style/' + t_path, self._get_template_context(c),
request=self.request)

View file

@ -35,18 +35,31 @@ def _sanitize_settings_and_apply_defaults(settings):
def includeme(config):
from rhodecode.apps.file_store.views import FileStoreView
settings = config.registry.settings
_sanitize_settings_and_apply_defaults(settings)
config.add_route(
name='upload_file',
pattern='/_file_store/upload')
config.add_view(
FileStoreView,
attr='upload_file',
route_name='upload_file', request_method='POST', renderer='json_ext')
config.add_route(
name='download_file',
pattern='/_file_store/download/{fid:.*}')
config.add_view(
FileStoreView,
attr='download_file',
route_name='download_file')
config.add_route(
name='download_file_by_token',
pattern='/_file_store/token-download/{_auth_token}/{fid:.*}')
# Scan module for configuration decorators.
config.scan('.views', ignore='.tests')
config.add_view(
FileStoreView,
attr='download_file_by_token',
route_name='download_file_by_token')

View file

@ -19,7 +19,7 @@
# and proprietary license terms, please see https://rhodecode.com/licenses/
import logging
from pyramid.view import view_config
from pyramid.response import FileResponse
from pyramid.httpexceptions import HTTPFound, HTTPNotFound
@ -128,7 +128,6 @@ class FileStoreView(BaseAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(route_name='upload_file', request_method='POST', renderer='json_ext')
def upload_file(self):
self.load_default_context()
file_obj = self.request.POST.get(self.upload_key)
@ -182,7 +181,6 @@ class FileStoreView(BaseAppView):
'access_path': h.route_path('download_file', fid=store_uid)}
# ACL is checked by scopes, if no scope the file is accessible to all
@view_config(route_name='download_file')
def download_file(self):
self.load_default_context()
file_uid = self.request.matchdict['fid']
@ -192,7 +190,6 @@ class FileStoreView(BaseAppView):
# in addition to @LoginRequired ACL is checked by scopes
@LoginRequired(auth_token_access=[UserApiKeys.ROLE_ARTIFACT_DOWNLOAD])
@NotAnonymous()
@view_config(route_name='download_file_by_token')
def download_file_by_token(self):
"""
Special view that allows to access the download file by special URL that

View file

@ -21,42 +21,100 @@ from rhodecode.apps._base import ADMIN_PREFIX
def admin_routes(config):
from rhodecode.apps.gist.views import GistView
config.add_route(
name='gists_show', pattern='/gists')
config.add_view(
GistView,
attr='gist_show_all',
route_name='gists_show', request_method='GET',
renderer='rhodecode:templates/admin/gists/gist_index.mako')
config.add_route(
name='gists_new', pattern='/gists/new')
config.add_view(
GistView,
attr='gist_new',
route_name='gists_new', request_method='GET',
renderer='rhodecode:templates/admin/gists/gist_new.mako')
config.add_route(
name='gists_create', pattern='/gists/create')
config.add_view(
GistView,
attr='gist_create',
route_name='gists_create', request_method='POST',
renderer='rhodecode:templates/admin/gists/gist_new.mako')
config.add_route(
name='gist_show', pattern='/gists/{gist_id}')
config.add_view(
GistView,
attr='gist_show',
route_name='gist_show', request_method='GET',
renderer='rhodecode:templates/admin/gists/gist_show.mako')
config.add_route(
name='gist_show_rev',
pattern='/gists/{gist_id}/rev/{revision}')
config.add_view(
GistView,
attr='gist_show',
route_name='gist_show_rev', request_method='GET',
renderer='rhodecode:templates/admin/gists/gist_show.mako')
config.add_route(
name='gist_show_formatted',
pattern='/gists/{gist_id}/rev/{revision}/{format}')
config.add_view(
GistView,
attr='gist_show',
route_name='gist_show_formatted', request_method='GET',
renderer=None)
config.add_route(
name='gist_show_formatted_path',
pattern='/gists/{gist_id}/rev/{revision}/{format}/{f_path:.*}')
config.add_view(
GistView,
attr='gist_show',
route_name='gist_show_formatted_path', request_method='GET',
renderer=None)
config.add_route(
name='gist_delete', pattern='/gists/{gist_id}/delete')
config.add_view(
GistView,
attr='gist_delete',
route_name='gist_delete', request_method='POST')
config.add_route(
name='gist_edit', pattern='/gists/{gist_id}/edit')
config.add_view(
GistView,
attr='gist_edit',
route_name='gist_edit', request_method='GET',
renderer='rhodecode:templates/admin/gists/gist_edit.mako')
config.add_route(
name='gist_update', pattern='/gists/{gist_id}/update')
config.add_view(
GistView,
attr='gist_update',
route_name='gist_update', request_method='POST',
renderer='rhodecode:templates/admin/gists/gist_edit.mako')
config.add_route(
name='gist_edit_check_revision',
pattern='/gists/{gist_id}/edit/check_revision')
config.add_route(
name='gist_update', pattern='/gists/{gist_id}/update')
config.add_route(
name='gist_show_rev',
pattern='/gists/{gist_id}/{revision}')
config.add_route(
name='gist_show_formatted',
pattern='/gists/{gist_id}/{revision}/{format}')
config.add_route(
name='gist_show_formatted_path',
pattern='/gists/{gist_id}/{revision}/{format}/{f_path:.*}')
config.add_view(
GistView,
attr='gist_edit_check_revision',
route_name='gist_edit_check_revision', request_method='GET',
renderer='json_ext')
def includeme(config):
config.include(admin_routes, route_prefix=ADMIN_PREFIX)
# Scan module for configuration decorators.
config.scan('.views', ignore='.tests')

View file

@ -43,9 +43,9 @@ def route_path(name, params=None, **kwargs):
'gist_edit': ADMIN_PREFIX + '/gists/{gist_id}/edit',
'gist_edit_check_revision': ADMIN_PREFIX + '/gists/{gist_id}/edit/check_revision',
'gist_update': ADMIN_PREFIX + '/gists/{gist_id}/update',
'gist_show_rev': ADMIN_PREFIX + '/gists/{gist_id}/{revision}',
'gist_show_formatted': ADMIN_PREFIX + '/gists/{gist_id}/{revision}/{format}',
'gist_show_formatted_path': ADMIN_PREFIX + '/gists/{gist_id}/{revision}/{format}/{f_path}',
'gist_show_rev': ADMIN_PREFIX + '/gists/{gist_id}/rev/{revision}',
'gist_show_formatted': ADMIN_PREFIX + '/gists/{gist_id}/rev/{revision}/{format}',
'gist_show_formatted_path': ADMIN_PREFIX + '/gists/{gist_id}/rev/{revision}/{format}/{f_path}',
}[name].format(**kwargs)

View file

@ -26,7 +26,6 @@ import formencode.htmlfill
import peppercorn
from pyramid.httpexceptions import HTTPNotFound, HTTPFound, HTTPBadRequest
from pyramid.view import view_config
from pyramid.renderers import render
from pyramid.response import Response
@ -70,9 +69,6 @@ class GistView(BaseAppView):
return c
@LoginRequired()
@view_config(
route_name='gists_show', request_method='GET',
renderer='rhodecode:templates/admin/gists/gist_index.mako')
def gist_show_all(self):
c = self.load_default_context()
@ -134,9 +130,6 @@ class GistView(BaseAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='gists_new', request_method='GET',
renderer='rhodecode:templates/admin/gists/gist_new.mako')
def gist_new(self):
c = self.load_default_context()
return self._get_template_context(c)
@ -144,9 +137,6 @@ class GistView(BaseAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='gists_create', request_method='POST',
renderer='rhodecode:templates/admin/gists/gist_new.mako')
def gist_create(self):
_ = self.request.translate
c = self.load_default_context()
@ -222,8 +212,6 @@ class GistView(BaseAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='gist_delete', request_method='POST')
def gist_delete(self):
_ = self.request.translate
gist_id = self.request.matchdict['gist_id']
@ -263,18 +251,6 @@ class GistView(BaseAppView):
return gist
@LoginRequired()
@view_config(
route_name='gist_show', request_method='GET',
renderer='rhodecode:templates/admin/gists/gist_show.mako')
@view_config(
route_name='gist_show_rev', request_method='GET',
renderer='rhodecode:templates/admin/gists/gist_show.mako')
@view_config(
route_name='gist_show_formatted', request_method='GET',
renderer=None)
@view_config(
route_name='gist_show_formatted_path', request_method='GET',
renderer=None)
def gist_show(self):
gist_id = self.request.matchdict['gist_id']
@ -307,9 +283,6 @@ class GistView(BaseAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='gist_edit', request_method='GET',
renderer='rhodecode:templates/admin/gists/gist_edit.mako')
def gist_edit(self):
_ = self.request.translate
gist_id = self.request.matchdict['gist_id']
@ -341,9 +314,6 @@ class GistView(BaseAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='gist_update', request_method='POST',
renderer='rhodecode:templates/admin/gists/gist_edit.mako')
def gist_update(self):
_ = self.request.translate
gist_id = self.request.matchdict['gist_id']
@ -397,9 +367,6 @@ class GistView(BaseAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='gist_edit_check_revision', request_method='GET',
renderer='json_ext')
def gist_edit_check_revision(self):
_ = self.request.translate
gist_id = self.request.matchdict['gist_id']

View file

@ -38,56 +38,110 @@ class VCSCallPredicate(object):
def includeme(config):
from rhodecode.apps.home.views import HomeView
config.add_route_predicate(
'skip_vcs_call', VCSCallPredicate)
config.add_route(
name='home',
pattern='/')
config.add_view(
HomeView,
attr='main_page',
route_name='home', request_method='GET',
renderer='rhodecode:templates/index.mako')
config.add_route(
name='main_page_repos_data',
pattern='/_home_repos')
config.add_view(
HomeView,
attr='main_page_repos_data',
route_name='main_page_repos_data',
request_method='GET', renderer='json_ext', xhr=True)
config.add_route(
name='main_page_repo_groups_data',
pattern='/_home_repo_groups')
config.add_view(
HomeView,
attr='main_page_repo_groups_data',
route_name='main_page_repo_groups_data',
request_method='GET', renderer='json_ext', xhr=True)
config.add_route(
name='user_autocomplete_data',
pattern='/_users')
config.add_view(
HomeView,
attr='user_autocomplete_data',
route_name='user_autocomplete_data', request_method='GET',
renderer='json_ext', xhr=True)
config.add_route(
name='user_group_autocomplete_data',
pattern='/_user_groups')
config.add_view(
HomeView,
attr='user_group_autocomplete_data',
route_name='user_group_autocomplete_data', request_method='GET',
renderer='json_ext', xhr=True)
config.add_route(
name='repo_list_data',
pattern='/_repos')
config.add_view(
HomeView,
attr='repo_list_data',
route_name='repo_list_data', request_method='GET',
renderer='json_ext', xhr=True)
config.add_route(
name='repo_group_list_data',
pattern='/_repo_groups')
config.add_view(
HomeView,
attr='repo_group_list_data',
route_name='repo_group_list_data', request_method='GET',
renderer='json_ext', xhr=True)
config.add_route(
name='goto_switcher_data',
pattern='/_goto_data')
config.add_view(
HomeView,
attr='goto_switcher_data',
route_name='goto_switcher_data', request_method='GET',
renderer='json_ext', xhr=True)
config.add_route(
name='markup_preview',
pattern='/_markup_preview')
config.add_view(
HomeView,
attr='markup_preview',
route_name='markup_preview', request_method='POST',
renderer='string', xhr=True)
config.add_route(
name='file_preview',
pattern='/_file_preview')
config.add_view(
HomeView,
attr='file_preview',
route_name='file_preview', request_method='POST',
renderer='string', xhr=True)
config.add_route(
name='store_user_session_value',
pattern='/_store_session_attr')
config.add_view(
HomeView,
attr='store_user_session_attr',
route_name='store_user_session_value', request_method='POST',
renderer='string', xhr=True)
# register our static links via redirection mechanism
routing_links.connect_redirection_links(config)
# Scan module for configuration decorators.
config.scan('.views', ignore='.tests')
config.add_route_predicate(
'skip_vcs_call', VCSCallPredicate)

View file

@ -23,7 +23,6 @@ import logging
import collections
from pyramid.httpexceptions import HTTPNotFound
from pyramid.view import view_config
from rhodecode.apps._base import BaseAppView, DataGridAppView
from rhodecode.lib import helpers as h
@ -50,13 +49,9 @@ class HomeView(BaseAppView, DataGridAppView):
def load_default_context(self):
c = self._get_local_tmpl_context()
c.user = c.auth_user.get_instance()
return c
@LoginRequired()
@view_config(
route_name='user_autocomplete_data', request_method='GET',
renderer='json_ext', xhr=True)
def user_autocomplete_data(self):
self.load_default_context()
query = self.request.GET.get('query')
@ -88,9 +83,6 @@ class HomeView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='user_group_autocomplete_data', request_method='GET',
renderer='json_ext', xhr=True)
def user_group_autocomplete_data(self):
self.load_default_context()
query = self.request.GET.get('query')
@ -434,9 +426,6 @@ class HomeView(BaseAppView, DataGridAppView):
return files, True
@LoginRequired()
@view_config(
route_name='repo_list_data', request_method='GET',
renderer='json_ext', xhr=True)
def repo_list_data(self):
_ = self.request.translate
self.load_default_context()
@ -461,9 +450,6 @@ class HomeView(BaseAppView, DataGridAppView):
return data
@LoginRequired()
@view_config(
route_name='repo_group_list_data', request_method='GET',
renderer='json_ext', xhr=True)
def repo_group_list_data(self):
_ = self.request.translate
self.load_default_context()
@ -619,9 +605,6 @@ class HomeView(BaseAppView, DataGridAppView):
return queries
@LoginRequired()
@view_config(
route_name='goto_switcher_data', request_method='GET',
renderer='json_ext', xhr=True)
def goto_switcher_data(self):
c = self.load_default_context()
@ -750,9 +733,6 @@ class HomeView(BaseAppView, DataGridAppView):
return {'suggestions': res}
@LoginRequired()
@view_config(
route_name='home', request_method='GET',
renderer='rhodecode:templates/index.mako')
def main_page(self):
c = self.load_default_context()
c.repo_group = None
@ -789,9 +769,6 @@ class HomeView(BaseAppView, DataGridAppView):
self._rhodecode_user, repo_group_id)
@LoginRequired()
@view_config(
route_name='main_page_repo_groups_data',
request_method='GET', renderer='json_ext', xhr=True)
def main_page_repo_groups_data(self):
self.load_default_context()
repo_group_id = safe_int(self.request.GET.get('repo_group_id'))
@ -806,9 +783,6 @@ class HomeView(BaseAppView, DataGridAppView):
return self._main_page_repo_groups_data(repo_group_id)
@LoginRequired()
@view_config(
route_name='main_page_repos_data',
request_method='GET', renderer='json_ext', xhr=True)
def main_page_repos_data(self):
self.load_default_context()
repo_group_id = safe_int(self.request.GET.get('repo_group_id'))
@ -824,12 +798,6 @@ class HomeView(BaseAppView, DataGridAppView):
@LoginRequired()
@HasRepoGroupPermissionAnyDecorator(*AuthUser.repo_group_read_perms)
@view_config(
route_name='repo_group_home', request_method='GET',
renderer='rhodecode:templates/index_repo_group.mako')
@view_config(
route_name='repo_group_home_slash', request_method='GET',
renderer='rhodecode:templates/index_repo_group.mako')
def repo_group_main_page(self):
c = self.load_default_context()
c.repo_group = self.request.db_repo_group
@ -837,9 +805,6 @@ class HomeView(BaseAppView, DataGridAppView):
@LoginRequired()
@CSRFRequired()
@view_config(
route_name='markup_preview', request_method='POST',
renderer='string', xhr=True)
def markup_preview(self):
# Technically a CSRF token is not needed as no state changes with this
# call. However, as this is a POST is better to have it, so automated
@ -855,9 +820,6 @@ class HomeView(BaseAppView, DataGridAppView):
@LoginRequired()
@CSRFRequired()
@view_config(
route_name='file_preview', request_method='POST',
renderer='string', xhr=True)
def file_preview(self):
# Technically a CSRF token is not needed as no state changes with this
# call. However, as this is a POST is better to have it, so automated
@ -883,9 +845,6 @@ class HomeView(BaseAppView, DataGridAppView):
@LoginRequired()
@CSRFRequired()
@view_config(
route_name='store_user_session_value', request_method='POST',
renderer='string', xhr=True)
def store_user_session_attr(self):
key = self.request.POST.get('key')
val = self.request.POST.get('val')

View file

@ -20,26 +20,48 @@
def includeme(config):
from rhodecode.apps.hovercards.views import HoverCardsView, HoverCardsRepoView
config.add_route(
name='hovercard_user',
pattern='/_hovercard/user/{user_id}')
config.add_view(
HoverCardsView,
attr='hovercard_user',
route_name='hovercard_user', request_method='GET', xhr=True,
renderer='rhodecode:templates/hovercards/hovercard_user.mako')
config.add_route(
name='hovercard_username',
pattern='/_hovercard/username/{username}')
config.add_view(
HoverCardsView,
attr='hovercard_username',
route_name='hovercard_username', request_method='GET', xhr=True,
renderer='rhodecode:templates/hovercards/hovercard_user.mako')
config.add_route(
name='hovercard_user_group',
pattern='/_hovercard/user_group/{user_group_id}')
config.add_view(
HoverCardsView,
attr='hovercard_user_group',
route_name='hovercard_user_group', request_method='GET', xhr=True,
renderer='rhodecode:templates/hovercards/hovercard_user_group.mako')
config.add_route(
name='hovercard_pull_request',
pattern='/_hovercard/pull_request/{pull_request_id}')
config.add_view(
HoverCardsView,
attr='hovercard_pull_request',
route_name='hovercard_pull_request', request_method='GET', xhr=True,
renderer='rhodecode:templates/hovercards/hovercard_pull_request.mako')
config.add_route(
name='hovercard_repo_commit',
pattern='/_hovercard/commit/{repo_name:.*?[^/]}/{commit_id}', repo_route=True)
# Scan module for configuration decorators.
config.scan('.views', ignore='.tests')
config.add_view(
HoverCardsRepoView,
attr='hovercard_repo_commit',
route_name='hovercard_repo_commit', request_method='GET', xhr=True,
renderer='rhodecode:templates/hovercards/hovercard_repo_commit.mako')

View file

@ -23,7 +23,7 @@ import logging
import collections
from pyramid.httpexceptions import HTTPNotFound
from pyramid.view import view_config
from rhodecode.apps._base import BaseAppView, RepoAppView
from rhodecode.lib import helpers as h
@ -54,9 +54,6 @@ class HoverCardsView(BaseAppView):
return c
@LoginRequired()
@view_config(
route_name='hovercard_user', request_method='GET', xhr=True,
renderer='rhodecode:templates/hovercards/hovercard_user.mako')
def hovercard_user(self):
c = self.load_default_context()
user_id = self.request.matchdict['user_id']
@ -64,9 +61,6 @@ class HoverCardsView(BaseAppView):
return self._get_template_context(c)
@LoginRequired()
@view_config(
route_name='hovercard_username', request_method='GET', xhr=True,
renderer='rhodecode:templates/hovercards/hovercard_user.mako')
def hovercard_username(self):
c = self.load_default_context()
username = self.request.matchdict['username']
@ -77,9 +71,6 @@ class HoverCardsView(BaseAppView):
return self._get_template_context(c)
@LoginRequired()
@view_config(
route_name='hovercard_user_group', request_method='GET', xhr=True,
renderer='rhodecode:templates/hovercards/hovercard_user_group.mako')
def hovercard_user_group(self):
c = self.load_default_context()
user_group_id = self.request.matchdict['user_group_id']
@ -87,9 +78,6 @@ class HoverCardsView(BaseAppView):
return self._get_template_context(c)
@LoginRequired()
@view_config(
route_name='hovercard_pull_request', request_method='GET', xhr=True,
renderer='rhodecode:templates/hovercards/hovercard_pull_request.mako')
def hovercard_pull_request(self):
c = self.load_default_context()
c.pull_request = PullRequest.get_or_404(
@ -107,9 +95,6 @@ class HoverCardsRepoView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='hovercard_repo_commit', request_method='GET', xhr=True,
renderer='rhodecode:templates/hovercards/hovercard_repo_commit.mako')
def hovercard_repo_commit(self):
c = self.load_default_context()
commit_id = self.request.matchdict['commit_id']

View file

@ -23,31 +23,80 @@ from rhodecode.apps._base import ADMIN_PREFIX
def admin_routes(config):
from rhodecode.apps.journal.views import JournalView
config.add_route(
name='journal', pattern='/journal')
config.add_view(
JournalView,
attr='journal',
route_name='journal', request_method='GET',
renderer=None)
config.add_route(
name='journal_rss', pattern='/journal/rss')
config.add_view(
JournalView,
attr='journal_rss',
route_name='journal_rss', request_method='GET',
renderer=None)
config.add_route(
name='journal_atom', pattern='/journal/atom')
config.add_view(
JournalView,
attr='journal_atom',
route_name='journal_atom', request_method='GET',
renderer=None)
config.add_route(
name='journal_public', pattern='/public_journal')
config.add_view(
JournalView,
attr='journal_public',
route_name='journal_public', request_method='GET',
renderer=None)
config.add_route(
name='journal_public_atom', pattern='/public_journal/atom')
config.add_view(
JournalView,
attr='journal_public_atom',
route_name='journal_public_atom', request_method='GET',
renderer=None)
config.add_route(
name='journal_public_atom_old', pattern='/public_journal_atom')
config.add_view(
JournalView,
attr='journal_public_atom',
route_name='journal_public_atom_old', request_method='GET',
renderer=None)
config.add_route(
name='journal_public_rss', pattern='/public_journal/rss')
config.add_view(
JournalView,
attr='journal_public_rss',
route_name='journal_public_rss', request_method='GET',
renderer=None)
config.add_route(
name='journal_public_rss_old', pattern='/public_journal_rss')
config.add_view(
JournalView,
attr='journal_public_rss',
route_name='journal_public_rss_old', request_method='GET',
renderer=None)
config.add_route(
name='toggle_following', pattern='/toggle_following')
config.add_view(
JournalView,
attr='toggle_following',
route_name='toggle_following', request_method='POST',
renderer='json_ext')
def includeme(config):
config.include(admin_routes, route_prefix=ADMIN_PREFIX)
# Scan module for configuration decorators.
config.scan('.views', ignore='.tests')

View file

@ -18,13 +18,9 @@
# RhodeCode Enterprise Edition, including its added features, Support services,
# and proprietary license terms, please see https://rhodecode.com/licenses/
import logging
import itertools
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPBadRequest
from pyramid.response import Response
from pyramid.renderers import render
@ -218,9 +214,6 @@ class JournalView(BaseAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='journal', request_method='GET',
renderer=None)
def journal(self):
c = self.load_default_context()
@ -258,9 +251,6 @@ class JournalView(BaseAppView):
@LoginRequired(auth_token_access=[UserApiKeys.ROLE_FEED])
@NotAnonymous()
@view_config(
route_name='journal_atom', request_method='GET',
renderer=None)
def journal_atom(self):
"""
Produce an atom-1.0 feed via feedgenerator module
@ -274,9 +264,6 @@ class JournalView(BaseAppView):
@LoginRequired(auth_token_access=[UserApiKeys.ROLE_FEED])
@NotAnonymous()
@view_config(
route_name='journal_rss', request_method='GET',
renderer=None)
def journal_rss(self):
"""
Produce an rss feed via feedgenerator module
@ -289,39 +276,6 @@ class JournalView(BaseAppView):
return self._rss_feed(following_repos, c.search_term, public=False)
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='toggle_following', request_method='POST',
renderer='json_ext')
def toggle_following(self):
user_id = self.request.POST.get('follows_user_id')
if user_id:
try:
ScmModel().toggle_following_user(user_id, self._rhodecode_user.user_id)
Session().commit()
return 'ok'
except Exception:
raise HTTPBadRequest()
repo_id = self.request.POST.get('follows_repo_id')
repo = Repository.get_or_404(repo_id)
perm_set = ['repository.read', 'repository.write', 'repository.admin']
has_perm = HasRepoPermissionAny(*perm_set)(repo.repo_name, 'RepoWatch check')
if repo and has_perm:
try:
ScmModel().toggle_following_repo(repo_id, self._rhodecode_user.user_id)
Session().commit()
return 'ok'
except Exception:
raise HTTPBadRequest()
raise HTTPBadRequest()
@LoginRequired()
@view_config(
route_name='journal_public', request_method='GET',
renderer=None)
def journal_public(self):
c = self.load_default_context()
# Return a rendered template
@ -357,9 +311,6 @@ class JournalView(BaseAppView):
return Response(html)
@LoginRequired(auth_token_access=[UserApiKeys.ROLE_FEED])
@view_config(
route_name='journal_public_atom', request_method='GET',
renderer=None)
def journal_public_atom(self):
"""
Produce an atom-1.0 feed via feedgenerator module
@ -373,9 +324,6 @@ class JournalView(BaseAppView):
return self._atom_feed(following_repos, c.search_term)
@LoginRequired(auth_token_access=[UserApiKeys.ROLE_FEED])
@view_config(
route_name='journal_public_rss', request_method='GET',
renderer=None)
def journal_public_rss(self):
"""
Produce an rss2 feed via feedgenerator module
@ -387,3 +335,30 @@ class JournalView(BaseAppView):
.all()
return self._rss_feed(following_repos, c.search_term)
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
def toggle_following(self):
user_id = self.request.POST.get('follows_user_id')
if user_id:
try:
ScmModel().toggle_following_user(user_id, self._rhodecode_user.user_id)
Session().commit()
return 'ok'
except Exception:
raise HTTPBadRequest()
repo_id = self.request.POST.get('follows_repo_id')
repo = Repository.get_or_404(repo_id)
perm_set = ['repository.read', 'repository.write', 'repository.admin']
has_perm = HasRepoPermissionAny(*perm_set)(repo.repo_name, 'RepoWatch check')
if repo and has_perm:
try:
ScmModel().toggle_following_repo(repo_id, self._rhodecode_user.user_id)
Session().commit()
return 'ok'
except Exception:
raise HTTPBadRequest()
raise HTTPBadRequest()

View file

@ -23,22 +23,57 @@ from rhodecode.apps._base import ADMIN_PREFIX
def includeme(config):
from rhodecode.apps.login.views import LoginView
config.add_route(
name='login',
pattern=ADMIN_PREFIX + '/login')
config.add_view(
LoginView,
attr='login',
route_name='login', request_method='GET',
renderer='rhodecode:templates/login.mako')
config.add_view(
LoginView,
attr='login_post',
route_name='login', request_method='POST',
renderer='rhodecode:templates/login.mako')
config.add_route(
name='logout',
pattern=ADMIN_PREFIX + '/logout')
config.add_view(
LoginView,
attr='logout',
route_name='logout', request_method='POST')
config.add_route(
name='register',
pattern=ADMIN_PREFIX + '/register')
config.add_view(
LoginView,
attr='register',
route_name='register', request_method='GET',
renderer='rhodecode:templates/register.mako')
config.add_view(
LoginView,
attr='register_post',
route_name='register', request_method='POST',
renderer='rhodecode:templates/register.mako')
config.add_route(
name='reset_password',
pattern=ADMIN_PREFIX + '/password_reset')
config.add_view(
LoginView,
attr='password_reset',
route_name='reset_password', request_method=('GET', 'POST'),
renderer='rhodecode:templates/password_reset.mako')
config.add_route(
name='reset_password_confirmation',
pattern=ADMIN_PREFIX + '/password_reset_confirmation')
# Scan module for configuration decorators.
config.scan('.views', ignore='.tests')
config.add_view(
LoginView,
attr='password_reset_confirmation',
route_name='reset_password_confirmation', request_method='GET')

View file

@ -28,7 +28,7 @@ import urlparse
import requests
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
from rhodecode.apps._base import BaseAppView
from rhodecode.authentication.base import authenticate, HTTP_TYPE
@ -114,7 +114,6 @@ class LoginView(BaseAppView):
def load_default_context(self):
c = self._get_local_tmpl_context()
c.came_from = get_came_from(self.request)
return c
def _get_captcha_data(self):
@ -148,9 +147,6 @@ class LoginView(BaseAppView):
return captcha_status, captcha_message
@view_config(
route_name='login', request_method='GET',
renderer='rhodecode:templates/login.mako')
def login(self):
c = self.load_default_context()
auth_user = self._rhodecode_user
@ -175,9 +171,6 @@ class LoginView(BaseAppView):
return self._get_template_context(c)
@view_config(
route_name='login', request_method='POST',
renderer='rhodecode:templates/login.mako')
def login_post(self):
c = self.load_default_context()
@ -229,7 +222,6 @@ class LoginView(BaseAppView):
return self._get_template_context(c)
@CSRFRequired()
@view_config(route_name='logout', request_method='POST')
def logout(self):
auth_user = self._rhodecode_user
log.info('Deleting session for user: `%s`', auth_user)
@ -243,9 +235,6 @@ class LoginView(BaseAppView):
@HasPermissionAnyDecorator(
'hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')
@view_config(
route_name='register', request_method='GET',
renderer='rhodecode:templates/register.mako',)
def register(self, defaults=None, errors=None):
c = self.load_default_context()
defaults = defaults or {}
@ -270,9 +259,6 @@ class LoginView(BaseAppView):
@HasPermissionAnyDecorator(
'hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')
@view_config(
route_name='register', request_method='POST',
renderer='rhodecode:templates/register.mako')
def register_post(self):
from rhodecode.authentication.plugins import auth_rhodecode
@ -353,9 +339,6 @@ class LoginView(BaseAppView):
h.flash(e, category='error')
return self.register()
@view_config(
route_name='reset_password', request_method=('GET', 'POST'),
renderer='rhodecode:templates/password_reset.mako')
def password_reset(self):
c = self.load_default_context()
captcha = self._get_captcha_data()
@ -454,8 +437,6 @@ class LoginView(BaseAppView):
return self._get_template_context(c, **template_context)
@view_config(route_name='reset_password_confirmation',
request_method='GET')
def password_reset_confirmation(self):
self.load_default_context()
if self.request.GET and self.request.GET.get('key'):

View file

@ -23,138 +23,311 @@ from rhodecode.apps._base import ADMIN_PREFIX
def includeme(config):
from rhodecode.apps.my_account.views.my_account import MyAccountView
from rhodecode.apps.my_account.views.my_account_notifications import MyAccountNotificationsView
from rhodecode.apps.my_account.views.my_account_ssh_keys import MyAccountSshKeysView
config.add_route(
name='my_account_profile',
pattern=ADMIN_PREFIX + '/my_account/profile')
config.add_view(
MyAccountView,
attr='my_account_profile',
route_name='my_account_profile', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
# my account edit details
config.add_route(
name='my_account_edit',
pattern=ADMIN_PREFIX + '/my_account/edit')
config.add_view(
MyAccountView,
attr='my_account_edit',
route_name='my_account_edit',
request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
config.add_route(
name='my_account_update',
pattern=ADMIN_PREFIX + '/my_account/update')
config.add_view(
MyAccountView,
attr='my_account_update',
route_name='my_account_update',
request_method='POST',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
# my account password
config.add_route(
name='my_account_password',
pattern=ADMIN_PREFIX + '/my_account/password')
config.add_view(
MyAccountView,
attr='my_account_password',
route_name='my_account_password', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
config.add_route(
name='my_account_password_update',
pattern=ADMIN_PREFIX + '/my_account/password/update')
config.add_view(
MyAccountView,
attr='my_account_password_update',
route_name='my_account_password_update', request_method='POST',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
# my account tokens
config.add_route(
name='my_account_auth_tokens',
pattern=ADMIN_PREFIX + '/my_account/auth_tokens')
config.add_view(
MyAccountView,
attr='my_account_auth_tokens',
route_name='my_account_auth_tokens', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
config.add_route(
name='my_account_auth_tokens_view',
pattern=ADMIN_PREFIX + '/my_account/auth_tokens/view')
config.add_view(
MyAccountView,
attr='my_account_auth_tokens_view',
route_name='my_account_auth_tokens_view', request_method='POST', xhr=True,
renderer='json_ext')
config.add_route(
name='my_account_auth_tokens_add',
pattern=ADMIN_PREFIX + '/my_account/auth_tokens/new')
config.add_view(
MyAccountView,
attr='my_account_auth_tokens_add',
route_name='my_account_auth_tokens_add', request_method='POST')
config.add_route(
name='my_account_auth_tokens_delete',
pattern=ADMIN_PREFIX + '/my_account/auth_tokens/delete')
config.add_view(
MyAccountView,
attr='my_account_auth_tokens_delete',
route_name='my_account_auth_tokens_delete', request_method='POST')
# my account ssh keys
config.add_route(
name='my_account_ssh_keys',
pattern=ADMIN_PREFIX + '/my_account/ssh_keys')
config.add_view(
MyAccountSshKeysView,
attr='my_account_ssh_keys',
route_name='my_account_ssh_keys', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
config.add_route(
name='my_account_ssh_keys_generate',
pattern=ADMIN_PREFIX + '/my_account/ssh_keys/generate')
config.add_view(
MyAccountSshKeysView,
attr='ssh_keys_generate_keypair',
route_name='my_account_ssh_keys_generate', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
config.add_route(
name='my_account_ssh_keys_add',
pattern=ADMIN_PREFIX + '/my_account/ssh_keys/new')
config.add_view(
MyAccountSshKeysView,
attr='my_account_ssh_keys_add',
route_name='my_account_ssh_keys_add', request_method='POST',)
config.add_route(
name='my_account_ssh_keys_delete',
pattern=ADMIN_PREFIX + '/my_account/ssh_keys/delete')
config.add_view(
MyAccountSshKeysView,
attr='my_account_ssh_keys_delete',
route_name='my_account_ssh_keys_delete', request_method='POST')
# my account user group membership
config.add_route(
name='my_account_user_group_membership',
pattern=ADMIN_PREFIX + '/my_account/user_group_membership')
config.add_view(
MyAccountView,
attr='my_account_user_group_membership',
route_name='my_account_user_group_membership',
request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
# my account emails
config.add_route(
name='my_account_emails',
pattern=ADMIN_PREFIX + '/my_account/emails')
config.add_view(
MyAccountView,
attr='my_account_emails',
route_name='my_account_emails', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
config.add_route(
name='my_account_emails_add',
pattern=ADMIN_PREFIX + '/my_account/emails/new')
config.add_view(
MyAccountView,
attr='my_account_emails_add',
route_name='my_account_emails_add', request_method='POST',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
config.add_route(
name='my_account_emails_delete',
pattern=ADMIN_PREFIX + '/my_account/emails/delete')
config.add_view(
MyAccountView,
attr='my_account_emails_delete',
route_name='my_account_emails_delete', request_method='POST')
config.add_route(
name='my_account_repos',
pattern=ADMIN_PREFIX + '/my_account/repos')
config.add_view(
MyAccountView,
attr='my_account_repos',
route_name='my_account_repos', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
config.add_route(
name='my_account_watched',
pattern=ADMIN_PREFIX + '/my_account/watched')
config.add_view(
MyAccountView,
attr='my_account_watched',
route_name='my_account_watched', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
config.add_route(
name='my_account_bookmarks',
pattern=ADMIN_PREFIX + '/my_account/bookmarks')
config.add_view(
MyAccountView,
attr='my_account_bookmarks',
route_name='my_account_bookmarks', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
config.add_route(
name='my_account_bookmarks_update',
pattern=ADMIN_PREFIX + '/my_account/bookmarks/update')
config.add_view(
MyAccountView,
attr='my_account_bookmarks_update',
route_name='my_account_bookmarks_update', request_method='POST')
config.add_route(
name='my_account_goto_bookmark',
pattern=ADMIN_PREFIX + '/my_account/bookmark/{bookmark_id}')
config.add_view(
MyAccountView,
attr='my_account_goto_bookmark',
route_name='my_account_goto_bookmark', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
config.add_route(
name='my_account_perms',
pattern=ADMIN_PREFIX + '/my_account/perms')
config.add_view(
MyAccountView,
attr='my_account_perms',
route_name='my_account_perms', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
config.add_route(
name='my_account_notifications',
pattern=ADMIN_PREFIX + '/my_account/notifications')
config.add_view(
MyAccountView,
attr='my_notifications',
route_name='my_account_notifications', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
config.add_route(
name='my_account_notifications_toggle_visibility',
pattern=ADMIN_PREFIX + '/my_account/toggle_visibility')
config.add_view(
MyAccountView,
attr='my_notifications_toggle_visibility',
route_name='my_account_notifications_toggle_visibility',
request_method='POST', renderer='json_ext')
# my account pull requests
config.add_route(
name='my_account_pullrequests',
pattern=ADMIN_PREFIX + '/my_account/pull_requests')
config.add_view(
MyAccountView,
attr='my_account_pullrequests',
route_name='my_account_pullrequests',
request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
config.add_route(
name='my_account_pullrequests_data',
pattern=ADMIN_PREFIX + '/my_account/pull_requests/data')
# notifications
config.add_route(
name='notifications_show_all',
pattern=ADMIN_PREFIX + '/notifications')
# notifications
config.add_route(
name='notifications_mark_all_read',
pattern=ADMIN_PREFIX + '/notifications/mark_all_read')
config.add_route(
name='notifications_show',
pattern=ADMIN_PREFIX + '/notifications/{notification_id}')
config.add_route(
name='notifications_update',
pattern=ADMIN_PREFIX + '/notifications/{notification_id}/update')
config.add_route(
name='notifications_delete',
pattern=ADMIN_PREFIX + '/notifications/{notification_id}/delete')
config.add_view(
MyAccountView,
attr='my_account_pullrequests_data',
route_name='my_account_pullrequests_data',
request_method='GET', renderer='json_ext')
# channelstream test
config.add_route(
name='my_account_notifications_test_channelstream',
pattern=ADMIN_PREFIX + '/my_account/test_channelstream')
config.add_view(
MyAccountView,
attr='my_account_notifications_test_channelstream',
route_name='my_account_notifications_test_channelstream',
request_method='POST', renderer='json_ext')
# Scan module for configuration decorators.
config.scan('.views', ignore='.tests')
# notifications
config.add_route(
name='notifications_show_all',
pattern=ADMIN_PREFIX + '/notifications')
config.add_view(
MyAccountNotificationsView,
attr='notifications_show_all',
route_name='notifications_show_all', request_method='GET',
renderer='rhodecode:templates/admin/notifications/notifications_show_all.mako')
# notifications
config.add_route(
name='notifications_mark_all_read',
pattern=ADMIN_PREFIX + '/notifications_mark_all_read')
config.add_view(
MyAccountNotificationsView,
attr='notifications_mark_all_read',
route_name='notifications_mark_all_read', request_method='POST',
renderer='rhodecode:templates/admin/notifications/notifications_show_all.mako')
config.add_route(
name='notifications_show',
pattern=ADMIN_PREFIX + '/notifications/{notification_id}')
config.add_view(
MyAccountNotificationsView,
attr='notifications_show',
route_name='notifications_show', request_method='GET',
renderer='rhodecode:templates/admin/notifications/notifications_show.mako')
config.add_route(
name='notifications_update',
pattern=ADMIN_PREFIX + '/notifications/{notification_id}/update')
config.add_view(
MyAccountNotificationsView,
attr='notification_update',
route_name='notifications_update', request_method='POST',
renderer='json_ext')
config.add_route(
name='notifications_delete',
pattern=ADMIN_PREFIX + '/notifications/{notification_id}/delete')
config.add_view(
MyAccountNotificationsView,
attr='notification_delete',
route_name='notifications_delete', request_method='POST',
renderer='json_ext')

View file

@ -40,7 +40,7 @@ def route_path(name, params=None, **kwargs):
base_url = {
'notifications_show_all': ADMIN_PREFIX + '/notifications',
'notifications_mark_all_read': ADMIN_PREFIX + '/notifications/mark_all_read',
'notifications_mark_all_read': ADMIN_PREFIX + '/notifications_mark_all_read',
'notifications_show': ADMIN_PREFIX + '/notifications/{notification_id}',
'notifications_update': ADMIN_PREFIX + '/notifications/{notification_id}/update',
'notifications_delete': ADMIN_PREFIX + '/notifications/{notification_id}/delete',
@ -60,6 +60,15 @@ class TestNotificationsController(TestController):
Session().delete(inst)
Session().commit()
def test_mark_all_read(self, user_util):
user = user_util.create_user(password='qweqwe')
self.log_user(user.username, 'qweqwe')
self.app.post(
route_path('notifications_mark_all_read'), status=302,
params={'csrf_token': self.csrf_token}
)
def test_show_all(self, user_util):
user = user_util.create_user(password='qweqwe')
user_id = user.user_id

View file

@ -26,7 +26,6 @@ import formencode
import formencode.htmlfill
import peppercorn
from pyramid.httpexceptions import HTTPFound, HTTPNotFound
from pyramid.view import view_config
from rhodecode.apps._base import BaseAppView, DataGridAppView
from rhodecode import forms
@ -65,14 +64,10 @@ class MyAccountView(BaseAppView, DataGridAppView):
c = self._get_local_tmpl_context()
c.user = c.auth_user.get_instance()
c.allow_scoped_tokens = self.ALLOW_SCOPED_TOKENS
return c
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='my_account_profile', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def my_account_profile(self):
c = self.load_default_context()
c.active = 'profile'
@ -81,9 +76,75 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='my_account_password', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def my_account_edit(self):
c = self.load_default_context()
c.active = 'profile_edit'
c.extern_type = c.user.extern_type
c.extern_name = c.user.extern_name
schema = user_schema.UserProfileSchema().bind(
username=c.user.username, user_emails=c.user.emails)
appstruct = {
'username': c.user.username,
'email': c.user.email,
'firstname': c.user.firstname,
'lastname': c.user.lastname,
'description': c.user.description,
}
c.form = forms.RcForm(
schema, appstruct=appstruct,
action=h.route_path('my_account_update'),
buttons=(forms.buttons.save, forms.buttons.reset))
return self._get_template_context(c)
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
def my_account_update(self):
_ = self.request.translate
c = self.load_default_context()
c.active = 'profile_edit'
c.perm_user = c.auth_user
c.extern_type = c.user.extern_type
c.extern_name = c.user.extern_name
schema = user_schema.UserProfileSchema().bind(
username=c.user.username, user_emails=c.user.emails)
form = forms.RcForm(
schema, buttons=(forms.buttons.save, forms.buttons.reset))
controls = self.request.POST.items()
try:
valid_data = form.validate(controls)
skip_attrs = ['admin', 'active', 'extern_type', 'extern_name',
'new_password', 'password_confirmation']
if c.extern_type != "rhodecode":
# forbid updating username for external accounts
skip_attrs.append('username')
old_email = c.user.email
UserModel().update_user(
self._rhodecode_user.user_id, skip_attrs=skip_attrs,
**valid_data)
if old_email != valid_data['email']:
old = UserEmailMap.query() \
.filter(UserEmailMap.user == c.user)\
.filter(UserEmailMap.email == valid_data['email'])\
.first()
old.email = old_email
h.flash(_('Your account was updated successfully'), category='success')
Session().commit()
except forms.ValidationFailure as e:
c.form = e
return self._get_template_context(c)
except Exception:
log.exception("Exception updating user")
h.flash(_('Error occurred during update of user'),
category='error')
raise HTTPFound(h.route_path('my_account_profile'))
@LoginRequired()
@NotAnonymous()
def my_account_password(self):
c = self.load_default_context()
c.active = 'password'
@ -103,9 +164,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='my_account_password_update', request_method='POST',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def my_account_password_update(self):
_ = self.request.translate
c = self.load_default_context()
@ -146,9 +204,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='my_account_auth_tokens', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def my_account_auth_tokens(self):
_ = self.request.translate
@ -167,9 +222,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='my_account_auth_tokens_view', request_method='POST', xhr=True,
renderer='json_ext')
def my_account_auth_tokens_view(self):
_ = self.request.translate
c = self.load_default_context()
@ -192,8 +244,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='my_account_auth_tokens_add', request_method='POST',)
def my_account_auth_tokens_add(self):
_ = self.request.translate
c = self.load_default_context()
@ -220,8 +270,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='my_account_auth_tokens_delete', request_method='POST')
def my_account_auth_tokens_delete(self):
_ = self.request.translate
c = self.load_default_context()
@ -244,9 +292,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='my_account_emails', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def my_account_emails(self):
_ = self.request.translate
@ -269,9 +314,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='my_account_emails_add', request_method='POST',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def my_account_emails_add(self):
_ = self.request.translate
c = self.load_default_context()
@ -312,8 +354,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='my_account_emails_delete', request_method='POST')
def my_account_emails_delete(self):
_ = self.request.translate
c = self.load_default_context()
@ -334,9 +374,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='my_account_notifications_test_channelstream',
request_method='POST', renderer='json_ext')
def my_account_notifications_test_channelstream(self):
message = 'Test message sent via Channelstream by user: {}, on {}'.format(
self._rhodecode_user.username, datetime.datetime.now())
@ -424,9 +461,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='my_account_repos', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def my_account_repos(self):
c = self.load_default_context()
c.active = 'repos'
@ -437,9 +471,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='my_account_watched', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def my_account_watched(self):
c = self.load_default_context()
c.active = 'watched'
@ -450,9 +481,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='my_account_bookmarks', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def my_account_bookmarks(self):
c = self.load_default_context()
c.active = 'bookmarks'
@ -519,8 +547,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='my_account_bookmarks_update', request_method='POST')
def my_account_bookmarks_update(self):
_ = self.request.translate
c = self.load_default_context()
@ -559,9 +585,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='my_account_goto_bookmark', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def my_account_goto_bookmark(self):
bookmark_id = self.request.matchdict['bookmark_id']
@ -606,9 +629,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='my_account_perms', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def my_account_perms(self):
c = self.load_default_context()
c.active = 'perms'
@ -618,9 +638,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='my_account_notifications', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def my_notifications(self):
c = self.load_default_context()
c.active = 'notifications'
@ -630,9 +647,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='my_account_notifications_toggle_visibility',
request_method='POST', renderer='json_ext')
def my_notifications_toggle_visibility(self):
user = self._rhodecode_db_user
new_status = not user.user_data.get('notification_status', True)
@ -640,83 +654,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
Session().commit()
return user.user_data['notification_status']
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='my_account_edit',
request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def my_account_edit(self):
c = self.load_default_context()
c.active = 'profile_edit'
c.extern_type = c.user.extern_type
c.extern_name = c.user.extern_name
schema = user_schema.UserProfileSchema().bind(
username=c.user.username, user_emails=c.user.emails)
appstruct = {
'username': c.user.username,
'email': c.user.email,
'firstname': c.user.firstname,
'lastname': c.user.lastname,
'description': c.user.description,
}
c.form = forms.RcForm(
schema, appstruct=appstruct,
action=h.route_path('my_account_update'),
buttons=(forms.buttons.save, forms.buttons.reset))
return self._get_template_context(c)
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='my_account_update',
request_method='POST',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def my_account_update(self):
_ = self.request.translate
c = self.load_default_context()
c.active = 'profile_edit'
c.perm_user = c.auth_user
c.extern_type = c.user.extern_type
c.extern_name = c.user.extern_name
schema = user_schema.UserProfileSchema().bind(
username=c.user.username, user_emails=c.user.emails)
form = forms.RcForm(
schema, buttons=(forms.buttons.save, forms.buttons.reset))
controls = self.request.POST.items()
try:
valid_data = form.validate(controls)
skip_attrs = ['admin', 'active', 'extern_type', 'extern_name',
'new_password', 'password_confirmation']
if c.extern_type != "rhodecode":
# forbid updating username for external accounts
skip_attrs.append('username')
old_email = c.user.email
UserModel().update_user(
self._rhodecode_user.user_id, skip_attrs=skip_attrs,
**valid_data)
if old_email != valid_data['email']:
old = UserEmailMap.query() \
.filter(UserEmailMap.user == c.user)\
.filter(UserEmailMap.email == valid_data['email'])\
.first()
old.email = old_email
h.flash(_('Your account was updated successfully'), category='success')
Session().commit()
except forms.ValidationFailure as e:
c.form = e
return self._get_template_context(c)
except Exception:
log.exception("Exception updating user")
h.flash(_('Error occurred during update of user'),
category='error')
raise HTTPFound(h.route_path('my_account_profile'))
def _get_pull_requests_list(self, statuses):
draw, start, limit = self._extract_chunk(self.request)
search_q, order_by, order_dir = self._extract_ordering(self.request)
@ -781,10 +718,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='my_account_pullrequests',
request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def my_account_pullrequests(self):
c = self.load_default_context()
c.active = 'pullrequests'
@ -796,9 +729,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='my_account_pullrequests_data',
request_method='GET', renderer='json_ext')
def my_account_pullrequests_data(self):
self.load_default_context()
req_get = self.request.GET
@ -813,10 +743,6 @@ class MyAccountView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='my_account_user_group_membership',
request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def my_account_user_group_membership(self):
c = self.load_default_context()
c.active = 'user_group_membership'

View file

@ -22,7 +22,6 @@ import logging
from pyramid.httpexceptions import (
HTTPFound, HTTPNotFound, HTTPInternalServerError)
from pyramid.view import view_config
from rhodecode.apps._base import BaseAppView
from rhodecode.lib.auth import LoginRequired, NotAnonymous, CSRFRequired
@ -57,9 +56,6 @@ class MyAccountNotificationsView(BaseAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='notifications_show_all', request_method='GET',
renderer='rhodecode:templates/admin/notifications/notifications_show_all.mako')
def notifications_show_all(self):
c = self.load_default_context()
@ -105,22 +101,6 @@ class MyAccountNotificationsView(BaseAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='notifications_mark_all_read', request_method='POST',
renderer='rhodecode:templates/admin/notifications/notifications_show_all.mako')
def notifications_mark_all_read(self):
NotificationModel().mark_all_read_for_user(
self._rhodecode_db_user.user_id,
filter_=self.request.GET.getall('type'))
Session().commit()
raise HTTPFound(h.route_path('notifications_show_all'))
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='notifications_show', request_method='GET',
renderer='rhodecode:templates/admin/notifications/notifications_show.mako')
def notifications_show(self):
c = self.load_default_context()
notification_id = self.request.matchdict['notification_id']
@ -150,9 +130,16 @@ class MyAccountNotificationsView(BaseAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='notifications_update', request_method='POST',
renderer='json_ext')
def notifications_mark_all_read(self):
NotificationModel().mark_all_read_for_user(
self._rhodecode_db_user.user_id,
filter_=self.request.GET.getall('type'))
Session().commit()
raise HTTPFound(h.route_path('notifications_show_all'))
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
def notification_update(self):
notification_id = self.request.matchdict['notification_id']
notification = Notification.get_or_404(notification_id)
@ -177,9 +164,6 @@ class MyAccountNotificationsView(BaseAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='notifications_delete', request_method='POST',
renderer='json_ext')
def notification_delete(self):
notification_id = self.request.matchdict['notification_id']
notification = Notification.get_or_404(notification_id)

View file

@ -21,7 +21,6 @@
import logging
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
from rhodecode.apps._base import BaseAppView, DataGridAppView
from rhodecode.apps.ssh_support import SshKeyFileChangeEvent
@ -41,17 +40,12 @@ class MyAccountSshKeysView(BaseAppView, DataGridAppView):
def load_default_context(self):
c = self._get_local_tmpl_context()
c.user = c.auth_user.get_instance()
c.ssh_enabled = self.request.registry.settings.get(
'ssh.generate_authorized_keyfile')
return c
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='my_account_ssh_keys', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def my_account_ssh_keys(self):
_ = self.request.translate
@ -63,9 +57,6 @@ class MyAccountSshKeysView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='my_account_ssh_keys_generate', request_method='GET',
renderer='rhodecode:templates/admin/my_account/my_account.mako')
def ssh_keys_generate_keypair(self):
_ = self.request.translate
c = self.load_default_context()
@ -84,8 +75,6 @@ class MyAccountSshKeysView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='my_account_ssh_keys_add', request_method='POST',)
def my_account_ssh_keys_add(self):
_ = self.request.translate
c = self.load_default_context()
@ -132,8 +121,6 @@ class MyAccountSshKeysView(BaseAppView, DataGridAppView):
@LoginRequired()
@NotAnonymous()
@CSRFRequired()
@view_config(
route_name='my_account_ssh_keys_delete', request_method='POST')
def my_account_ssh_keys_delete(self):
_ = self.request.translate
c = self.load_default_context()

View file

@ -22,25 +22,35 @@ from rhodecode.apps._base import ADMIN_PREFIX
def admin_routes(config):
from rhodecode.apps.ops.views import OpsView
config.add_route(
name='ops_ping',
pattern='/ping')
config.add_view(
OpsView,
attr='ops_ping',
route_name='ops_ping', request_method='GET',
renderer='json_ext')
config.add_route(
name='ops_error_test',
pattern='/error')
config.add_view(
OpsView,
attr='ops_error_test',
route_name='ops_error_test', request_method='GET',
renderer='json_ext')
config.add_route(
name='ops_redirect_test',
pattern='/redirect')
config.add_view(
OpsView,
attr='ops_redirect_test',
route_name='ops_redirect_test', request_method='GET',
renderer='json_ext')
def includeme(config):
config.include(admin_routes, route_prefix=ADMIN_PREFIX + '/ops')
# make OLD entries from <4.10.0 work
config.add_route(
name='ops_ping_legacy', pattern=ADMIN_PREFIX + '/ping')
config.add_route(
name='ops_error_test_legacy', pattern=ADMIN_PREFIX + '/error_test')
# Scan module for configuration decorators.
config.scan('.views', ignore='.tests')

View file

@ -21,7 +21,7 @@
import time
import logging
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPFound
from rhodecode.apps._base import BaseAppView
@ -38,12 +38,6 @@ class OpsView(BaseAppView):
return c
@view_config(
route_name='ops_ping', request_method='GET',
renderer='json_ext')
@view_config(
route_name='ops_ping_legacy', request_method='GET',
renderer='json_ext')
def ops_ping(self):
data = {
'instance': self.request.registry.settings.get('instance_id'),
@ -59,12 +53,6 @@ class OpsView(BaseAppView):
})
return {'ok': data}
@view_config(
route_name='ops_error_test', request_method='GET',
renderer='json_ext')
@view_config(
route_name='ops_error_test_legacy', request_method='GET',
renderer='json_ext')
def ops_error_test(self):
"""
Test exception handling and emails on errors
@ -78,9 +66,6 @@ class OpsView(BaseAppView):
'Client:{}. Generation time: {}.'.format(self.request.user, time.time()))
raise TestException(msg)
@view_config(
route_name='ops_redirect_test', request_method='GET',
renderer='json_ext')
def ops_redirect_test(self):
"""
Test redirect handling

View file

@ -18,6 +18,10 @@
# RhodeCode Enterprise Edition, including its added features, Support services,
# and proprietary license terms, please see https://rhodecode.com/licenses/
from rhodecode.apps._base import add_route_with_slash
from rhodecode.apps.repo_group.views.repo_group_settings import RepoGroupSettingsView
from rhodecode.apps.repo_group.views.repo_group_advanced import RepoGroupAdvancedSettingsView
from rhodecode.apps.repo_group.views.repo_group_permissions import RepoGroupPermissionsView
from rhodecode.apps.home.views import HomeView
def includeme(config):
@ -27,35 +31,72 @@ def includeme(config):
name='edit_repo_group',
pattern='/{repo_group_name:.*?[^/]}/_edit',
repo_group_route=True)
# update is POST on edit_repo_group
config.add_view(
RepoGroupSettingsView,
attr='edit_settings',
route_name='edit_repo_group', request_method='GET',
renderer='rhodecode:templates/admin/repo_groups/repo_group_edit.mako')
config.add_view(
RepoGroupSettingsView,
attr='edit_settings_update',
route_name='edit_repo_group', request_method='POST',
renderer='rhodecode:templates/admin/repo_groups/repo_group_edit.mako')
# Settings advanced
config.add_route(
name='edit_repo_group_advanced',
pattern='/{repo_group_name:.*?[^/]}/_settings/advanced',
repo_group_route=True)
config.add_view(
RepoGroupAdvancedSettingsView,
attr='edit_repo_group_advanced',
route_name='edit_repo_group_advanced', request_method='GET',
renderer='rhodecode:templates/admin/repo_groups/repo_group_edit.mako')
config.add_route(
name='edit_repo_group_advanced_delete',
pattern='/{repo_group_name:.*?[^/]}/_settings/advanced/delete',
repo_group_route=True)
config.add_view(
RepoGroupAdvancedSettingsView,
attr='edit_repo_group_delete',
route_name='edit_repo_group_advanced_delete', request_method='POST',
renderer='rhodecode:templates/admin/repo_groups/repo_group_edit.mako')
# settings permissions
config.add_route(
name='edit_repo_group_perms',
pattern='/{repo_group_name:.*?[^/]}/_settings/permissions',
repo_group_route=True)
config.add_view(
RepoGroupPermissionsView,
attr='edit_repo_group_permissions',
route_name='edit_repo_group_perms', request_method='GET',
renderer='rhodecode:templates/admin/repo_groups/repo_group_edit.mako')
config.add_route(
name='edit_repo_group_perms_update',
pattern='/{repo_group_name:.*?[^/]}/_settings/permissions/update',
repo_group_route=True)
config.add_view(
RepoGroupPermissionsView,
attr='edit_repo_groups_permissions_update',
route_name='edit_repo_group_perms_update', request_method='POST',
renderer='rhodecode:templates/admin/repo_groups/repo_group_edit.mako')
# Summary, NOTE(marcink): needs to be at the end for catch-all
add_route_with_slash(
config,
name='repo_group_home',
pattern='/{repo_group_name:.*?[^/]}', repo_group_route=True)
config.add_view(
HomeView,
attr='repo_group_main_page',
route_name='repo_group_home', request_method='GET',
renderer='rhodecode:templates/index_repo_group.mako')
config.add_view(
HomeView,
attr='repo_group_main_page',
route_name='repo_group_home_slash', request_method='GET',
renderer='rhodecode:templates/index_repo_group.mako')
# Scan module for configuration decorators.
config.scan('.views', ignore='.tests')

View file

@ -20,7 +20,7 @@
import logging
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPFound
from rhodecode.apps._base import RepoGroupAppView
@ -34,17 +34,13 @@ from rhodecode.model.meta import Session
log = logging.getLogger(__name__)
class RepoGroupSettingsView(RepoGroupAppView):
class RepoGroupAdvancedSettingsView(RepoGroupAppView):
def load_default_context(self):
c = self._get_local_tmpl_context()
return c
@LoginRequired()
@HasRepoGroupPermissionAnyDecorator('group.admin')
@view_config(
route_name='edit_repo_group_advanced', request_method='GET',
renderer='rhodecode:templates/admin/repo_groups/repo_group_edit.mako')
def edit_repo_group_advanced(self):
_ = self.request.translate
c = self.load_default_context()
@ -61,9 +57,6 @@ class RepoGroupSettingsView(RepoGroupAppView):
@LoginRequired()
@HasRepoGroupPermissionAnyDecorator('group.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_group_advanced_delete', request_method='POST',
renderer='rhodecode:templates/admin/repo_groups/repo_group_edit.mako')
def edit_repo_group_delete(self):
_ = self.request.translate
_ungettext = self.request.plularize

View file

@ -20,7 +20,7 @@
import logging
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPFound
from rhodecode.apps._base import RepoGroupAppView
@ -45,9 +45,6 @@ class RepoGroupPermissionsView(RepoGroupAppView):
@LoginRequired()
@HasRepoGroupPermissionAnyDecorator('group.admin')
@view_config(
route_name='edit_repo_group_perms', request_method='GET',
renderer='rhodecode:templates/admin/repo_groups/repo_group_edit.mako')
def edit_repo_group_permissions(self):
c = self.load_default_context()
c.active = 'permissions'
@ -57,9 +54,6 @@ class RepoGroupPermissionsView(RepoGroupAppView):
@LoginRequired()
@HasRepoGroupPermissionAnyDecorator('group.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_group_perms_update', request_method='POST',
renderer='rhodecode:templates/admin/repo_groups/repo_group_edit.mako')
def edit_repo_groups_permissions_update(self):
_ = self.request.translate
c = self.load_default_context()

View file

@ -21,7 +21,7 @@
import logging
import deform
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPFound
from rhodecode import events
@ -109,9 +109,6 @@ class RepoGroupSettingsView(RepoGroupAppView):
@LoginRequired()
@HasRepoGroupPermissionAnyDecorator('group.admin')
@view_config(
route_name='edit_repo_group', request_method='GET',
renderer='rhodecode:templates/admin/repo_groups/repo_group_edit.mako')
def edit_settings(self):
c = self.load_default_context()
c.active = 'settings'
@ -126,9 +123,6 @@ class RepoGroupSettingsView(RepoGroupAppView):
@LoginRequired()
@HasRepoGroupPermissionAnyDecorator('group.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_group', request_method='POST',
renderer='rhodecode:templates/admin/repo_groups/repo_group_edit.mako')
def edit_settings_update(self):
_ = self.request.translate
c = self.load_default_context()

File diff suppressed because it is too large Load diff

View file

@ -20,7 +20,7 @@
import logging
from pyramid.view import view_config
from rhodecode.apps._base import RepoAppView
from rhodecode.lib.auth import (
@ -39,9 +39,6 @@ class RepoArtifactsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_artifacts_list', request_method='GET',
renderer='rhodecode:templates/artifacts/artifact_list.mako')
def repo_artifacts(self):
c = self.load_default_context()
c.active = 'artifacts'

View file

@ -19,7 +19,7 @@
# and proprietary license terms, please see https://rhodecode.com/licenses/
import logging
from pyramid.view import view_config
from rhodecode.apps._base import RepoAppView
from rhodecode.lib.helpers import SqlPage
@ -38,9 +38,6 @@ class AuditLogsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@view_config(
route_name='edit_repo_audit_logs', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def repo_audit_logs(self):
_ = self.request.translate
c = self.load_default_context()

View file

@ -20,7 +20,7 @@
import logging
from pyramid.view import view_config
from rhodecode.apps._base import RepoAppView
from rhodecode.apps.repository.utils import get_default_reviewers_data
@ -36,9 +36,6 @@ class RepoAutomationView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@view_config(
route_name='repo_automation', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def repo_automation(self):
c = self.load_default_context()
c.active = 'automation'

View file

@ -20,7 +20,7 @@
import logging
from pyramid.httpexceptions import HTTPNotFound
from pyramid.view import view_config
from rhodecode.apps._base import BaseReferencesView
from rhodecode.lib.ext_json import json
@ -36,9 +36,6 @@ class RepoBookmarksView(BaseReferencesView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='bookmarks_home', request_method='GET',
renderer='rhodecode:templates/bookmarks/bookmarks.mako')
def bookmarks(self):
c = self.load_default_context()

View file

@ -20,7 +20,7 @@
import logging
from pyramid.view import view_config
from rhodecode.apps._base import RepoAppView
from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
@ -36,9 +36,6 @@ class RepoSettingsBranchPermissionsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@view_config(
route_name='edit_repo_perms_branch', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def branch_permissions(self):
c = self.load_default_context()
c.active = 'permissions_branch'

View file

@ -19,7 +19,7 @@
# and proprietary license terms, please see https://rhodecode.com/licenses/
import logging
from pyramid.view import view_config
from rhodecode.apps._base import BaseReferencesView
from rhodecode.lib.ext_json import json
@ -34,9 +34,6 @@ class RepoBranchesView(BaseReferencesView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='branches_home', request_method='GET',
renderer='rhodecode:templates/branches/branches.mako')
def branches(self):
c = self.load_default_context()

View file

@ -22,7 +22,7 @@ import os
import logging
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
from rhodecode.apps._base import RepoAppView
from rhodecode.lib.auth import (
@ -42,9 +42,6 @@ class RepoCachesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@view_config(
route_name='edit_repo_caches', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def repo_caches(self):
c = self.load_default_context()
c.active = 'caches'
@ -65,8 +62,6 @@ class RepoCachesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_caches', request_method='POST')
def repo_caches_purge(self):
_ = self.request.translate
c = self.load_default_context()

View file

@ -22,7 +22,7 @@
import logging
from pyramid.httpexceptions import HTTPNotFound, HTTPFound
from pyramid.view import view_config
from pyramid.renderers import render
from pyramid.response import Response
@ -176,19 +176,6 @@ class RepoChangelogView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_commits', request_method='GET',
renderer='rhodecode:templates/commits/changelog.mako')
@view_config(
route_name='repo_commits_file', request_method='GET',
renderer='rhodecode:templates/commits/changelog.mako')
# old routes for backward compat
@view_config(
route_name='repo_changelog', request_method='GET',
renderer='rhodecode:templates/commits/changelog.mako')
@view_config(
route_name='repo_changelog_file', request_method='GET',
renderer='rhodecode:templates/commits/changelog.mako')
def repo_changelog(self):
c = self.load_default_context()
@ -291,14 +278,6 @@ class RepoChangelogView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_commits_elements', request_method=('GET', 'POST'),
renderer='rhodecode:templates/commits/changelog_elements.mako',
xhr=True)
@view_config(
route_name='repo_commits_elements_file', request_method=('GET', 'POST'),
renderer='rhodecode:templates/commits/changelog_elements.mako',
xhr=True)
def repo_commits_elements(self):
c = self.load_default_context()
commit_id = self.request.matchdict.get('commit_id')

View file

@ -20,10 +20,8 @@
import logging
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPFound, HTTPNotFound
from rhodecode import events
from rhodecode.apps._base import BaseAppView
from rhodecode.lib import helpers as h
from rhodecode.lib.auth import (NotAnonymous, HasRepoPermissionAny)
@ -37,13 +35,9 @@ log = logging.getLogger(__name__)
class RepoChecksView(BaseAppView):
def load_default_context(self):
c = self._get_local_tmpl_context()
return c
@NotAnonymous()
@view_config(
route_name='repo_creating', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_creating.mako')
def repo_creating(self):
c = self.load_default_context()
repo_name = self.request.matchdict['repo_name']
@ -71,9 +65,6 @@ class RepoChecksView(BaseAppView):
return self._get_template_context(c)
@NotAnonymous()
@view_config(
route_name='repo_creating_check', request_method='GET',
renderer='json_ext')
def repo_creating_check(self):
_ = self.request.translate
task_id = self.request.GET.get('task_id')

View file

@ -23,7 +23,6 @@ import collections
from pyramid.httpexceptions import (
HTTPNotFound, HTTPBadRequest, HTTPFound, HTTPForbidden, HTTPConflict)
from pyramid.view import view_config
from pyramid.renderers import render
from pyramid.response import Response
@ -340,9 +339,6 @@ class RepoCommitsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_commit', request_method='GET',
renderer=None)
def repo_commit_show(self):
commit_id = self.request.matchdict['commit_id']
return self._commit(commit_id, method='show')
@ -350,12 +346,6 @@ class RepoCommitsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_commit_raw', request_method='GET',
renderer=None)
@view_config(
route_name='repo_commit_raw_deprecated', request_method='GET',
renderer=None)
def repo_commit_raw(self):
commit_id = self.request.matchdict['commit_id']
return self._commit(commit_id, method='raw')
@ -363,9 +353,6 @@ class RepoCommitsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_commit_patch', request_method='GET',
renderer=None)
def repo_commit_patch(self):
commit_id = self.request.matchdict['commit_id']
return self._commit(commit_id, method='patch')
@ -373,9 +360,6 @@ class RepoCommitsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_commit_download', request_method='GET',
renderer=None)
def repo_commit_download(self):
commit_id = self.request.matchdict['commit_id']
return self._commit(commit_id, method='download')
@ -500,9 +484,6 @@ class RepoCommitsView(RepoAppView):
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='repo_commit_comment_create', request_method='POST',
renderer='json_ext')
def repo_commit_comment_create(self):
_ = self.request.translate
commit_id = self.request.matchdict['commit_id']
@ -538,9 +519,6 @@ class RepoCommitsView(RepoAppView):
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='repo_commit_comment_preview', request_method='POST',
renderer='string', xhr=True)
def repo_commit_comment_preview(self):
# Technically a CSRF token is not needed as no state changes with this
# call. However, as this is a POST is better to have it, so automated
@ -559,9 +537,6 @@ class RepoCommitsView(RepoAppView):
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='repo_commit_comment_history_view', request_method='POST',
renderer='string', xhr=True)
def repo_commit_comment_history_view(self):
c = self.load_default_context()
@ -587,9 +562,6 @@ class RepoCommitsView(RepoAppView):
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='repo_commit_comment_attachment_upload', request_method='POST',
renderer='json_ext', xhr=True)
def repo_commit_comment_attachment_upload(self):
c = self.load_default_context()
upload_key = 'attachment'
@ -682,9 +654,6 @@ class RepoCommitsView(RepoAppView):
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='repo_commit_comment_delete', request_method='POST',
renderer='json_ext')
def repo_commit_comment_delete(self):
commit_id = self.request.matchdict['commit_id']
comment_id = self.request.matchdict['comment_id']
@ -719,9 +688,6 @@ class RepoCommitsView(RepoAppView):
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='repo_commit_comment_edit', request_method='POST',
renderer='json_ext')
def repo_commit_comment_edit(self):
self.load_default_context()
@ -802,9 +768,6 @@ class RepoCommitsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_commit_data', request_method='GET',
renderer='json_ext', xhr=True)
def repo_commit_data(self):
commit_id = self.request.matchdict['commit_id']
self.load_default_context()
@ -817,9 +780,6 @@ class RepoCommitsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_commit_children', request_method='GET',
renderer='json_ext', xhr=True)
def repo_commit_children(self):
commit_id = self.request.matchdict['commit_id']
self.load_default_context()
@ -836,9 +796,6 @@ class RepoCommitsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_commit_parents', request_method='GET',
renderer='json_ext')
def repo_commit_parents(self):
commit_id = self.request.matchdict['commit_id']
self.load_default_context()

View file

@ -22,7 +22,7 @@
import logging
from pyramid.httpexceptions import HTTPBadRequest, HTTPNotFound, HTTPFound
from pyramid.view import view_config
from pyramid.renderers import render
from pyramid.response import Response
@ -79,9 +79,6 @@ class RepoCompareView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_compare_select', request_method='GET',
renderer='rhodecode:templates/compare/compare_diff.mako')
def compare_select(self):
_ = self.request.translate
c = self.load_default_context()
@ -111,9 +108,6 @@ class RepoCompareView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_compare', request_method='GET',
renderer=None)
def compare(self):
_ = self.request.translate
c = self.load_default_context()

View file

@ -20,10 +20,8 @@
import pytz
import logging
from pyramid.view import view_config
from pyramid.response import Response
from rhodecode.apps._base import RepoAppView
from rhodecode.lib.feedgenerator import Rss201rev2Feed, Atom1Feed
from rhodecode.lib import audit_logger
@ -118,8 +116,6 @@ class RepoFeedView(RepoAppView):
@LoginRequired(auth_token_access=[UserApiKeys.ROLE_FEED])
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(route_name='atom_feed_home', request_method='GET', renderer=None)
@view_config(route_name='atom_feed_home_old', request_method='GET', renderer=None)
def atom(self):
"""
Produce an atom-1.0 feed via feedgenerator module
@ -166,8 +162,6 @@ class RepoFeedView(RepoAppView):
@LoginRequired(auth_token_access=[UserApiKeys.ROLE_FEED])
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(route_name='rss_feed_home', request_method='GET', renderer=None)
@view_config(route_name='rss_feed_home_old', request_method='GET', renderer=None)
def rss(self):
"""
Produce an rss2 feed via feedgenerator module

View file

@ -28,7 +28,7 @@ import urllib
import pathlib2
from pyramid.httpexceptions import HTTPNotFound, HTTPBadRequest, HTTPFound
from pyramid.view import view_config
from pyramid.renderers import render
from pyramid.response import Response
@ -343,9 +343,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_archivefile', request_method='GET',
renderer=None)
def repo_archivefile(self):
# archive cache config
from rhodecode import CONFIG
@ -496,9 +493,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_files_diff', request_method='GET',
renderer=None)
def repo_files_diff(self):
c = self.load_default_context()
f_path = self._get_f_path(self.request.matchdict)
@ -581,9 +575,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_files_diff_2way_redirect', request_method='GET',
renderer=None)
def repo_files_diff_2way_redirect(self):
"""
Kept only to make OLD links work
@ -610,10 +601,11 @@ class RepoFilesView(RepoAppView):
raise HTTPFound(compare_url)
@LoginRequired()
@view_config(
route_name='repo_files:default_commit', request_method='GET',
renderer=None)
def repo_files_default(self):
def repo_files_default_commit_redirect(self):
"""
Special page that redirects to the landing page of files based on the default
commit for repository
"""
c = self.load_default_context()
ref_name = c.rhodecode_db_repo.landing_ref_name
landing_url = h.repo_files_by_ref_url(
@ -630,18 +622,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_files', request_method='GET',
renderer=None)
@view_config(
route_name='repo_files:default_path', request_method='GET',
renderer=None)
@view_config(
route_name='repo_files:rendered', request_method='GET',
renderer=None)
@view_config(
route_name='repo_files:annotated', request_method='GET',
renderer=None)
def repo_files(self):
c = self.load_default_context()
@ -759,9 +739,6 @@ class RepoFilesView(RepoAppView):
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_files:annotated_previous', request_method='GET',
renderer=None)
def repo_files_annotated_previous(self):
self.load_default_context()
@ -790,12 +767,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_nodetree_full', request_method='GET',
renderer=None, xhr=True)
@view_config(
route_name='repo_nodetree_full:default_path', request_method='GET',
renderer=None, xhr=True)
def repo_nodetree_full(self):
"""
Returns rendered html of file tree that contains commit date,
@ -835,9 +806,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_file_raw', request_method='GET',
renderer=None)
def repo_file_raw(self):
"""
Action for show as raw, some mimetypes are "rendered",
@ -902,12 +870,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_file_download', request_method='GET',
renderer=None)
@view_config(
route_name='repo_file_download:legacy', request_method='GET',
renderer=None)
def repo_file_download(self):
c = self.load_default_context()
@ -972,9 +934,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_files_nodelist', request_method='GET',
renderer='json_ext', xhr=True)
def repo_nodelist(self):
self.load_default_context()
@ -1059,9 +1018,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_file_history', request_method='GET',
renderer='json_ext')
def repo_file_history(self):
self.load_default_context()
@ -1105,9 +1061,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_file_authors', request_method='GET',
renderer='rhodecode:templates/files/file_authors_box.mako')
def repo_file_authors(self):
c = self.load_default_context()
@ -1149,9 +1102,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
@view_config(
route_name='repo_files_check_head', request_method='POST',
renderer='json_ext', xhr=True)
def repo_files_check_head(self):
self.load_default_context()
@ -1186,9 +1136,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
@view_config(
route_name='repo_files_remove_file', request_method='GET',
renderer='rhodecode:templates/files/files_delete.mako')
def repo_files_remove_file(self):
_ = self.request.translate
c = self.load_default_context()
@ -1214,9 +1161,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='repo_files_delete_file', request_method='POST',
renderer=None)
def repo_files_delete_file(self):
_ = self.request.translate
@ -1266,9 +1210,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
@view_config(
route_name='repo_files_edit_file', request_method='GET',
renderer='rhodecode:templates/files/files_edit.mako')
def repo_files_edit_file(self):
_ = self.request.translate
c = self.load_default_context()
@ -1300,9 +1241,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='repo_files_update_file', request_method='POST',
renderer=None)
def repo_files_update_file(self):
_ = self.request.translate
c = self.load_default_context()
@ -1384,12 +1322,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
@view_config(
route_name='repo_files_add_file', request_method='GET',
renderer='rhodecode:templates/files/files_add.mako')
@view_config(
route_name='repo_files_upload_file', request_method='GET',
renderer='rhodecode:templates/files/files_upload.mako')
def repo_files_add_file(self):
_ = self.request.translate
c = self.load_default_context()
@ -1421,9 +1353,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='repo_files_create_file', request_method='POST',
renderer=None)
def repo_files_create_file(self):
_ = self.request.translate
c = self.load_default_context()
@ -1518,9 +1447,6 @@ class RepoFilesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='repo_files_upload_file', request_method='POST',
renderer='json_ext')
def repo_files_upload_file(self):
_ = self.request.translate
c = self.load_default_context()

View file

@ -24,7 +24,7 @@ import formencode
import formencode.htmlfill
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
from pyramid.renderers import render
from pyramid.response import Response
@ -64,9 +64,6 @@ class RepoForksView(RepoAppView, DataGridAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_forks_show_all', request_method='GET',
renderer='rhodecode:templates/forks/forks.mako')
def repo_forks_show_all(self):
c = self.load_default_context()
return self._get_template_context(c)
@ -74,9 +71,6 @@ class RepoForksView(RepoAppView, DataGridAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_forks_data', request_method='GET',
renderer='json_ext', xhr=True)
def repo_forks_data(self):
_ = self.request.translate
self.load_default_context()
@ -174,9 +168,6 @@ class RepoForksView(RepoAppView, DataGridAppView):
@HasPermissionAnyDecorator('hg.admin', 'hg.fork.repository')
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_fork_new', request_method='GET',
renderer='rhodecode:templates/forks/forks.mako')
def repo_fork_new(self):
c = self.load_default_context()
@ -204,9 +195,6 @@ class RepoForksView(RepoAppView, DataGridAppView):
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='repo_fork_create', request_method='POST',
renderer='rhodecode:templates/forks/fork.mako')
def repo_fork_create(self):
_ = self.request.translate
c = self.load_default_context()

View file

@ -20,7 +20,7 @@
import logging
from pyramid.view import view_config
from rhodecode.apps._base import RepoAppView
from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
@ -36,9 +36,6 @@ class RepoMaintenanceView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@view_config(
route_name='edit_repo_maintenance', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def repo_maintenance(self):
c = self.load_default_context()
c.active = 'maintenance'
@ -48,9 +45,6 @@ class RepoMaintenanceView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@view_config(
route_name='edit_repo_maintenance_execute', request_method='GET',
renderer='json', xhr=True)
def repo_maintenance_execute(self):
c = self.load_default_context()
c.active = 'maintenance'

View file

@ -21,7 +21,6 @@
import logging
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
from rhodecode.apps._base import RepoAppView
from rhodecode.lib import helpers as h
@ -46,9 +45,6 @@ class RepoSettingsPermissionsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@view_config(
route_name='edit_repo_perms', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def edit_permissions(self):
_ = self.request.translate
c = self.load_default_context()
@ -62,9 +58,6 @@ class RepoSettingsPermissionsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_perms', request_method='POST',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def edit_permissions_update(self):
_ = self.request.translate
c = self.load_default_context()
@ -104,9 +97,6 @@ class RepoSettingsPermissionsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_perms_set_private', request_method='POST',
renderer='json_ext')
def edit_permissions_set_private_repo(self):
_ = self.request.translate
self.load_default_context()

View file

@ -26,7 +26,7 @@ import formencode.htmlfill
import peppercorn
from pyramid.httpexceptions import (
HTTPFound, HTTPNotFound, HTTPForbidden, HTTPBadRequest, HTTPConflict)
from pyramid.view import view_config
from pyramid.renderers import render
from rhodecode.apps._base import RepoAppView, DataGridAppView
@ -147,9 +147,6 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='pullrequest_show_all', request_method='GET',
renderer='rhodecode:templates/pullrequests/pullrequests.mako')
def pull_request_list(self):
c = self.load_default_context()
@ -177,9 +174,6 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='pullrequest_show_all_data', request_method='GET',
renderer='json_ext', xhr=True)
def pull_request_list_data(self):
self.load_default_context()
@ -311,9 +305,6 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='pullrequest_show', request_method='GET',
renderer='rhodecode:templates/pullrequests/pullrequest_show.mako')
def pull_request_show(self):
_ = self.request.translate
c = self.load_default_context()
@ -842,9 +833,6 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
@NotAnonymous()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='pullrequest_new', request_method='GET',
renderer='rhodecode:templates/pullrequests/pullrequest.mako')
def pull_request_new(self):
_ = self.request.translate
c = self.load_default_context()
@ -902,9 +890,6 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
@NotAnonymous()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='pullrequest_repo_refs', request_method='GET',
renderer='json_ext', xhr=True)
def pull_request_repo_refs(self):
self.load_default_context()
target_repo_name = self.request.matchdict['target_repo_name']
@ -925,9 +910,6 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
@NotAnonymous()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='pullrequest_repo_targets', request_method='GET',
renderer='json_ext', xhr=True)
def pullrequest_repo_targets(self):
_ = self.request.translate
filter_query = self.request.GET.get('query')
@ -998,9 +980,6 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
@NotAnonymous()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='pullrequest_comments', request_method='POST',
renderer='string_html', xhr=True)
def pullrequest_comments(self):
self.load_default_context()
@ -1038,9 +1017,6 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
@NotAnonymous()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='pullrequest_todos', request_method='POST',
renderer='string_html', xhr=True)
def pullrequest_todos(self):
self.load_default_context()
@ -1080,9 +1056,6 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
@NotAnonymous()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='pullrequest_drafts', request_method='POST',
renderer='string_html', xhr=True)
def pullrequest_drafts(self):
self.load_default_context()
@ -1123,9 +1096,6 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='pullrequest_create', request_method='POST',
renderer=None)
def pull_request_create(self):
_ = self.request.translate
self.assure_not_empty_repo()
@ -1281,9 +1251,6 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='pullrequest_update', request_method='POST',
renderer='json_ext')
def pull_request_update(self):
pull_request = PullRequest.get_or_404(
self.request.matchdict['pull_request_id'])
@ -1465,9 +1432,6 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='pullrequest_merge', request_method='POST',
renderer='json_ext')
def pull_request_merge(self):
"""
Merge will perform a server-side merge of the specified
@ -1541,9 +1505,6 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='pullrequest_delete', request_method='POST',
renderer='json_ext')
def pull_request_delete(self):
_ = self.request.translate
@ -1719,9 +1680,6 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='pullrequest_comment_create', request_method='POST',
renderer='json_ext')
def pull_request_comment_create(self):
_ = self.request.translate
@ -1756,9 +1714,6 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='pullrequest_comment_delete', request_method='POST',
renderer='json_ext')
def pull_request_comment_delete(self):
pull_request = PullRequest.get_or_404(
self.request.matchdict['pull_request_id'])
@ -1810,9 +1765,6 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@CSRFRequired()
@view_config(
route_name='pullrequest_comment_edit', request_method='POST',
renderer='json_ext')
def pull_request_comment_edit(self):
self.load_default_context()

View file

@ -20,7 +20,7 @@
import logging
from pyramid.view import view_config
from rhodecode.apps._base import RepoAppView
from rhodecode.apps.repository.utils import get_default_reviewers_data
@ -38,9 +38,6 @@ class RepoReviewRulesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@view_config(
route_name='repo_reviewers', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def repo_review_rules(self):
c = self.load_default_context()
c.active = 'reviewers'
@ -50,9 +47,6 @@ class RepoReviewRulesView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_default_reviewers_data', request_method='GET',
renderer='json_ext')
def repo_default_reviewers_data(self):
self.load_default_context()

View file

@ -22,7 +22,6 @@ import logging
import deform
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
from rhodecode import events
from rhodecode.apps._base import RepoAppView
@ -90,9 +89,6 @@ class RepoSettingsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@view_config(
route_name='edit_repo', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def edit_settings(self):
c = self.load_default_context()
c.active = 'settings'
@ -108,9 +104,6 @@ class RepoSettingsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo', request_method='POST',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def edit_settings_update(self):
_ = self.request.translate
c = self.load_default_context()
@ -192,9 +185,6 @@ class RepoSettingsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
@view_config(
route_name='repo_edit_toggle_locking', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def toggle_locking(self):
"""
Toggle locking of repository by simple GET call to url
@ -224,9 +214,6 @@ class RepoSettingsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@view_config(
route_name='edit_repo_statistics', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def edit_statistics_form(self):
c = self.load_default_context()
@ -250,9 +237,6 @@ class RepoSettingsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_statistics_reset', request_method='POST',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def repo_statistics_reset(self):
_ = self.request.translate

View file

@ -20,7 +20,7 @@
import logging
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPFound
from packaging.version import Version
@ -42,7 +42,7 @@ from rhodecode.model.scm import ScmModel
log = logging.getLogger(__name__)
class RepoSettingsView(RepoAppView):
class RepoSettingsAdvancedView(RepoAppView):
def load_default_context(self):
c = self._get_local_tmpl_context()
@ -57,9 +57,6 @@ class RepoSettingsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@view_config(
route_name='edit_repo_advanced', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def edit_advanced(self):
_ = self.request.translate
c = self.load_default_context()
@ -89,9 +86,6 @@ class RepoSettingsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_advanced_archive', request_method='POST',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def edit_advanced_archive(self):
"""
Archives the repository. It will become read-only, and not visible in search
@ -132,9 +126,6 @@ class RepoSettingsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_advanced_delete', request_method='POST',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def edit_advanced_delete(self):
"""
Deletes the repository, or shows warnings if deletion is not possible
@ -209,9 +200,6 @@ class RepoSettingsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_advanced_journal', request_method='POST',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def edit_advanced_journal(self):
"""
Set's this repository to be visible in public journal,
@ -236,9 +224,6 @@ class RepoSettingsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_advanced_fork', request_method='POST',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def edit_advanced_fork(self):
"""
Mark given repository as a fork of another
@ -281,10 +266,7 @@ class RepoSettingsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_advanced_locking', request_method='POST',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def edit_advanced_locking(self):
def edit_advanced_toggle_locking(self):
"""
Toggle locking of repository
"""
@ -309,9 +291,6 @@ class RepoSettingsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@view_config(
route_name='edit_repo_advanced_hooks', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def edit_advanced_install_hooks(self):
"""
Install Hooks for repository

View file

@ -24,7 +24,6 @@ import formencode
import formencode.htmlfill
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
from rhodecode.apps._base import RepoAppView
from rhodecode.lib import audit_logger
@ -48,9 +47,6 @@ class RepoSettingsFieldsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@view_config(
route_name='edit_repo_fields', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def repo_field_edit(self):
c = self.load_default_context()
@ -63,9 +59,6 @@ class RepoSettingsFieldsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_fields_create', request_method='POST',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def repo_field_create(self):
_ = self.request.translate
@ -94,9 +87,6 @@ class RepoSettingsFieldsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_fields_delete', request_method='POST',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def repo_field_delete(self):
_ = self.request.translate
field = RepositoryField.get_or_404(self.request.matchdict['field_id'])

View file

@ -21,7 +21,7 @@
import logging
from pyramid.httpexceptions import HTTPFound, HTTPNotFound
from pyramid.view import view_config
import formencode
from rhodecode.apps._base import RepoAppView
@ -45,9 +45,6 @@ class RepoSettingsIssueTrackersView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@view_config(
route_name='edit_repo_issuetracker', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def repo_issuetracker(self):
c = self.load_default_context()
c.active = 'issuetracker'
@ -62,9 +59,6 @@ class RepoSettingsIssueTrackersView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_issuetracker_test', request_method='POST',
renderer='string', xhr=True)
def repo_issuetracker_test(self):
return h.urlify_commit_message(
self.request.POST.get('test_text', ''),
@ -73,9 +67,6 @@ class RepoSettingsIssueTrackersView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_issuetracker_delete', request_method='POST',
renderer='json_ext', xhr=True)
def repo_issuetracker_delete(self):
_ = self.request.translate
uid = self.request.POST.get('uid')
@ -107,9 +98,6 @@ class RepoSettingsIssueTrackersView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_issuetracker_update', request_method='POST',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def repo_issuetracker_update(self):
_ = self.request.translate
# Save inheritance

View file

@ -21,7 +21,7 @@
import logging
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
from rhodecode.apps._base import RepoAppView
from rhodecode.lib import helpers as h
@ -39,9 +39,6 @@ class RepoSettingsRemoteView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@view_config(
route_name='edit_repo_remote', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def repo_remote_edit_form(self):
c = self.load_default_context()
c.active = 'remote'
@ -51,9 +48,6 @@ class RepoSettingsRemoteView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_remote_pull', request_method='POST',
renderer=None)
def repo_remote_pull_changes(self):
_ = self.request.translate
self.load_default_context()

View file

@ -25,10 +25,8 @@ import formencode.htmlfill
from pyramid.httpexceptions import HTTPFound, HTTPBadRequest
from pyramid.response import Response
from pyramid.renderers import render
from pyramid.view import view_config
from rhodecode.apps._base import RepoAppView
from rhodecode.lib import audit_logger
from rhodecode.lib import helpers as h
from rhodecode.lib.auth import (
LoginRequired, HasRepoPermissionAnyDecorator, CSRFRequired)
@ -71,9 +69,6 @@ class RepoSettingsVcsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@view_config(
route_name='edit_repo_vcs', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def repo_vcs_settings(self):
c = self.load_default_context()
model = VcsSettingsModel(repo=self.db_repo_name)
@ -100,9 +95,6 @@ class RepoSettingsVcsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_vcs_update', request_method='POST',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def repo_settings_vcs_update(self):
_ = self.request.translate
c = self.load_default_context()
@ -153,9 +145,6 @@ class RepoSettingsVcsView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='edit_repo_vcs_svn_pattern_delete', request_method='POST',
renderer='json_ext', xhr=True)
def repo_settings_delete_svn_pattern(self):
self.load_default_context()
delete_pattern_id = self.request.POST.get('delete_svn_pattern')

View file

@ -19,7 +19,7 @@
# and proprietary license terms, please see https://rhodecode.com/licenses/
import logging
from pyramid.view import view_config
from rhodecode.apps._base import RepoAppView
from rhodecode.lib import audit_logger
@ -31,7 +31,7 @@ from rhodecode.lib.ext_json import json
log = logging.getLogger(__name__)
class StripView(RepoAppView):
class RepoStripView(RepoAppView):
def load_default_context(self):
c = self._get_local_tmpl_context()
@ -40,9 +40,6 @@ class StripView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@view_config(
route_name='edit_repo_strip', request_method='GET',
renderer='rhodecode:templates/admin/repos/repo_edit.mako')
def strip(self):
c = self.load_default_context()
c.active = 'strip'
@ -53,9 +50,6 @@ class StripView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='strip_check', request_method='POST',
renderer='json', xhr=True)
def strip_check(self):
from rhodecode.lib.vcs.backends.base import EmptyCommit
data = {}
@ -79,9 +73,6 @@ class StripView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator('repository.admin')
@CSRFRequired()
@view_config(
route_name='strip_execute', request_method='POST',
renderer='json', xhr=True)
def strip_execute(self):
from rhodecode.model.scm import ScmModel

View file

@ -24,7 +24,7 @@ import time
import rhodecode
from pyramid.view import view_config
from rhodecode.lib.view_utils import get_format_ref_id
from rhodecode.apps._base import RepoAppView
@ -101,9 +101,6 @@ class RepoSummaryView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_summary_commits', request_method='GET',
renderer='rhodecode:templates/summary/summary_commits.mako')
def summary_commits(self):
c = self.load_default_context()
self._prepare_and_set_clone_url(c)
@ -113,15 +110,6 @@ class RepoSummaryView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_summary', request_method='GET',
renderer='rhodecode:templates/summary/summary.mako')
@view_config(
route_name='repo_summary_slash', request_method='GET',
renderer='rhodecode:templates/summary/summary.mako')
@view_config(
route_name='repo_summary_explicit', request_method='GET',
renderer='rhodecode:templates/summary/summary.mako')
def summary(self):
c = self.load_default_context()
@ -176,9 +164,6 @@ class RepoSummaryView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_stats', request_method='GET',
renderer='json_ext')
def repo_stats(self):
show_stats = bool(self.db_repo.enable_statistics)
repo_id = self.db_repo.repo_id
@ -228,9 +213,6 @@ class RepoSummaryView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_refs_data', request_method='GET',
renderer='json_ext')
def repo_refs_data(self):
_ = self.request.translate
self.load_default_context()
@ -251,9 +233,6 @@ class RepoSummaryView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='repo_refs_changelog_data', request_method='GET',
renderer='json_ext')
def repo_refs_changelog_data(self):
_ = self.request.translate
self.load_default_context()

View file

@ -19,7 +19,6 @@
# and proprietary license terms, please see https://rhodecode.com/licenses/
import logging
from pyramid.view import view_config
from rhodecode.apps._base import BaseReferencesView
from rhodecode.lib.ext_json import json
@ -33,9 +32,6 @@ class RepoTagsView(BaseReferencesView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='tags_home', request_method='GET',
renderer='rhodecode:templates/tags/tags.mako')
def tags(self):
c = self.load_default_context()

View file

@ -21,23 +21,42 @@ from rhodecode.apps._base import ADMIN_PREFIX
def includeme(config):
from rhodecode.apps.search.views import (
SearchView, SearchRepoView, SearchRepoGroupView)
config.add_route(
name='search',
pattern=ADMIN_PREFIX + '/search')
config.add_view(
SearchView,
attr='search',
route_name='search', request_method='GET',
renderer='rhodecode:templates/search/search.mako')
config.add_route(
name='search_repo',
pattern='/{repo_name:.*?[^/]}/_search', repo_route=True)
config.add_view(
SearchRepoView,
attr='search_repo',
route_name='search_repo', request_method='GET',
renderer='rhodecode:templates/search/search.mako')
config.add_route(
name='search_repo_alt',
pattern='/{repo_name:.*?[^/]}/search', repo_route=True)
config.add_view(
SearchRepoView,
attr='search_repo',
route_name='search_repo_alt', request_method='GET',
renderer='rhodecode:templates/search/search.mako')
config.add_route(
name='search_repo_group',
pattern='/{repo_group_name:.*?[^/]}/_search',
repo_group_route=True)
# Scan module for configuration decorators.
config.scan('.views', ignore='.tests')
config.add_view(
SearchRepoGroupView,
attr='search_repo_group',
route_name='search_repo_group', request_method='GET',
renderer='rhodecode:templates/search/search.mako')

View file

@ -20,7 +20,7 @@
import logging
import urllib
from pyramid.view import view_config
from webhelpers2.html.tools import update_params
from rhodecode.apps._base import BaseAppView, RepoAppView, RepoGroupAppView
@ -130,9 +130,6 @@ class SearchView(BaseAppView):
return c
@LoginRequired()
@view_config(
route_name='search', request_method='GET',
renderer='rhodecode:templates/search/search.mako')
def search(self):
c = self.load_default_context()
perform_search(self.request, c)
@ -148,12 +145,6 @@ class SearchRepoView(RepoAppView):
@LoginRequired()
@HasRepoPermissionAnyDecorator(
'repository.read', 'repository.write', 'repository.admin')
@view_config(
route_name='search_repo', request_method='GET',
renderer='rhodecode:templates/search/search.mako')
@view_config(
route_name='search_repo_alt', request_method='GET',
renderer='rhodecode:templates/search/search.mako')
def search_repo(self):
c = self.load_default_context()
perform_search(self.request, c, repo_name=self.db_repo_name)
@ -169,9 +160,6 @@ class SearchRepoGroupView(RepoGroupAppView):
@LoginRequired()
@HasRepoGroupPermissionAnyDecorator(
'group.read', 'group.write', 'group.admin')
@view_config(
route_name='search_repo_group', request_method='GET',
renderer='rhodecode:templates/search/search.mako')
def search_repo_group(self):
c = self.load_default_context()
perform_search(self.request, c, repo_group_name=self.db_repo_group_name)

View file

@ -37,25 +37,6 @@ from . import config_keys
log = logging.getLogger(__name__)
def includeme(config):
settings = config.registry.settings
_sanitize_settings_and_apply_defaults(settings)
if settings[config_keys.generate_config]:
# Add subscriber to generate the Apache mod dav svn configuration on
# repository group events.
config.add_subscriber(generate_config_subscriber, RepoGroupEvent)
# If a reload command is set add a subscriber to execute it on
# configuration changes.
reload_cmd = settings[config_keys.reload_command]
if reload_cmd:
reload_timeout = settings[config_keys.reload_timeout] or None
reload_subscriber = AsyncSubprocessSubscriber(
cmd=reload_cmd, timeout=reload_timeout)
config.add_subscriber(reload_subscriber, ModDavSvnConfigChange)
def _sanitize_settings_and_apply_defaults(settings):
"""
Set defaults, convert to python types and validate settings.
@ -88,3 +69,22 @@ def _append_path_sep(path):
if isinstance(path, compat.string_types) and not path.endswith(os.path.sep):
path += os.path.sep
return path
def includeme(config):
settings = config.registry.settings
_sanitize_settings_and_apply_defaults(settings)
if settings[config_keys.generate_config]:
# Add subscriber to generate the Apache mod dav svn configuration on
# repository group events.
config.add_subscriber(generate_config_subscriber, RepoGroupEvent)
# If a reload command is set add a subscriber to execute it on
# configuration changes.
reload_cmd = settings[config_keys.reload_command]
if reload_cmd:
reload_timeout = settings[config_keys.reload_timeout] or None
reload_subscriber = AsyncSubprocessSubscriber(
cmd=reload_cmd, timeout=reload_timeout)
config.add_subscriber(reload_subscriber, ModDavSvnConfigChange)

View file

@ -28,74 +28,134 @@ def admin_routes(config):
"""
User groups /_admin prefixed routes
"""
from rhodecode.apps.user_group.views import UserGroupsView
config.add_route(
name='user_group_members_data',
pattern='/user_groups/{user_group_id:\d+}/members',
user_group_route=True)
config.add_view(
UserGroupsView,
attr='user_group_members',
route_name='user_group_members_data', request_method='GET',
renderer='json_ext', xhr=True)
# user groups perms
config.add_route(
name='edit_user_group_perms_summary',
pattern='/user_groups/{user_group_id:\d+}/edit/permissions_summary',
user_group_route=True)
config.add_view(
UserGroupsView,
attr='user_group_perms_summary',
route_name='edit_user_group_perms_summary', request_method='GET',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
config.add_route(
name='edit_user_group_perms_summary_json',
pattern='/user_groups/{user_group_id:\d+}/edit/permissions_summary/json',
user_group_route=True)
config.add_view(
UserGroupsView,
attr='user_group_perms_summary_json',
route_name='edit_user_group_perms_summary_json', request_method='GET',
renderer='json_ext')
# user groups edit
config.add_route(
name='edit_user_group',
pattern='/user_groups/{user_group_id:\d+}/edit',
user_group_route=True)
config.add_view(
UserGroupsView,
attr='user_group_edit',
route_name='edit_user_group', request_method='GET',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
# user groups update
config.add_route(
name='user_groups_update',
pattern='/user_groups/{user_group_id:\d+}/update',
user_group_route=True)
config.add_view(
UserGroupsView,
attr='user_group_update',
route_name='user_groups_update', request_method='POST',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
config.add_route(
name='edit_user_group_global_perms',
pattern='/user_groups/{user_group_id:\d+}/edit/global_permissions',
user_group_route=True)
config.add_view(
UserGroupsView,
attr='user_group_global_perms_edit',
route_name='edit_user_group_global_perms', request_method='GET',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
config.add_route(
name='edit_user_group_global_perms_update',
pattern='/user_groups/{user_group_id:\d+}/edit/global_permissions/update',
user_group_route=True)
config.add_view(
UserGroupsView,
attr='user_group_global_perms_update',
route_name='edit_user_group_global_perms_update', request_method='POST',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
config.add_route(
name='edit_user_group_perms',
pattern='/user_groups/{user_group_id:\d+}/edit/permissions',
user_group_route=True)
config.add_view(
UserGroupsView,
attr='user_group_edit_perms',
route_name='edit_user_group_perms', request_method='GET',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
config.add_route(
name='edit_user_group_perms_update',
pattern='/user_groups/{user_group_id:\d+}/edit/permissions/update',
user_group_route=True)
config.add_view(
UserGroupsView,
attr='user_group_update_perms',
route_name='edit_user_group_perms_update', request_method='POST',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
config.add_route(
name='edit_user_group_advanced',
pattern='/user_groups/{user_group_id:\d+}/edit/advanced',
user_group_route=True)
config.add_view(
UserGroupsView,
attr='user_group_edit_advanced',
route_name='edit_user_group_advanced', request_method='GET',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
config.add_route(
name='edit_user_group_advanced_sync',
pattern='/user_groups/{user_group_id:\d+}/edit/advanced/sync',
user_group_route=True)
config.add_view(
UserGroupsView,
attr='user_group_edit_advanced_set_synchronization',
route_name='edit_user_group_advanced_sync', request_method='POST',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
# user groups delete
config.add_route(
name='user_groups_delete',
pattern='/user_groups/{user_group_id:\d+}/delete',
user_group_route=True)
config.add_view(
UserGroupsView,
attr='user_group_delete',
route_name='user_groups_delete', request_method='POST',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
def includeme(config):
# main admin routes
config.include(admin_routes, route_prefix=ADMIN_PREFIX)
# Scan module for configuration decorators.
config.scan('.views', ignore='.tests')

View file

@ -24,7 +24,7 @@ import peppercorn
import formencode
import formencode.htmlfill
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
from pyramid.response import Response
from pyramid.renderers import render
@ -60,9 +60,6 @@ class UserGroupsView(UserGroupAppView):
@LoginRequired()
@HasUserGroupPermissionAnyDecorator('usergroup.admin')
@view_config(
route_name='user_group_members_data', request_method='GET',
renderer='json_ext', xhr=True)
def user_group_members(self):
"""
Return members of given user group
@ -93,9 +90,6 @@ class UserGroupsView(UserGroupAppView):
@LoginRequired()
@HasUserGroupPermissionAnyDecorator('usergroup.admin')
@view_config(
route_name='edit_user_group_perms_summary', request_method='GET',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
def user_group_perms_summary(self):
c = self.load_default_context()
c.user_group = self.db_user_group
@ -106,9 +100,6 @@ class UserGroupsView(UserGroupAppView):
@LoginRequired()
@HasUserGroupPermissionAnyDecorator('usergroup.admin')
@view_config(
route_name='edit_user_group_perms_summary_json', request_method='GET',
renderer='json_ext')
def user_group_perms_summary_json(self):
self.load_default_context()
user_group = self.db_user_group
@ -131,9 +122,6 @@ class UserGroupsView(UserGroupAppView):
@LoginRequired()
@HasUserGroupPermissionAnyDecorator('usergroup.admin')
@CSRFRequired()
@view_config(
route_name='user_groups_update', request_method='POST',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
def user_group_update(self):
_ = self.request.translate
@ -230,9 +218,6 @@ class UserGroupsView(UserGroupAppView):
@LoginRequired()
@HasUserGroupPermissionAnyDecorator('usergroup.admin')
@CSRFRequired()
@view_config(
route_name='user_groups_delete', request_method='POST',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
def user_group_delete(self):
_ = self.request.translate
user_group = self.db_user_group
@ -258,9 +243,6 @@ class UserGroupsView(UserGroupAppView):
@LoginRequired()
@HasUserGroupPermissionAnyDecorator('usergroup.admin')
@view_config(
route_name='edit_user_group', request_method='GET',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
def user_group_edit(self):
user_group = self.db_user_group
@ -293,9 +275,6 @@ class UserGroupsView(UserGroupAppView):
@LoginRequired()
@HasUserGroupPermissionAnyDecorator('usergroup.admin')
@view_config(
route_name='edit_user_group_perms', request_method='GET',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
def user_group_edit_perms(self):
user_group = self.db_user_group
c = self.load_default_context()
@ -326,9 +305,6 @@ class UserGroupsView(UserGroupAppView):
@LoginRequired()
@HasUserGroupPermissionAnyDecorator('usergroup.admin')
@CSRFRequired()
@view_config(
route_name='edit_user_group_perms_update', request_method='POST',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
def user_group_update_perms(self):
"""
grant permission for given user group
@ -390,9 +366,6 @@ class UserGroupsView(UserGroupAppView):
@LoginRequired()
@HasUserGroupPermissionAnyDecorator('usergroup.admin')
@view_config(
route_name='edit_user_group_global_perms', request_method='GET',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
def user_group_global_perms_edit(self):
user_group = self.db_user_group
c = self.load_default_context()
@ -418,9 +391,6 @@ class UserGroupsView(UserGroupAppView):
@LoginRequired()
@HasUserGroupPermissionAnyDecorator('usergroup.admin')
@CSRFRequired()
@view_config(
route_name='edit_user_group_global_perms_update', request_method='POST',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
def user_group_global_perms_update(self):
_ = self.request.translate
user_group = self.db_user_group
@ -485,9 +455,6 @@ class UserGroupsView(UserGroupAppView):
@LoginRequired()
@HasUserGroupPermissionAnyDecorator('usergroup.admin')
@view_config(
route_name='edit_user_group_advanced', request_method='GET',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
def user_group_edit_advanced(self):
user_group = self.db_user_group
@ -515,9 +482,6 @@ class UserGroupsView(UserGroupAppView):
@LoginRequired()
@HasUserGroupPermissionAnyDecorator('usergroup.admin')
@CSRFRequired()
@view_config(
route_name='edit_user_group_advanced_sync', request_method='POST',
renderer='rhodecode:templates/admin/user_groups/user_group_edit.mako')
def user_group_edit_advanced_set_synchronization(self):
_ = self.request.translate
user_group = self.db_user_group

View file

@ -20,8 +20,13 @@
def includeme(config):
from rhodecode.apps.user_group_profile.views import UserGroupProfileView
config.add_route(
name='user_group_profile',
pattern='/_profile_user_group/{user_group_name}')
# Scan module for configuration decorators.
config.scan('.views', ignore='.tests')
config.add_view(
UserGroupProfileView,
attr='user_group_profile',
route_name='user_group_profile', request_method='GET',
renderer='rhodecode:templates/user_group/user_group.mako')

View file

@ -21,7 +21,7 @@
import logging
from pyramid.httpexceptions import HTTPNotFound
from pyramid.view import view_config
from rhodecode.apps._base import BaseAppView
from rhodecode.lib.auth import HasUserGroupPermissionAnyDecorator, LoginRequired, NotAnonymous
@ -36,9 +36,6 @@ class UserGroupProfileView(BaseAppView):
@LoginRequired()
@NotAnonymous()
@HasUserGroupPermissionAnyDecorator('usergroup.read', 'usergroup.write', 'usergroup.admin',)
@view_config(
route_name='user_group_profile', request_method='GET',
renderer='rhodecode:templates/user_group/user_group.mako')
def user_group_profile(self):
c = self._get_local_tmpl_context()
c.active = 'profile'

View file

@ -20,9 +20,13 @@
def includeme(config):
from rhodecode.apps.user_profile.views import UserProfileView
config.add_route(
name='user_profile',
pattern='/_profiles/{username}')
# Scan module for configuration decorators.
config.scan('.views', ignore='.tests')
config.add_view(
UserProfileView,
attr='user_profile',
route_name='user_profile', request_method='GET',
renderer='rhodecode:templates/users/user.mako')

View file

@ -21,7 +21,6 @@
import logging
from pyramid.httpexceptions import HTTPNotFound
from pyramid.view import view_config
from rhodecode.apps._base import BaseAppView
from rhodecode.lib.auth import LoginRequired, NotAnonymous
@ -36,9 +35,6 @@ class UserProfileView(BaseAppView):
@LoginRequired()
@NotAnonymous()
@view_config(
route_name='user_profile', request_method='GET',
renderer='rhodecode:templates/users/user.mako')
def user_profile(self):
# register local template context
c = self._get_local_tmpl_context()

View file

@ -20,7 +20,7 @@
def generate_jsroutes_content(jsroutes):
statements = []
for url_name, url, fields in jsroutes:
for url_name, url, fields in sorted(jsroutes):
statements.append(
"pyroutes.register('%s', '%s', %s);" % (url_name, url, fields))
return u'''

View file

@ -92,6 +92,7 @@ def make_pyramid_app(global_config, **settings):
# Allows to use format style "{ENV_NAME}" placeholders in the configuration. It
# will be replaced by the value of the environment variable "NAME" in this case.
start_time = time.time()
log.info('Pyramid app config starting')
debug = asbool(global_config.get('debug'))
if debug:
@ -121,6 +122,7 @@ def make_pyramid_app(global_config, **settings):
pyramid_app.config = config
config.configure_celery(global_config['__file__'])
# creating the app uses a connection - return it after we are done
meta.Session.remove()
total_time = time.time() - start_time
@ -256,15 +258,11 @@ def includeme(config, auth_resources=None):
config.include('pyramid_mako')
config.include('rhodecode.lib.rc_beaker')
config.include('rhodecode.lib.rc_cache')
config.include('rhodecode.apps._base.navigation')
config.include('rhodecode.apps._base.subscribers')
config.include('rhodecode.tweens')
config.include('rhodecode.authentication')
if load_all:
config.include('rhodecode.integrations')
if load_all:
ce_auth_resources = [
'rhodecode.authentication.plugins.auth_crowd',
@ -291,15 +289,17 @@ def includeme(config, auth_resources=None):
# apps
if load_all:
config.include('rhodecode.api')
config.include('rhodecode.apps._base')
config.include('rhodecode.apps.hovercards')
config.include('rhodecode.apps.ops')
config.include('rhodecode.apps.admin')
config.include('rhodecode.apps.channelstream')
config.include('rhodecode.apps.file_store')
config.include('rhodecode.apps.admin')
config.include('rhodecode.apps.login')
config.include('rhodecode.apps.home')
config.include('rhodecode.apps.journal')
config.include('rhodecode.apps.repository')
config.include('rhodecode.apps.repo_group')
config.include('rhodecode.apps.user_group')
@ -307,11 +307,14 @@ def includeme(config, auth_resources=None):
config.include('rhodecode.apps.user_profile')
config.include('rhodecode.apps.user_group_profile')
config.include('rhodecode.apps.my_account')
config.include('rhodecode.apps.gist')
config.include('rhodecode.apps.svn_support')
config.include('rhodecode.apps.ssh_support')
config.include('rhodecode.apps.gist')
config.include('rhodecode.apps.debug_style')
config.include('rhodecode.api')
if load_all:
config.include('rhodecode.integrations')
config.add_route('rhodecode_support', 'https://rhodecode.com/help/', static=True)
config.add_translation_dirs('rhodecode:i18n/')

View file

@ -24,6 +24,9 @@ from rhodecode.apps._base import ADMIN_PREFIX, add_route_requirements
from rhodecode.lib.utils2 import safe_int
from rhodecode.model.db import Repository, Integration, RepoGroup
from rhodecode.integrations import integration_type_registry
from rhodecode.integrations.views import GlobalIntegrationsView
from rhodecode.integrations.views import RepoGroupIntegrationsView
from rhodecode.integrations.views import RepoIntegrationsView
log = logging.getLogger(__name__)
@ -83,7 +86,7 @@ def includeme(config):
# global integrations
config.add_route('global_integrations_new',
ADMIN_PREFIX + '/integrations/new')
config.add_view('rhodecode.integrations.views.GlobalIntegrationsView',
config.add_view(GlobalIntegrationsView,
attr='new_integration',
renderer='rhodecode:templates/admin/integrations/new.mako',
request_method='GET',
@ -94,7 +97,7 @@ def includeme(config):
config.add_route('global_integrations_list',
ADMIN_PREFIX + '/integrations/{integration}')
for route_name in ['global_integrations_home', 'global_integrations_list']:
config.add_view('rhodecode.integrations.views.GlobalIntegrationsView',
config.add_view(GlobalIntegrationsView,
attr='integration_list',
renderer='rhodecode:templates/admin/integrations/list.mako',
request_method='GET',
@ -108,12 +111,12 @@ def includeme(config):
valid_integration=True)
for route_name in ['global_integrations_create', 'global_integrations_edit']:
config.add_view('rhodecode.integrations.views.GlobalIntegrationsView',
config.add_view(GlobalIntegrationsView,
attr='settings_get',
renderer='rhodecode:templates/admin/integrations/form.mako',
request_method='GET',
route_name=route_name)
config.add_view('rhodecode.integrations.views.GlobalIntegrationsView',
config.add_view(GlobalIntegrationsView,
attr='settings_post',
renderer='rhodecode:templates/admin/integrations/form.mako',
request_method='POST',
@ -124,7 +127,7 @@ def includeme(config):
add_route_requirements('/{repo_group_name}/_settings/integrations'),
repo_group_route=True)
config.add_view('rhodecode.integrations.views.RepoGroupIntegrationsView',
config.add_view(RepoGroupIntegrationsView,
attr='integration_list',
renderer='rhodecode:templates/admin/integrations/list.mako',
request_method='GET',
@ -133,7 +136,7 @@ def includeme(config):
config.add_route('repo_group_integrations_new',
add_route_requirements('/{repo_group_name}/_settings/integrations/new'),
repo_group_route=True)
config.add_view('rhodecode.integrations.views.RepoGroupIntegrationsView',
config.add_view(RepoGroupIntegrationsView,
attr='new_integration',
renderer='rhodecode:templates/admin/integrations/new.mako',
request_method='GET',
@ -143,7 +146,7 @@ def includeme(config):
add_route_requirements('/{repo_group_name}/_settings/integrations/{integration}'),
repo_group_route=True,
valid_integration=True)
config.add_view('rhodecode.integrations.views.RepoGroupIntegrationsView',
config.add_view(RepoGroupIntegrationsView,
attr='integration_list',
renderer='rhodecode:templates/admin/integrations/list.mako',
request_method='GET',
@ -153,12 +156,12 @@ def includeme(config):
add_route_requirements('/{repo_group_name}/_settings/integrations/{integration}/new'),
repo_group_route=True,
valid_integration=True)
config.add_view('rhodecode.integrations.views.RepoGroupIntegrationsView',
config.add_view(RepoGroupIntegrationsView,
attr='settings_get',
renderer='rhodecode:templates/admin/integrations/form.mako',
request_method='GET',
route_name='repo_group_integrations_create')
config.add_view('rhodecode.integrations.views.RepoGroupIntegrationsView',
config.add_view(RepoGroupIntegrationsView,
attr='settings_post',
renderer='rhodecode:templates/admin/integrations/form.mako',
request_method='POST',
@ -169,12 +172,12 @@ def includeme(config):
repo_group_route=True,
valid_integration=True)
config.add_view('rhodecode.integrations.views.RepoGroupIntegrationsView',
config.add_view(RepoGroupIntegrationsView,
attr='settings_get',
renderer='rhodecode:templates/admin/integrations/form.mako',
request_method='GET',
route_name='repo_group_integrations_edit')
config.add_view('rhodecode.integrations.views.RepoGroupIntegrationsView',
config.add_view(RepoGroupIntegrationsView,
attr='settings_post',
renderer='rhodecode:templates/admin/integrations/form.mako',
request_method='POST',
@ -184,7 +187,7 @@ def includeme(config):
config.add_route('repo_integrations_home',
add_route_requirements('/{repo_name}/settings/integrations'),
repo_route=True)
config.add_view('rhodecode.integrations.views.RepoIntegrationsView',
config.add_view(RepoIntegrationsView,
attr='integration_list',
request_method='GET',
renderer='rhodecode:templates/admin/integrations/list.mako',
@ -193,7 +196,7 @@ def includeme(config):
config.add_route('repo_integrations_new',
add_route_requirements('/{repo_name}/settings/integrations/new'),
repo_route=True)
config.add_view('rhodecode.integrations.views.RepoIntegrationsView',
config.add_view(RepoIntegrationsView,
attr='new_integration',
renderer='rhodecode:templates/admin/integrations/new.mako',
request_method='GET',
@ -203,7 +206,7 @@ def includeme(config):
add_route_requirements('/{repo_name}/settings/integrations/{integration}'),
repo_route=True,
valid_integration=True)
config.add_view('rhodecode.integrations.views.RepoIntegrationsView',
config.add_view(RepoIntegrationsView,
attr='integration_list',
request_method='GET',
renderer='rhodecode:templates/admin/integrations/list.mako',
@ -213,12 +216,12 @@ def includeme(config):
add_route_requirements('/{repo_name}/settings/integrations/{integration}/new'),
repo_route=True,
valid_integration=True)
config.add_view('rhodecode.integrations.views.RepoIntegrationsView',
config.add_view(RepoIntegrationsView,
attr='settings_get',
renderer='rhodecode:templates/admin/integrations/form.mako',
request_method='GET',
route_name='repo_integrations_create')
config.add_view('rhodecode.integrations.views.RepoIntegrationsView',
config.add_view(RepoIntegrationsView,
attr='settings_post',
renderer='rhodecode:templates/admin/integrations/form.mako',
request_method='POST',
@ -228,12 +231,12 @@ def includeme(config):
add_route_requirements('/{repo_name}/settings/integrations/{integration}/{integration_id}'),
repo_route=True,
valid_integration=True)
config.add_view('rhodecode.integrations.views.RepoIntegrationsView',
config.add_view(RepoIntegrationsView,
attr='settings_get',
renderer='rhodecode:templates/admin/integrations/form.mako',
request_method='GET',
route_name='repo_integrations_edit')
config.add_view('rhodecode.integrations.views.RepoIntegrationsView',
config.add_view(RepoIntegrationsView,
attr='settings_post',
renderer='rhodecode:templates/admin/integrations/form.mako',
request_method='POST',

View file

@ -4810,6 +4810,7 @@ class Gist(Base, BaseModel):
res = cls.query().filter(cls.gist_access_id == id_).scalar()
if not res:
log.debug('WARN: No DB entry with id %s', id_)
raise HTTPNotFound()
return res

View file

@ -12,394 +12,392 @@
******************************************************************************/
function registerRCRoutes() {
// routes registration
pyroutes.register('favicon', '/favicon.ico', []);
pyroutes.register('robots', '/robots.txt', []);
pyroutes.register('auth_home', '/_admin/auth*traverse', []);
pyroutes.register('global_integrations_new', '/_admin/integrations/new', []);
pyroutes.register('global_integrations_home', '/_admin/integrations', []);
pyroutes.register('global_integrations_list', '/_admin/integrations/%(integration)s', ['integration']);
pyroutes.register('global_integrations_create', '/_admin/integrations/%(integration)s/new', ['integration']);
pyroutes.register('global_integrations_edit', '/_admin/integrations/%(integration)s/%(integration_id)s', ['integration', 'integration_id']);
pyroutes.register('repo_group_integrations_home', '/%(repo_group_name)s/_settings/integrations', ['repo_group_name']);
pyroutes.register('repo_group_integrations_new', '/%(repo_group_name)s/_settings/integrations/new', ['repo_group_name']);
pyroutes.register('repo_group_integrations_list', '/%(repo_group_name)s/_settings/integrations/%(integration)s', ['repo_group_name', 'integration']);
pyroutes.register('repo_group_integrations_create', '/%(repo_group_name)s/_settings/integrations/%(integration)s/new', ['repo_group_name', 'integration']);
pyroutes.register('repo_group_integrations_edit', '/%(repo_group_name)s/_settings/integrations/%(integration)s/%(integration_id)s', ['repo_group_name', 'integration', 'integration_id']);
pyroutes.register('repo_integrations_home', '/%(repo_name)s/settings/integrations', ['repo_name']);
pyroutes.register('repo_integrations_new', '/%(repo_name)s/settings/integrations/new', ['repo_name']);
pyroutes.register('repo_integrations_list', '/%(repo_name)s/settings/integrations/%(integration)s', ['repo_name', 'integration']);
pyroutes.register('repo_integrations_create', '/%(repo_name)s/settings/integrations/%(integration)s/new', ['repo_name', 'integration']);
pyroutes.register('repo_integrations_edit', '/%(repo_name)s/settings/integrations/%(integration)s/%(integration_id)s', ['repo_name', 'integration', 'integration_id']);
pyroutes.register('hovercard_user', '/_hovercard/user/%(user_id)s', ['user_id']);
pyroutes.register('hovercard_username', '/_hovercard/username/%(username)s', ['username']);
pyroutes.register('hovercard_user_group', '/_hovercard/user_group/%(user_group_id)s', ['user_group_id']);
pyroutes.register('hovercard_pull_request', '/_hovercard/pull_request/%(pull_request_id)s', ['pull_request_id']);
pyroutes.register('hovercard_repo_commit', '/_hovercard/commit/%(repo_name)s/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('ops_ping', '/_admin/ops/ping', []);
pyroutes.register('ops_error_test', '/_admin/ops/error', []);
pyroutes.register('ops_redirect_test', '/_admin/ops/redirect', []);
pyroutes.register('ops_ping_legacy', '/_admin/ping', []);
pyroutes.register('ops_error_test_legacy', '/_admin/error_test', []);
pyroutes.register('admin_home', '/_admin', []);
pyroutes.register('admin_audit_logs', '/_admin/audit_logs', []);
pyroutes.register('admin_audit_log_entry', '/_admin/audit_logs/%(audit_log_id)s', ['audit_log_id']);
pyroutes.register('pull_requests_global_0', '/_admin/pull_requests/%(pull_request_id)s', ['pull_request_id']);
pyroutes.register('pull_requests_global_1', '/_admin/pull-requests/%(pull_request_id)s', ['pull_request_id']);
pyroutes.register('pull_requests_global', '/_admin/pull-request/%(pull_request_id)s', ['pull_request_id']);
pyroutes.register('admin_settings_open_source', '/_admin/settings/open_source', []);
pyroutes.register('admin_settings_vcs_svn_generate_cfg', '/_admin/settings/vcs/svn_generate_cfg', []);
pyroutes.register('admin_settings_system', '/_admin/settings/system', []);
pyroutes.register('admin_settings_system_update', '/_admin/settings/system/updates', []);
pyroutes.register('admin_settings_exception_tracker', '/_admin/settings/exceptions', []);
pyroutes.register('admin_settings_exception_tracker_delete_all', '/_admin/settings/exceptions/delete', []);
pyroutes.register('admin_settings_exception_tracker_show', '/_admin/settings/exceptions/%(exception_id)s', ['exception_id']);
pyroutes.register('admin_settings_exception_tracker_delete', '/_admin/settings/exceptions/%(exception_id)s/delete', ['exception_id']);
pyroutes.register('admin_settings_sessions', '/_admin/settings/sessions', []);
pyroutes.register('admin_settings_sessions_cleanup', '/_admin/settings/sessions/cleanup', []);
pyroutes.register('admin_settings_process_management', '/_admin/settings/process_management', []);
pyroutes.register('admin_settings_process_management_data', '/_admin/settings/process_management/data', []);
pyroutes.register('admin_settings_process_management_signal', '/_admin/settings/process_management/signal', []);
pyroutes.register('admin_settings_process_management_master_signal', '/_admin/settings/process_management/master_signal', []);
pyroutes.register('admin_audit_logs', '/_admin/audit_logs', []);
pyroutes.register('admin_defaults_repositories', '/_admin/defaults/repositories', []);
pyroutes.register('admin_defaults_repositories_update', '/_admin/defaults/repositories/update', []);
pyroutes.register('admin_settings', '/_admin/settings', []);
pyroutes.register('admin_settings_update', '/_admin/settings/update', []);
pyroutes.register('admin_settings_global', '/_admin/settings/global', []);
pyroutes.register('admin_settings_global_update', '/_admin/settings/global/update', []);
pyroutes.register('admin_settings_vcs', '/_admin/settings/vcs', []);
pyroutes.register('admin_settings_vcs_update', '/_admin/settings/vcs/update', []);
pyroutes.register('admin_settings_vcs_svn_pattern_delete', '/_admin/settings/vcs/svn_pattern_delete', []);
pyroutes.register('admin_settings_mapping', '/_admin/settings/mapping', []);
pyroutes.register('admin_settings_mapping_update', '/_admin/settings/mapping/update', []);
pyroutes.register('admin_settings_visual', '/_admin/settings/visual', []);
pyroutes.register('admin_settings_visual_update', '/_admin/settings/visual/update', []);
pyroutes.register('admin_settings_issuetracker', '/_admin/settings/issue-tracker', []);
pyroutes.register('admin_settings_issuetracker_update', '/_admin/settings/issue-tracker/update', []);
pyroutes.register('admin_settings_issuetracker_test', '/_admin/settings/issue-tracker/test', []);
pyroutes.register('admin_settings_issuetracker_delete', '/_admin/settings/issue-tracker/delete', []);
pyroutes.register('admin_settings_email', '/_admin/settings/email', []);
pyroutes.register('admin_settings_email_update', '/_admin/settings/email/update', []);
pyroutes.register('admin_settings_hooks', '/_admin/settings/hooks', []);
pyroutes.register('admin_settings_hooks_update', '/_admin/settings/hooks/update', []);
pyroutes.register('admin_settings_hooks_delete', '/_admin/settings/hooks/delete', []);
pyroutes.register('admin_settings_search', '/_admin/settings/search', []);
pyroutes.register('admin_settings_labs', '/_admin/settings/labs', []);
pyroutes.register('admin_settings_labs_update', '/_admin/settings/labs/update', []);
pyroutes.register('admin_home', '/_admin', []);
pyroutes.register('admin_permissions_application', '/_admin/permissions/application', []);
pyroutes.register('admin_permissions_application_update', '/_admin/permissions/application/update', []);
pyroutes.register('admin_permissions_auth_token_access', '/_admin/permissions/auth_token_access', []);
pyroutes.register('admin_permissions_branch', '/_admin/permissions/branch', []);
pyroutes.register('admin_permissions_branch_update', '/_admin/permissions/branch/update', []);
pyroutes.register('admin_permissions_global', '/_admin/permissions/global', []);
pyroutes.register('admin_permissions_global_update', '/_admin/permissions/global/update', []);
pyroutes.register('admin_permissions_ips', '/_admin/permissions/ips', []);
pyroutes.register('admin_permissions_object', '/_admin/permissions/object', []);
pyroutes.register('admin_permissions_object_update', '/_admin/permissions/object/update', []);
pyroutes.register('admin_permissions_ips', '/_admin/permissions/ips', []);
pyroutes.register('admin_permissions_overview', '/_admin/permissions/overview', []);
pyroutes.register('admin_permissions_auth_token_access', '/_admin/permissions/auth_token_access', []);
pyroutes.register('admin_permissions_ssh_keys', '/_admin/permissions/ssh_keys', []);
pyroutes.register('admin_permissions_ssh_keys_data', '/_admin/permissions/ssh_keys/data', []);
pyroutes.register('admin_permissions_ssh_keys_update', '/_admin/permissions/ssh_keys/update', []);
pyroutes.register('users', '/_admin/users', []);
pyroutes.register('users_data', '/_admin/users_data', []);
pyroutes.register('users_create', '/_admin/users/create', []);
pyroutes.register('users_new', '/_admin/users/new', []);
pyroutes.register('user_edit', '/_admin/users/%(user_id)s/edit', ['user_id']);
pyroutes.register('user_edit_advanced', '/_admin/users/%(user_id)s/edit/advanced', ['user_id']);
pyroutes.register('user_edit_global_perms', '/_admin/users/%(user_id)s/edit/global_permissions', ['user_id']);
pyroutes.register('user_edit_global_perms_update', '/_admin/users/%(user_id)s/edit/global_permissions/update', ['user_id']);
pyroutes.register('user_update', '/_admin/users/%(user_id)s/update', ['user_id']);
pyroutes.register('user_delete', '/_admin/users/%(user_id)s/delete', ['user_id']);
pyroutes.register('user_enable_force_password_reset', '/_admin/users/%(user_id)s/password_reset_enable', ['user_id']);
pyroutes.register('user_disable_force_password_reset', '/_admin/users/%(user_id)s/password_reset_disable', ['user_id']);
pyroutes.register('user_create_personal_repo_group', '/_admin/users/%(user_id)s/create_repo_group', ['user_id']);
pyroutes.register('user_notice_dismiss', '/_admin/users/%(user_id)s/notice_dismiss', ['user_id']);
pyroutes.register('edit_user_auth_tokens_view', '/_admin/users/%(user_id)s/edit/auth_tokens/view', ['user_id']);
pyroutes.register('admin_settings', '/_admin/settings', []);
pyroutes.register('admin_settings_automation', '/_admin/settings/automation', []);
pyroutes.register('admin_settings_automation_update', '/_admin/settings/automation/%(entry_id)s/update', ['entry_id']);
pyroutes.register('admin_settings_email', '/_admin/settings/email', []);
pyroutes.register('admin_settings_email_update', '/_admin/settings/email/update', []);
pyroutes.register('admin_settings_exception_tracker', '/_admin/settings/exceptions', []);
pyroutes.register('admin_settings_exception_tracker_delete', '/_admin/settings/exceptions/%(exception_id)s/delete', ['exception_id']);
pyroutes.register('admin_settings_exception_tracker_delete_all', '/_admin/settings/exceptions_delete_all', []);
pyroutes.register('admin_settings_exception_tracker_show', '/_admin/settings/exceptions/%(exception_id)s', ['exception_id']);
pyroutes.register('admin_settings_global', '/_admin/settings/global', []);
pyroutes.register('admin_settings_global_update', '/_admin/settings/global/update', []);
pyroutes.register('admin_settings_hooks', '/_admin/settings/hooks', []);
pyroutes.register('admin_settings_hooks_delete', '/_admin/settings/hooks/delete', []);
pyroutes.register('admin_settings_hooks_update', '/_admin/settings/hooks/update', []);
pyroutes.register('admin_settings_issuetracker', '/_admin/settings/issue-tracker', []);
pyroutes.register('admin_settings_issuetracker_delete', '/_admin/settings/issue-tracker/delete', []);
pyroutes.register('admin_settings_issuetracker_test', '/_admin/settings/issue-tracker/test', []);
pyroutes.register('admin_settings_issuetracker_update', '/_admin/settings/issue-tracker/update', []);
pyroutes.register('admin_settings_labs', '/_admin/settings/labs', []);
pyroutes.register('admin_settings_labs_update', '/_admin/settings/labs/update', []);
pyroutes.register('admin_settings_license', '/_admin/settings/license', []);
pyroutes.register('admin_settings_license_unlock', '/_admin/settings/license_unlock', []);
pyroutes.register('admin_settings_mapping', '/_admin/settings/mapping', []);
pyroutes.register('admin_settings_mapping_update', '/_admin/settings/mapping/update', []);
pyroutes.register('admin_settings_open_source', '/_admin/settings/open_source', []);
pyroutes.register('admin_settings_process_management', '/_admin/settings/process_management', []);
pyroutes.register('admin_settings_process_management_data', '/_admin/settings/process_management/data', []);
pyroutes.register('admin_settings_process_management_master_signal', '/_admin/settings/process_management/master_signal', []);
pyroutes.register('admin_settings_process_management_signal', '/_admin/settings/process_management/signal', []);
pyroutes.register('admin_settings_scheduler_create', '/_admin/settings/scheduler/create', []);
pyroutes.register('admin_settings_scheduler_delete', '/_admin/settings/scheduler/%(schedule_id)s/delete', ['schedule_id']);
pyroutes.register('admin_settings_scheduler_edit', '/_admin/settings/scheduler/%(schedule_id)s', ['schedule_id']);
pyroutes.register('admin_settings_scheduler_execute', '/_admin/settings/scheduler/%(schedule_id)s/execute', ['schedule_id']);
pyroutes.register('admin_settings_scheduler_new', '/_admin/settings/scheduler/new', []);
pyroutes.register('admin_settings_scheduler_show_all', '/_admin/settings/scheduler', []);
pyroutes.register('admin_settings_scheduler_show_tasks', '/_admin/settings/scheduler/_tasks', []);
pyroutes.register('admin_settings_scheduler_update', '/_admin/settings/scheduler/%(schedule_id)s/update', ['schedule_id']);
pyroutes.register('admin_settings_search', '/_admin/settings/search', []);
pyroutes.register('admin_settings_sessions', '/_admin/settings/sessions', []);
pyroutes.register('admin_settings_sessions_cleanup', '/_admin/settings/sessions/cleanup', []);
pyroutes.register('admin_settings_system', '/_admin/settings/system', []);
pyroutes.register('admin_settings_system_update', '/_admin/settings/system/updates', []);
pyroutes.register('admin_settings_update', '/_admin/settings/update', []);
pyroutes.register('admin_settings_vcs', '/_admin/settings/vcs', []);
pyroutes.register('admin_settings_vcs_svn_generate_cfg', '/_admin/settings/vcs/svn_generate_cfg', []);
pyroutes.register('admin_settings_vcs_svn_pattern_delete', '/_admin/settings/vcs/svn_pattern_delete', []);
pyroutes.register('admin_settings_vcs_update', '/_admin/settings/vcs/update', []);
pyroutes.register('admin_settings_visual', '/_admin/settings/visual', []);
pyroutes.register('admin_settings_visual_update', '/_admin/settings/visual/update', []);
pyroutes.register('apiv2', '/_admin/api', []);
pyroutes.register('atom_feed_home', '/%(repo_name)s/feed-atom', ['repo_name']);
pyroutes.register('atom_feed_home_old', '/%(repo_name)s/feed/atom', ['repo_name']);
pyroutes.register('auth_home', '/_admin/auth*traverse', []);
pyroutes.register('bookmarks_home', '/%(repo_name)s/bookmarks', ['repo_name']);
pyroutes.register('branches_home', '/%(repo_name)s/branches', ['repo_name']);
pyroutes.register('channelstream_connect', '/_admin/channelstream/connect', []);
pyroutes.register('channelstream_proxy', '/_channelstream', []);
pyroutes.register('channelstream_subscribe', '/_admin/channelstream/subscribe', []);
pyroutes.register('commit_draft_comments_submit', '/%(repo_name)s/changeset/%(commit_id)s/draft_comments_submit', ['repo_name', 'commit_id']);
pyroutes.register('debug_style_email', '/_admin/debug_style/email/%(email_id)s', ['email_id']);
pyroutes.register('debug_style_email_plain_rendered', '/_admin/debug_style/email-rendered/%(email_id)s', ['email_id']);
pyroutes.register('debug_style_home', '/_admin/debug_style', []);
pyroutes.register('debug_style_template', '/_admin/debug_style/t/%(t_path)s', ['t_path']);
pyroutes.register('download_file', '/_file_store/download/%(fid)s', ['fid']);
pyroutes.register('download_file_by_token', '/_file_store/token-download/%(_auth_token)s/%(fid)s', ['_auth_token', 'fid']);
pyroutes.register('edit_repo', '/%(repo_name)s/settings', ['repo_name']);
pyroutes.register('edit_repo_advanced', '/%(repo_name)s/settings/advanced', ['repo_name']);
pyroutes.register('edit_repo_advanced_archive', '/%(repo_name)s/settings/advanced/archive', ['repo_name']);
pyroutes.register('edit_repo_advanced_delete', '/%(repo_name)s/settings/advanced/delete', ['repo_name']);
pyroutes.register('edit_repo_advanced_fork', '/%(repo_name)s/settings/advanced/fork', ['repo_name']);
pyroutes.register('edit_repo_advanced_hooks', '/%(repo_name)s/settings/advanced/hooks', ['repo_name']);
pyroutes.register('edit_repo_advanced_journal', '/%(repo_name)s/settings/advanced/journal', ['repo_name']);
pyroutes.register('edit_repo_advanced_locking', '/%(repo_name)s/settings/advanced/locking', ['repo_name']);
pyroutes.register('edit_repo_audit_logs', '/%(repo_name)s/settings/audit_logs', ['repo_name']);
pyroutes.register('edit_repo_caches', '/%(repo_name)s/settings/caches', ['repo_name']);
pyroutes.register('edit_repo_fields', '/%(repo_name)s/settings/fields', ['repo_name']);
pyroutes.register('edit_repo_fields_create', '/%(repo_name)s/settings/fields/create', ['repo_name']);
pyroutes.register('edit_repo_fields_delete', '/%(repo_name)s/settings/fields/%(field_id)s/delete', ['repo_name', 'field_id']);
pyroutes.register('edit_repo_group', '/%(repo_group_name)s/_edit', ['repo_group_name']);
pyroutes.register('edit_repo_group_advanced', '/%(repo_group_name)s/_settings/advanced', ['repo_group_name']);
pyroutes.register('edit_repo_group_advanced_delete', '/%(repo_group_name)s/_settings/advanced/delete', ['repo_group_name']);
pyroutes.register('edit_repo_group_perms', '/%(repo_group_name)s/_settings/permissions', ['repo_group_name']);
pyroutes.register('edit_repo_group_perms_update', '/%(repo_group_name)s/_settings/permissions/update', ['repo_group_name']);
pyroutes.register('edit_repo_issuetracker', '/%(repo_name)s/settings/issue_trackers', ['repo_name']);
pyroutes.register('edit_repo_issuetracker_delete', '/%(repo_name)s/settings/issue_trackers/delete', ['repo_name']);
pyroutes.register('edit_repo_issuetracker_test', '/%(repo_name)s/settings/issue_trackers/test', ['repo_name']);
pyroutes.register('edit_repo_issuetracker_update', '/%(repo_name)s/settings/issue_trackers/update', ['repo_name']);
pyroutes.register('edit_repo_maintenance', '/%(repo_name)s/settings/maintenance', ['repo_name']);
pyroutes.register('edit_repo_maintenance_execute', '/%(repo_name)s/settings/maintenance/execute', ['repo_name']);
pyroutes.register('edit_repo_perms', '/%(repo_name)s/settings/permissions', ['repo_name']);
pyroutes.register('edit_repo_perms_branch', '/%(repo_name)s/settings/branch_permissions', ['repo_name']);
pyroutes.register('edit_repo_perms_branch_delete', '/%(repo_name)s/settings/branch_permissions/%(rule_id)s/delete', ['repo_name', 'rule_id']);
pyroutes.register('edit_repo_perms_set_private', '/%(repo_name)s/settings/permissions/set_private', ['repo_name']);
pyroutes.register('edit_repo_remote', '/%(repo_name)s/settings/remote', ['repo_name']);
pyroutes.register('edit_repo_remote_pull', '/%(repo_name)s/settings/remote/pull', ['repo_name']);
pyroutes.register('edit_repo_remote_push', '/%(repo_name)s/settings/remote/push', ['repo_name']);
pyroutes.register('edit_repo_statistics', '/%(repo_name)s/settings/statistics', ['repo_name']);
pyroutes.register('edit_repo_statistics_reset', '/%(repo_name)s/settings/statistics/update', ['repo_name']);
pyroutes.register('edit_repo_strip', '/%(repo_name)s/settings/strip', ['repo_name']);
pyroutes.register('edit_repo_vcs', '/%(repo_name)s/settings/vcs', ['repo_name']);
pyroutes.register('edit_repo_vcs_svn_pattern_delete', '/%(repo_name)s/settings/vcs/svn_pattern/delete', ['repo_name']);
pyroutes.register('edit_repo_vcs_update', '/%(repo_name)s/settings/vcs/update', ['repo_name']);
pyroutes.register('edit_user_audit_logs', '/_admin/users/%(user_id)s/edit/audit', ['user_id']);
pyroutes.register('edit_user_audit_logs_download', '/_admin/users/%(user_id)s/edit/audit/download', ['user_id']);
pyroutes.register('edit_user_auth_tokens', '/_admin/users/%(user_id)s/edit/auth_tokens', ['user_id']);
pyroutes.register('edit_user_auth_tokens_add', '/_admin/users/%(user_id)s/edit/auth_tokens/new', ['user_id']);
pyroutes.register('edit_user_auth_tokens_delete', '/_admin/users/%(user_id)s/edit/auth_tokens/delete', ['user_id']);
pyroutes.register('edit_user_ssh_keys', '/_admin/users/%(user_id)s/edit/ssh_keys', ['user_id']);
pyroutes.register('edit_user_ssh_keys_generate_keypair', '/_admin/users/%(user_id)s/edit/ssh_keys/generate', ['user_id']);
pyroutes.register('edit_user_ssh_keys_add', '/_admin/users/%(user_id)s/edit/ssh_keys/new', ['user_id']);
pyroutes.register('edit_user_ssh_keys_delete', '/_admin/users/%(user_id)s/edit/ssh_keys/delete', ['user_id']);
pyroutes.register('edit_user_auth_tokens_view', '/_admin/users/%(user_id)s/edit/auth_tokens/view', ['user_id']);
pyroutes.register('edit_user_caches', '/_admin/users/%(user_id)s/edit/caches', ['user_id']);
pyroutes.register('edit_user_caches_update', '/_admin/users/%(user_id)s/edit/caches/update', ['user_id']);
pyroutes.register('edit_user_emails', '/_admin/users/%(user_id)s/edit/emails', ['user_id']);
pyroutes.register('edit_user_emails_add', '/_admin/users/%(user_id)s/edit/emails/new', ['user_id']);
pyroutes.register('edit_user_emails_delete', '/_admin/users/%(user_id)s/edit/emails/delete', ['user_id']);
pyroutes.register('edit_user_group', '/_admin/user_groups/%(user_group_id)s/edit', ['user_group_id']);
pyroutes.register('edit_user_group_advanced', '/_admin/user_groups/%(user_group_id)s/edit/advanced', ['user_group_id']);
pyroutes.register('edit_user_group_advanced_sync', '/_admin/user_groups/%(user_group_id)s/edit/advanced/sync', ['user_group_id']);
pyroutes.register('edit_user_group_global_perms', '/_admin/user_groups/%(user_group_id)s/edit/global_permissions', ['user_group_id']);
pyroutes.register('edit_user_group_global_perms_update', '/_admin/user_groups/%(user_group_id)s/edit/global_permissions/update', ['user_group_id']);
pyroutes.register('edit_user_group_perms', '/_admin/user_groups/%(user_group_id)s/edit/permissions', ['user_group_id']);
pyroutes.register('edit_user_group_perms_summary', '/_admin/user_groups/%(user_group_id)s/edit/permissions_summary', ['user_group_id']);
pyroutes.register('edit_user_group_perms_summary_json', '/_admin/user_groups/%(user_group_id)s/edit/permissions_summary/json', ['user_group_id']);
pyroutes.register('edit_user_group_perms_update', '/_admin/user_groups/%(user_group_id)s/edit/permissions/update', ['user_group_id']);
pyroutes.register('edit_user_groups_management', '/_admin/users/%(user_id)s/edit/groups_management', ['user_id']);
pyroutes.register('edit_user_groups_management_updates', '/_admin/users/%(user_id)s/edit/edit_user_groups_management/updates', ['user_id']);
pyroutes.register('edit_user_ips', '/_admin/users/%(user_id)s/edit/ips', ['user_id']);
pyroutes.register('edit_user_ips_add', '/_admin/users/%(user_id)s/edit/ips/new', ['user_id']);
pyroutes.register('edit_user_ips_delete', '/_admin/users/%(user_id)s/edit/ips/delete', ['user_id']);
pyroutes.register('edit_user_perms_summary', '/_admin/users/%(user_id)s/edit/permissions_summary', ['user_id']);
pyroutes.register('edit_user_perms_summary_json', '/_admin/users/%(user_id)s/edit/permissions_summary/json', ['user_id']);
pyroutes.register('edit_user_groups_management', '/_admin/users/%(user_id)s/edit/groups_management', ['user_id']);
pyroutes.register('edit_user_groups_management_updates', '/_admin/users/%(user_id)s/edit/edit_user_groups_management/updates', ['user_id']);
pyroutes.register('edit_user_audit_logs', '/_admin/users/%(user_id)s/edit/audit', ['user_id']);
pyroutes.register('edit_user_audit_logs_download', '/_admin/users/%(user_id)s/edit/audit/download', ['user_id']);
pyroutes.register('edit_user_caches', '/_admin/users/%(user_id)s/edit/caches', ['user_id']);
pyroutes.register('edit_user_caches_update', '/_admin/users/%(user_id)s/edit/caches/update', ['user_id']);
pyroutes.register('user_groups', '/_admin/user_groups', []);
pyroutes.register('user_groups_data', '/_admin/user_groups_data', []);
pyroutes.register('user_groups_new', '/_admin/user_groups/new', []);
pyroutes.register('user_groups_create', '/_admin/user_groups/create', []);
pyroutes.register('repos', '/_admin/repos', []);
pyroutes.register('repos_data', '/_admin/repos_data', []);
pyroutes.register('repo_new', '/_admin/repos/new', []);
pyroutes.register('repo_create', '/_admin/repos/create', []);
pyroutes.register('repo_groups', '/_admin/repo_groups', []);
pyroutes.register('repo_groups_data', '/_admin/repo_groups_data', []);
pyroutes.register('repo_group_new', '/_admin/repo_group/new', []);
pyroutes.register('repo_group_create', '/_admin/repo_group/create', []);
pyroutes.register('channelstream_connect', '/_admin/channelstream/connect', []);
pyroutes.register('channelstream_subscribe', '/_admin/channelstream/subscribe', []);
pyroutes.register('channelstream_proxy', '/_channelstream', []);
pyroutes.register('upload_file', '/_file_store/upload', []);
pyroutes.register('download_file', '/_file_store/download/%(fid)s', ['fid']);
pyroutes.register('download_file_by_token', '/_file_store/token-download/%(_auth_token)s/%(fid)s', ['_auth_token', 'fid']);
pyroutes.register('logout', '/_admin/logout', []);
pyroutes.register('reset_password', '/_admin/password_reset', []);
pyroutes.register('reset_password_confirmation', '/_admin/password_reset_confirmation', []);
pyroutes.register('home', '/', []);
pyroutes.register('main_page_repos_data', '/_home_repos', []);
pyroutes.register('main_page_repo_groups_data', '/_home_repo_groups', []);
pyroutes.register('user_autocomplete_data', '/_users', []);
pyroutes.register('user_group_autocomplete_data', '/_user_groups', []);
pyroutes.register('repo_list_data', '/_repos', []);
pyroutes.register('repo_group_list_data', '/_repo_groups', []);
pyroutes.register('goto_switcher_data', '/_goto_data', []);
pyroutes.register('markup_preview', '/_markup_preview', []);
pyroutes.register('edit_user_ssh_keys', '/_admin/users/%(user_id)s/edit/ssh_keys', ['user_id']);
pyroutes.register('edit_user_ssh_keys_add', '/_admin/users/%(user_id)s/edit/ssh_keys/new', ['user_id']);
pyroutes.register('edit_user_ssh_keys_delete', '/_admin/users/%(user_id)s/edit/ssh_keys/delete', ['user_id']);
pyroutes.register('edit_user_ssh_keys_generate_keypair', '/_admin/users/%(user_id)s/edit/ssh_keys/generate', ['user_id']);
pyroutes.register('favicon', '/favicon.ico', []);
pyroutes.register('file_preview', '/_file_preview', []);
pyroutes.register('store_user_session_value', '/_store_session_attr', []);
pyroutes.register('gist_delete', '/_admin/gists/%(gist_id)s/delete', ['gist_id']);
pyroutes.register('gist_edit', '/_admin/gists/%(gist_id)s/edit', ['gist_id']);
pyroutes.register('gist_edit_check_revision', '/_admin/gists/%(gist_id)s/edit/check_revision', ['gist_id']);
pyroutes.register('gist_show', '/_admin/gists/%(gist_id)s', ['gist_id']);
pyroutes.register('gist_show_formatted', '/_admin/gists/%(gist_id)s/rev/%(revision)s/%(format)s', ['gist_id', 'revision', 'format']);
pyroutes.register('gist_show_formatted_path', '/_admin/gists/%(gist_id)s/rev/%(revision)s/%(format)s/%(f_path)s', ['gist_id', 'revision', 'format', 'f_path']);
pyroutes.register('gist_show_rev', '/_admin/gists/%(gist_id)s/rev/%(revision)s', ['gist_id', 'revision']);
pyroutes.register('gist_update', '/_admin/gists/%(gist_id)s/update', ['gist_id']);
pyroutes.register('gists_create', '/_admin/gists/create', []);
pyroutes.register('gists_new', '/_admin/gists/new', []);
pyroutes.register('gists_show', '/_admin/gists', []);
pyroutes.register('global_integrations_create', '/_admin/integrations/%(integration)s/new', ['integration']);
pyroutes.register('global_integrations_edit', '/_admin/integrations/%(integration)s/%(integration_id)s', ['integration', 'integration_id']);
pyroutes.register('global_integrations_home', '/_admin/integrations', []);
pyroutes.register('global_integrations_list', '/_admin/integrations/%(integration)s', ['integration']);
pyroutes.register('global_integrations_new', '/_admin/integrations/new', []);
pyroutes.register('goto_switcher_data', '/_goto_data', []);
pyroutes.register('home', '/', []);
pyroutes.register('hovercard_pull_request', '/_hovercard/pull_request/%(pull_request_id)s', ['pull_request_id']);
pyroutes.register('hovercard_repo_commit', '/_hovercard/commit/%(repo_name)s/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('hovercard_user', '/_hovercard/user/%(user_id)s', ['user_id']);
pyroutes.register('hovercard_user_group', '/_hovercard/user_group/%(user_group_id)s', ['user_group_id']);
pyroutes.register('hovercard_username', '/_hovercard/username/%(username)s', ['username']);
pyroutes.register('journal', '/_admin/journal', []);
pyroutes.register('journal_rss', '/_admin/journal/rss', []);
pyroutes.register('journal_atom', '/_admin/journal/atom', []);
pyroutes.register('journal_public', '/_admin/public_journal', []);
pyroutes.register('journal_public_atom', '/_admin/public_journal/atom', []);
pyroutes.register('journal_public_atom_old', '/_admin/public_journal_atom', []);
pyroutes.register('journal_public_rss', '/_admin/public_journal/rss', []);
pyroutes.register('journal_public_rss_old', '/_admin/public_journal_rss', []);
pyroutes.register('toggle_following', '/_admin/toggle_following', []);
pyroutes.register('repo_creating', '/%(repo_name)s/repo_creating', ['repo_name']);
pyroutes.register('repo_creating_check', '/%(repo_name)s/repo_creating_check', ['repo_name']);
pyroutes.register('repo_summary_explicit', '/%(repo_name)s/summary', ['repo_name']);
pyroutes.register('repo_summary_commits', '/%(repo_name)s/summary-commits', ['repo_name']);
pyroutes.register('repo_commit', '/%(repo_name)s/changeset/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_children', '/%(repo_name)s/changeset_children/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_parents', '/%(repo_name)s/changeset_parents/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_raw', '/%(repo_name)s/changeset-diff/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_patch', '/%(repo_name)s/changeset-patch/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_download', '/%(repo_name)s/changeset-download/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_data', '/%(repo_name)s/changeset-data/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_comment_create', '/%(repo_name)s/changeset/%(commit_id)s/comment/create', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_comment_preview', '/%(repo_name)s/changeset/%(commit_id)s/comment/preview', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_comment_history_view', '/%(repo_name)s/changeset/%(commit_id)s/comment/%(comment_history_id)s/history_view', ['repo_name', 'commit_id', 'comment_history_id']);
pyroutes.register('repo_commit_comment_attachment_upload', '/%(repo_name)s/changeset/%(commit_id)s/comment/attachment_upload', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_comment_delete', '/%(repo_name)s/changeset/%(commit_id)s/comment/%(comment_id)s/delete', ['repo_name', 'commit_id', 'comment_id']);
pyroutes.register('repo_commit_comment_edit', '/%(repo_name)s/changeset/%(commit_id)s/comment/%(comment_id)s/edit', ['repo_name', 'commit_id', 'comment_id']);
pyroutes.register('repo_commit_raw_deprecated', '/%(repo_name)s/raw-changeset/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_archivefile', '/%(repo_name)s/archive/%(fname)s', ['repo_name', 'fname']);
pyroutes.register('repo_files_diff', '/%(repo_name)s/diff/%(f_path)s', ['repo_name', 'f_path']);
pyroutes.register('repo_files_diff_2way_redirect', '/%(repo_name)s/diff-2way/%(f_path)s', ['repo_name', 'f_path']);
pyroutes.register('repo_files', '/%(repo_name)s/files/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files:default_path', '/%(repo_name)s/files/%(commit_id)s/', ['repo_name', 'commit_id']);
pyroutes.register('repo_files:default_commit', '/%(repo_name)s/files', ['repo_name']);
pyroutes.register('repo_files:rendered', '/%(repo_name)s/render/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files:annotated', '/%(repo_name)s/annotate/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files:annotated_previous', '/%(repo_name)s/annotate-previous/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_nodetree_full', '/%(repo_name)s/nodetree_full/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_nodetree_full:default_path', '/%(repo_name)s/nodetree_full/%(commit_id)s/', ['repo_name', 'commit_id']);
pyroutes.register('repo_files_nodelist', '/%(repo_name)s/nodelist/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_file_raw', '/%(repo_name)s/raw/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_file_download', '/%(repo_name)s/download/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_file_download:legacy', '/%(repo_name)s/rawfile/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_file_history', '/%(repo_name)s/history/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_file_authors', '/%(repo_name)s/authors/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files_check_head', '/%(repo_name)s/check_head/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files_remove_file', '/%(repo_name)s/remove_file/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files_delete_file', '/%(repo_name)s/delete_file/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files_edit_file', '/%(repo_name)s/edit_file/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files_update_file', '/%(repo_name)s/update_file/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files_add_file', '/%(repo_name)s/add_file/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files_upload_file', '/%(repo_name)s/upload_file/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files_create_file', '/%(repo_name)s/create_file/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_refs_data', '/%(repo_name)s/refs-data', ['repo_name']);
pyroutes.register('repo_refs_changelog_data', '/%(repo_name)s/refs-data-changelog', ['repo_name']);
pyroutes.register('repo_stats', '/%(repo_name)s/repo_stats/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_commits', '/%(repo_name)s/commits', ['repo_name']);
pyroutes.register('repo_commits_file', '/%(repo_name)s/commits/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_commits_elements', '/%(repo_name)s/commits_elements', ['repo_name']);
pyroutes.register('repo_commits_elements_file', '/%(repo_name)s/commits_elements/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_changelog', '/%(repo_name)s/changelog', ['repo_name']);
pyroutes.register('repo_changelog_file', '/%(repo_name)s/changelog/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_compare_select', '/%(repo_name)s/compare', ['repo_name']);
pyroutes.register('repo_compare', '/%(repo_name)s/compare/%(source_ref_type)s@%(source_ref)s...%(target_ref_type)s@%(target_ref)s', ['repo_name', 'source_ref_type', 'source_ref', 'target_ref_type', 'target_ref']);
pyroutes.register('tags_home', '/%(repo_name)s/tags', ['repo_name']);
pyroutes.register('branches_home', '/%(repo_name)s/branches', ['repo_name']);
pyroutes.register('bookmarks_home', '/%(repo_name)s/bookmarks', ['repo_name']);
pyroutes.register('repo_fork_new', '/%(repo_name)s/fork', ['repo_name']);
pyroutes.register('repo_fork_create', '/%(repo_name)s/fork/create', ['repo_name']);
pyroutes.register('repo_forks_show_all', '/%(repo_name)s/forks', ['repo_name']);
pyroutes.register('repo_forks_data', '/%(repo_name)s/forks/data', ['repo_name']);
pyroutes.register('journal_rss', '/_admin/journal/rss', []);
pyroutes.register('login', '/_admin/login', []);
pyroutes.register('logout', '/_admin/logout', []);
pyroutes.register('main_page_repo_groups_data', '/_home_repo_groups', []);
pyroutes.register('main_page_repos_data', '/_home_repos', []);
pyroutes.register('markup_preview', '/_markup_preview', []);
pyroutes.register('my_account_auth_tokens', '/_admin/my_account/auth_tokens', []);
pyroutes.register('my_account_auth_tokens_add', '/_admin/my_account/auth_tokens/new', []);
pyroutes.register('my_account_auth_tokens_delete', '/_admin/my_account/auth_tokens/delete', []);
pyroutes.register('my_account_auth_tokens_view', '/_admin/my_account/auth_tokens/view', []);
pyroutes.register('my_account_bookmarks', '/_admin/my_account/bookmarks', []);
pyroutes.register('my_account_bookmarks_update', '/_admin/my_account/bookmarks/update', []);
pyroutes.register('my_account_edit', '/_admin/my_account/edit', []);
pyroutes.register('my_account_emails', '/_admin/my_account/emails', []);
pyroutes.register('my_account_emails_add', '/_admin/my_account/emails/new', []);
pyroutes.register('my_account_emails_delete', '/_admin/my_account/emails/delete', []);
pyroutes.register('my_account_external_identity', '/_admin/my_account/external-identity', []);
pyroutes.register('my_account_external_identity_delete', '/_admin/my_account/external-identity/delete', []);
pyroutes.register('my_account_goto_bookmark', '/_admin/my_account/bookmark/%(bookmark_id)s', ['bookmark_id']);
pyroutes.register('my_account_notifications', '/_admin/my_account/notifications', []);
pyroutes.register('my_account_notifications_test_channelstream', '/_admin/my_account/test_channelstream', []);
pyroutes.register('my_account_notifications_toggle_visibility', '/_admin/my_account/toggle_visibility', []);
pyroutes.register('my_account_password', '/_admin/my_account/password', []);
pyroutes.register('my_account_password_update', '/_admin/my_account/password/update', []);
pyroutes.register('my_account_perms', '/_admin/my_account/perms', []);
pyroutes.register('my_account_profile', '/_admin/my_account/profile', []);
pyroutes.register('my_account_pullrequests', '/_admin/my_account/pull_requests', []);
pyroutes.register('my_account_pullrequests_data', '/_admin/my_account/pull_requests/data', []);
pyroutes.register('my_account_repos', '/_admin/my_account/repos', []);
pyroutes.register('my_account_ssh_keys', '/_admin/my_account/ssh_keys', []);
pyroutes.register('my_account_ssh_keys_add', '/_admin/my_account/ssh_keys/new', []);
pyroutes.register('my_account_ssh_keys_delete', '/_admin/my_account/ssh_keys/delete', []);
pyroutes.register('my_account_ssh_keys_generate', '/_admin/my_account/ssh_keys/generate', []);
pyroutes.register('my_account_update', '/_admin/my_account/update', []);
pyroutes.register('my_account_user_group_membership', '/_admin/my_account/user_group_membership', []);
pyroutes.register('my_account_watched', '/_admin/my_account/watched', []);
pyroutes.register('notifications_delete', '/_admin/notifications/%(notification_id)s/delete', ['notification_id']);
pyroutes.register('notifications_mark_all_read', '/_admin/notifications_mark_all_read', []);
pyroutes.register('notifications_show', '/_admin/notifications/%(notification_id)s', ['notification_id']);
pyroutes.register('notifications_show_all', '/_admin/notifications', []);
pyroutes.register('notifications_update', '/_admin/notifications/%(notification_id)s/update', ['notification_id']);
pyroutes.register('ops_error_test', '/_admin/ops/error', []);
pyroutes.register('ops_ping', '/_admin/ops/ping', []);
pyroutes.register('ops_redirect_test', '/_admin/ops/redirect', []);
pyroutes.register('plugin_admin_chat', '/_admin/plugin_admin_chat/%(action)s', ['action']);
pyroutes.register('pull_requests_global', '/_admin/pull-request/%(pull_request_id)s', ['pull_request_id']);
pyroutes.register('pull_requests_global_0', '/_admin/pull_requests/%(pull_request_id)s', ['pull_request_id']);
pyroutes.register('pull_requests_global_1', '/_admin/pull-requests/%(pull_request_id)s', ['pull_request_id']);
pyroutes.register('pullrequest_comment_create', '/%(repo_name)s/pull-request/%(pull_request_id)s/comment', ['repo_name', 'pull_request_id']);
pyroutes.register('pullrequest_comment_delete', '/%(repo_name)s/pull-request/%(pull_request_id)s/comment/%(comment_id)s/delete', ['repo_name', 'pull_request_id', 'comment_id']);
pyroutes.register('pullrequest_comment_edit', '/%(repo_name)s/pull-request/%(pull_request_id)s/comment/%(comment_id)s/edit', ['repo_name', 'pull_request_id', 'comment_id']);
pyroutes.register('pullrequest_comments', '/%(repo_name)s/pull-request/%(pull_request_id)s/comments', ['repo_name', 'pull_request_id']);
pyroutes.register('pullrequest_create', '/%(repo_name)s/pull-request/create', ['repo_name']);
pyroutes.register('pullrequest_delete', '/%(repo_name)s/pull-request/%(pull_request_id)s/delete', ['repo_name', 'pull_request_id']);
pyroutes.register('pullrequest_draft_comments_submit', '/%(repo_name)s/pull-request/%(pull_request_id)s/draft_comments_submit', ['repo_name', 'pull_request_id']);
pyroutes.register('pullrequest_drafts', '/%(repo_name)s/pull-request/%(pull_request_id)s/drafts', ['repo_name', 'pull_request_id']);
pyroutes.register('pullrequest_merge', '/%(repo_name)s/pull-request/%(pull_request_id)s/merge', ['repo_name', 'pull_request_id']);
pyroutes.register('pullrequest_new', '/%(repo_name)s/pull-request/new', ['repo_name']);
pyroutes.register('pullrequest_repo_refs', '/%(repo_name)s/pull-request/refs/%(target_repo_name)s', ['repo_name', 'target_repo_name']);
pyroutes.register('pullrequest_repo_targets', '/%(repo_name)s/pull-request/repo-targets', ['repo_name']);
pyroutes.register('pullrequest_show', '/%(repo_name)s/pull-request/%(pull_request_id)s', ['repo_name', 'pull_request_id']);
pyroutes.register('pullrequest_show_all', '/%(repo_name)s/pull-request', ['repo_name']);
pyroutes.register('pullrequest_show_all_data', '/%(repo_name)s/pull-request-data', ['repo_name']);
pyroutes.register('pullrequest_repo_refs', '/%(repo_name)s/pull-request/refs/%(target_repo_name)s', ['repo_name', 'target_repo_name']);
pyroutes.register('pullrequest_repo_targets', '/%(repo_name)s/pull-request/repo-targets', ['repo_name']);
pyroutes.register('pullrequest_new', '/%(repo_name)s/pull-request/new', ['repo_name']);
pyroutes.register('pullrequest_create', '/%(repo_name)s/pull-request/create', ['repo_name']);
pyroutes.register('pullrequest_update', '/%(repo_name)s/pull-request/%(pull_request_id)s/update', ['repo_name', 'pull_request_id']);
pyroutes.register('pullrequest_merge', '/%(repo_name)s/pull-request/%(pull_request_id)s/merge', ['repo_name', 'pull_request_id']);
pyroutes.register('pullrequest_delete', '/%(repo_name)s/pull-request/%(pull_request_id)s/delete', ['repo_name', 'pull_request_id']);
pyroutes.register('pullrequest_comment_create', '/%(repo_name)s/pull-request/%(pull_request_id)s/comment', ['repo_name', 'pull_request_id']);
pyroutes.register('pullrequest_comment_edit', '/%(repo_name)s/pull-request/%(pull_request_id)s/comment/%(comment_id)s/edit', ['repo_name', 'pull_request_id', 'comment_id']);
pyroutes.register('pullrequest_comment_delete', '/%(repo_name)s/pull-request/%(pull_request_id)s/comment/%(comment_id)s/delete', ['repo_name', 'pull_request_id', 'comment_id']);
pyroutes.register('pullrequest_comments', '/%(repo_name)s/pull-request/%(pull_request_id)s/comments', ['repo_name', 'pull_request_id']);
pyroutes.register('pullrequest_todos', '/%(repo_name)s/pull-request/%(pull_request_id)s/todos', ['repo_name', 'pull_request_id']);
pyroutes.register('pullrequest_drafts', '/%(repo_name)s/pull-request/%(pull_request_id)s/drafts', ['repo_name', 'pull_request_id']);
pyroutes.register('edit_repo', '/%(repo_name)s/settings', ['repo_name']);
pyroutes.register('edit_repo_advanced', '/%(repo_name)s/settings/advanced', ['repo_name']);
pyroutes.register('edit_repo_advanced_archive', '/%(repo_name)s/settings/advanced/archive', ['repo_name']);
pyroutes.register('edit_repo_advanced_delete', '/%(repo_name)s/settings/advanced/delete', ['repo_name']);
pyroutes.register('edit_repo_advanced_locking', '/%(repo_name)s/settings/advanced/locking', ['repo_name']);
pyroutes.register('edit_repo_advanced_journal', '/%(repo_name)s/settings/advanced/journal', ['repo_name']);
pyroutes.register('edit_repo_advanced_fork', '/%(repo_name)s/settings/advanced/fork', ['repo_name']);
pyroutes.register('edit_repo_advanced_hooks', '/%(repo_name)s/settings/advanced/hooks', ['repo_name']);
pyroutes.register('edit_repo_caches', '/%(repo_name)s/settings/caches', ['repo_name']);
pyroutes.register('edit_repo_perms', '/%(repo_name)s/settings/permissions', ['repo_name']);
pyroutes.register('edit_repo_perms_set_private', '/%(repo_name)s/settings/permissions/set_private', ['repo_name']);
pyroutes.register('edit_repo_maintenance', '/%(repo_name)s/settings/maintenance', ['repo_name']);
pyroutes.register('edit_repo_maintenance_execute', '/%(repo_name)s/settings/maintenance/execute', ['repo_name']);
pyroutes.register('edit_repo_fields', '/%(repo_name)s/settings/fields', ['repo_name']);
pyroutes.register('edit_repo_fields_create', '/%(repo_name)s/settings/fields/create', ['repo_name']);
pyroutes.register('edit_repo_fields_delete', '/%(repo_name)s/settings/fields/%(field_id)s/delete', ['repo_name', 'field_id']);
pyroutes.register('repo_edit_toggle_locking', '/%(repo_name)s/settings/toggle_locking', ['repo_name']);
pyroutes.register('edit_repo_remote', '/%(repo_name)s/settings/remote', ['repo_name']);
pyroutes.register('edit_repo_remote_pull', '/%(repo_name)s/settings/remote/pull', ['repo_name']);
pyroutes.register('edit_repo_statistics', '/%(repo_name)s/settings/statistics', ['repo_name']);
pyroutes.register('edit_repo_statistics_reset', '/%(repo_name)s/settings/statistics/update', ['repo_name']);
pyroutes.register('edit_repo_issuetracker', '/%(repo_name)s/settings/issue_trackers', ['repo_name']);
pyroutes.register('edit_repo_issuetracker_test', '/%(repo_name)s/settings/issue_trackers/test', ['repo_name']);
pyroutes.register('edit_repo_issuetracker_delete', '/%(repo_name)s/settings/issue_trackers/delete', ['repo_name']);
pyroutes.register('edit_repo_issuetracker_update', '/%(repo_name)s/settings/issue_trackers/update', ['repo_name']);
pyroutes.register('edit_repo_vcs', '/%(repo_name)s/settings/vcs', ['repo_name']);
pyroutes.register('edit_repo_vcs_update', '/%(repo_name)s/settings/vcs/update', ['repo_name']);
pyroutes.register('edit_repo_vcs_svn_pattern_delete', '/%(repo_name)s/settings/vcs/svn_pattern/delete', ['repo_name']);
pyroutes.register('repo_reviewers', '/%(repo_name)s/settings/review/rules', ['repo_name']);
pyroutes.register('pullrequest_update', '/%(repo_name)s/pull-request/%(pull_request_id)s/update', ['repo_name', 'pull_request_id']);
pyroutes.register('register', '/_admin/register', []);
pyroutes.register('repo_archivefile', '/%(repo_name)s/archive/%(fname)s', ['repo_name', 'fname']);
pyroutes.register('repo_artifacts_data', '/%(repo_name)s/artifacts_data', ['repo_name']);
pyroutes.register('repo_artifacts_delete', '/%(repo_name)s/artifacts/delete/%(uid)s', ['repo_name', 'uid']);
pyroutes.register('repo_artifacts_get', '/%(repo_name)s/artifacts/download/%(uid)s', ['repo_name', 'uid']);
pyroutes.register('repo_artifacts_info', '/%(repo_name)s/artifacts/info/%(uid)s', ['repo_name', 'uid']);
pyroutes.register('repo_artifacts_list', '/%(repo_name)s/artifacts', ['repo_name']);
pyroutes.register('repo_artifacts_new', '/%(repo_name)s/artifacts/new', ['repo_name']);
pyroutes.register('repo_artifacts_store', '/%(repo_name)s/artifacts/store', ['repo_name']);
pyroutes.register('repo_artifacts_update', '/%(repo_name)s/artifacts/update/%(uid)s', ['repo_name', 'uid']);
pyroutes.register('repo_automation', '/%(repo_name)s/settings/automation', ['repo_name']);
pyroutes.register('repo_automation_update', '/%(repo_name)s/settings/automation/%(entry_id)s/update', ['repo_name', 'entry_id']);
pyroutes.register('repo_changelog', '/%(repo_name)s/changelog', ['repo_name']);
pyroutes.register('repo_changelog_file', '/%(repo_name)s/changelog/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_commit', '/%(repo_name)s/changeset/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_children', '/%(repo_name)s/changeset_children/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_comment_attachment_upload', '/%(repo_name)s/changeset/%(commit_id)s/comment/attachment_upload', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_comment_create', '/%(repo_name)s/changeset/%(commit_id)s/comment/create', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_comment_delete', '/%(repo_name)s/changeset/%(commit_id)s/comment/%(comment_id)s/delete', ['repo_name', 'commit_id', 'comment_id']);
pyroutes.register('repo_commit_comment_edit', '/%(repo_name)s/changeset/%(commit_id)s/comment/%(comment_id)s/edit', ['repo_name', 'commit_id', 'comment_id']);
pyroutes.register('repo_commit_comment_history_view', '/%(repo_name)s/changeset/%(commit_id)s/comment/%(comment_history_id)s/history_view', ['repo_name', 'commit_id', 'comment_history_id']);
pyroutes.register('repo_commit_comment_preview', '/%(repo_name)s/changeset/%(commit_id)s/comment/preview', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_data', '/%(repo_name)s/changeset-data/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_download', '/%(repo_name)s/changeset-download/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_parents', '/%(repo_name)s/changeset_parents/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_patch', '/%(repo_name)s/changeset-patch/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_raw', '/%(repo_name)s/changeset-diff/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_commit_raw_deprecated', '/%(repo_name)s/raw-changeset/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_commits', '/%(repo_name)s/commits', ['repo_name']);
pyroutes.register('repo_commits_elements', '/%(repo_name)s/commits_elements', ['repo_name']);
pyroutes.register('repo_commits_elements_file', '/%(repo_name)s/commits_elements/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_commits_file', '/%(repo_name)s/commits/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_compare', '/%(repo_name)s/compare/%(source_ref_type)s@%(source_ref)s...%(target_ref_type)s@%(target_ref)s', ['repo_name', 'source_ref_type', 'source_ref', 'target_ref_type', 'target_ref']);
pyroutes.register('repo_compare_select', '/%(repo_name)s/compare', ['repo_name']);
pyroutes.register('repo_create', '/_admin/repos/create', []);
pyroutes.register('repo_creating', '/%(repo_name)s/repo_creating', ['repo_name']);
pyroutes.register('repo_creating_check', '/%(repo_name)s/repo_creating_check', ['repo_name']);
pyroutes.register('repo_default_reviewers_data', '/%(repo_name)s/settings/review/default-reviewers', ['repo_name']);
pyroutes.register('edit_repo_strip', '/%(repo_name)s/settings/strip', ['repo_name']);
pyroutes.register('strip_check', '/%(repo_name)s/settings/strip_check', ['repo_name']);
pyroutes.register('strip_execute', '/%(repo_name)s/settings/strip_execute', ['repo_name']);
pyroutes.register('edit_repo_audit_logs', '/%(repo_name)s/settings/audit_logs', ['repo_name']);
pyroutes.register('rss_feed_home', '/%(repo_name)s/feed-rss', ['repo_name']);
pyroutes.register('atom_feed_home', '/%(repo_name)s/feed-atom', ['repo_name']);
pyroutes.register('rss_feed_home_old', '/%(repo_name)s/feed/rss', ['repo_name']);
pyroutes.register('atom_feed_home_old', '/%(repo_name)s/feed/atom', ['repo_name']);
pyroutes.register('repo_summary', '/%(repo_name)s', ['repo_name']);
pyroutes.register('repo_summary_slash', '/%(repo_name)s/', ['repo_name']);
pyroutes.register('edit_repo_group', '/%(repo_group_name)s/_edit', ['repo_group_name']);
pyroutes.register('edit_repo_group_advanced', '/%(repo_group_name)s/_settings/advanced', ['repo_group_name']);
pyroutes.register('edit_repo_group_advanced_delete', '/%(repo_group_name)s/_settings/advanced/delete', ['repo_group_name']);
pyroutes.register('edit_repo_group_perms', '/%(repo_group_name)s/_settings/permissions', ['repo_group_name']);
pyroutes.register('edit_repo_group_perms_update', '/%(repo_group_name)s/_settings/permissions/update', ['repo_group_name']);
pyroutes.register('repo_edit_toggle_locking', '/%(repo_name)s/settings/toggle_locking', ['repo_name']);
pyroutes.register('repo_file_authors', '/%(repo_name)s/authors/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_file_download', '/%(repo_name)s/download/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_file_download:legacy', '/%(repo_name)s/rawfile/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_file_history', '/%(repo_name)s/history/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_file_raw', '/%(repo_name)s/raw/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files', '/%(repo_name)s/files/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files:annotated', '/%(repo_name)s/annotate/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files:annotated_previous', '/%(repo_name)s/annotate-previous/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files:default_commit', '/%(repo_name)s/files', ['repo_name']);
pyroutes.register('repo_files:default_path', '/%(repo_name)s/files/%(commit_id)s/', ['repo_name', 'commit_id']);
pyroutes.register('repo_files:rendered', '/%(repo_name)s/render/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files_add_file', '/%(repo_name)s/add_file/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files_check_head', '/%(repo_name)s/check_head/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files_create_file', '/%(repo_name)s/create_file/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files_delete_file', '/%(repo_name)s/delete_file/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files_diff', '/%(repo_name)s/diff/%(f_path)s', ['repo_name', 'f_path']);
pyroutes.register('repo_files_diff_2way_redirect', '/%(repo_name)s/diff-2way/%(f_path)s', ['repo_name', 'f_path']);
pyroutes.register('repo_files_edit_file', '/%(repo_name)s/edit_file/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files_nodelist', '/%(repo_name)s/nodelist/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files_remove_file', '/%(repo_name)s/remove_file/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files_update_file', '/%(repo_name)s/update_file/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_files_upload_file', '/%(repo_name)s/upload_file/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_fork_create', '/%(repo_name)s/fork/create', ['repo_name']);
pyroutes.register('repo_fork_new', '/%(repo_name)s/fork', ['repo_name']);
pyroutes.register('repo_forks_data', '/%(repo_name)s/forks/data', ['repo_name']);
pyroutes.register('repo_forks_show_all', '/%(repo_name)s/forks', ['repo_name']);
pyroutes.register('repo_group_create', '/_admin/repo_group/create', []);
pyroutes.register('repo_group_home', '/%(repo_group_name)s', ['repo_group_name']);
pyroutes.register('repo_group_home_slash', '/%(repo_group_name)s/', ['repo_group_name']);
pyroutes.register('user_group_members_data', '/_admin/user_groups/%(user_group_id)s/members', ['user_group_id']);
pyroutes.register('edit_user_group_perms_summary', '/_admin/user_groups/%(user_group_id)s/edit/permissions_summary', ['user_group_id']);
pyroutes.register('edit_user_group_perms_summary_json', '/_admin/user_groups/%(user_group_id)s/edit/permissions_summary/json', ['user_group_id']);
pyroutes.register('edit_user_group', '/_admin/user_groups/%(user_group_id)s/edit', ['user_group_id']);
pyroutes.register('user_groups_update', '/_admin/user_groups/%(user_group_id)s/update', ['user_group_id']);
pyroutes.register('edit_user_group_global_perms', '/_admin/user_groups/%(user_group_id)s/edit/global_permissions', ['user_group_id']);
pyroutes.register('edit_user_group_global_perms_update', '/_admin/user_groups/%(user_group_id)s/edit/global_permissions/update', ['user_group_id']);
pyroutes.register('edit_user_group_perms', '/_admin/user_groups/%(user_group_id)s/edit/permissions', ['user_group_id']);
pyroutes.register('edit_user_group_perms_update', '/_admin/user_groups/%(user_group_id)s/edit/permissions/update', ['user_group_id']);
pyroutes.register('edit_user_group_advanced', '/_admin/user_groups/%(user_group_id)s/edit/advanced', ['user_group_id']);
pyroutes.register('edit_user_group_advanced_sync', '/_admin/user_groups/%(user_group_id)s/edit/advanced/sync', ['user_group_id']);
pyroutes.register('user_groups_delete', '/_admin/user_groups/%(user_group_id)s/delete', ['user_group_id']);
pyroutes.register('repo_group_integrations_create', '/%(repo_group_name)s/_settings/integrations/%(integration)s/new', ['repo_group_name', 'integration']);
pyroutes.register('repo_group_integrations_edit', '/%(repo_group_name)s/_settings/integrations/%(integration)s/%(integration_id)s', ['repo_group_name', 'integration', 'integration_id']);
pyroutes.register('repo_group_integrations_home', '/%(repo_group_name)s/_settings/integrations', ['repo_group_name']);
pyroutes.register('repo_group_integrations_list', '/%(repo_group_name)s/_settings/integrations/%(integration)s', ['repo_group_name', 'integration']);
pyroutes.register('repo_group_integrations_new', '/%(repo_group_name)s/_settings/integrations/new', ['repo_group_name']);
pyroutes.register('repo_group_list_data', '/_repo_groups', []);
pyroutes.register('repo_group_new', '/_admin/repo_group/new', []);
pyroutes.register('repo_groups', '/_admin/repo_groups', []);
pyroutes.register('repo_groups_data', '/_admin/repo_groups_data', []);
pyroutes.register('repo_integrations_create', '/%(repo_name)s/settings/integrations/%(integration)s/new', ['repo_name', 'integration']);
pyroutes.register('repo_integrations_edit', '/%(repo_name)s/settings/integrations/%(integration)s/%(integration_id)s', ['repo_name', 'integration', 'integration_id']);
pyroutes.register('repo_integrations_home', '/%(repo_name)s/settings/integrations', ['repo_name']);
pyroutes.register('repo_integrations_list', '/%(repo_name)s/settings/integrations/%(integration)s', ['repo_name', 'integration']);
pyroutes.register('repo_integrations_new', '/%(repo_name)s/settings/integrations/new', ['repo_name']);
pyroutes.register('repo_list_data', '/_repos', []);
pyroutes.register('repo_new', '/_admin/repos/new', []);
pyroutes.register('repo_nodetree_full', '/%(repo_name)s/nodetree_full/%(commit_id)s/%(f_path)s', ['repo_name', 'commit_id', 'f_path']);
pyroutes.register('repo_nodetree_full:default_path', '/%(repo_name)s/nodetree_full/%(commit_id)s/', ['repo_name', 'commit_id']);
pyroutes.register('repo_refs_changelog_data', '/%(repo_name)s/refs-data-changelog', ['repo_name']);
pyroutes.register('repo_refs_data', '/%(repo_name)s/refs-data', ['repo_name']);
pyroutes.register('repo_reviewers', '/%(repo_name)s/settings/review/rules', ['repo_name']);
pyroutes.register('repo_reviewers_review_rule_delete', '/%(repo_name)s/settings/review/rules/%(rule_id)s/delete', ['repo_name', 'rule_id']);
pyroutes.register('repo_reviewers_review_rule_edit', '/%(repo_name)s/settings/review/rules/%(rule_id)s', ['repo_name', 'rule_id']);
pyroutes.register('repo_reviewers_review_rule_new', '/%(repo_name)s/settings/review/rules/new', ['repo_name']);
pyroutes.register('repo_stats', '/%(repo_name)s/repo_stats/%(commit_id)s', ['repo_name', 'commit_id']);
pyroutes.register('repo_summary', '/%(repo_name)s', ['repo_name']);
pyroutes.register('repo_summary_commits', '/%(repo_name)s/summary-commits', ['repo_name']);
pyroutes.register('repo_summary_explicit', '/%(repo_name)s/summary', ['repo_name']);
pyroutes.register('repo_summary_slash', '/%(repo_name)s/', ['repo_name']);
pyroutes.register('repos', '/_admin/repos', []);
pyroutes.register('repos_data', '/_admin/repos_data', []);
pyroutes.register('reset_password', '/_admin/password_reset', []);
pyroutes.register('reset_password_confirmation', '/_admin/password_reset_confirmation', []);
pyroutes.register('robots', '/robots.txt', []);
pyroutes.register('rss_feed_home', '/%(repo_name)s/feed-rss', ['repo_name']);
pyroutes.register('rss_feed_home_old', '/%(repo_name)s/feed/rss', ['repo_name']);
pyroutes.register('search', '/_admin/search', []);
pyroutes.register('search_repo', '/%(repo_name)s/_search', ['repo_name']);
pyroutes.register('search_repo_alt', '/%(repo_name)s/search', ['repo_name']);
pyroutes.register('search_repo_group', '/%(repo_group_name)s/_search', ['repo_group_name']);
pyroutes.register('user_profile', '/_profiles/%(username)s', ['username']);
pyroutes.register('store_user_session_value', '/_store_session_attr', []);
pyroutes.register('strip_check', '/%(repo_name)s/settings/strip_check', ['repo_name']);
pyroutes.register('strip_execute', '/%(repo_name)s/settings/strip_execute', ['repo_name']);
pyroutes.register('tags_home', '/%(repo_name)s/tags', ['repo_name']);
pyroutes.register('toggle_following', '/_admin/toggle_following', []);
pyroutes.register('upload_file', '/_file_store/upload', []);
pyroutes.register('user_autocomplete_data', '/_users', []);
pyroutes.register('user_create_personal_repo_group', '/_admin/users/%(user_id)s/create_repo_group', ['user_id']);
pyroutes.register('user_delete', '/_admin/users/%(user_id)s/delete', ['user_id']);
pyroutes.register('user_disable_force_password_reset', '/_admin/users/%(user_id)s/password_reset_disable', ['user_id']);
pyroutes.register('user_edit', '/_admin/users/%(user_id)s/edit', ['user_id']);
pyroutes.register('user_edit_advanced', '/_admin/users/%(user_id)s/edit/advanced', ['user_id']);
pyroutes.register('user_edit_global_perms', '/_admin/users/%(user_id)s/edit/global_permissions', ['user_id']);
pyroutes.register('user_edit_global_perms_update', '/_admin/users/%(user_id)s/edit/global_permissions/update', ['user_id']);
pyroutes.register('user_enable_force_password_reset', '/_admin/users/%(user_id)s/password_reset_enable', ['user_id']);
pyroutes.register('user_group_autocomplete_data', '/_user_groups', []);
pyroutes.register('user_group_members_data', '/_admin/user_groups/%(user_group_id)s/members', ['user_group_id']);
pyroutes.register('user_group_profile', '/_profile_user_group/%(user_group_name)s', ['user_group_name']);
pyroutes.register('my_account_profile', '/_admin/my_account/profile', []);
pyroutes.register('my_account_edit', '/_admin/my_account/edit', []);
pyroutes.register('my_account_update', '/_admin/my_account/update', []);
pyroutes.register('my_account_password', '/_admin/my_account/password', []);
pyroutes.register('my_account_password_update', '/_admin/my_account/password/update', []);
pyroutes.register('my_account_auth_tokens_view', '/_admin/my_account/auth_tokens/view', []);
pyroutes.register('my_account_auth_tokens_delete', '/_admin/my_account/auth_tokens/delete', []);
pyroutes.register('my_account_ssh_keys', '/_admin/my_account/ssh_keys', []);
pyroutes.register('my_account_ssh_keys_generate', '/_admin/my_account/ssh_keys/generate', []);
pyroutes.register('my_account_ssh_keys_add', '/_admin/my_account/ssh_keys/new', []);
pyroutes.register('my_account_ssh_keys_delete', '/_admin/my_account/ssh_keys/delete', []);
pyroutes.register('my_account_user_group_membership', '/_admin/my_account/user_group_membership', []);
pyroutes.register('my_account_emails', '/_admin/my_account/emails', []);
pyroutes.register('my_account_emails_add', '/_admin/my_account/emails/new', []);
pyroutes.register('my_account_emails_delete', '/_admin/my_account/emails/delete', []);
pyroutes.register('my_account_repos', '/_admin/my_account/repos', []);
pyroutes.register('my_account_watched', '/_admin/my_account/watched', []);
pyroutes.register('my_account_bookmarks', '/_admin/my_account/bookmarks', []);
pyroutes.register('my_account_bookmarks_update', '/_admin/my_account/bookmarks/update', []);
pyroutes.register('my_account_goto_bookmark', '/_admin/my_account/bookmark/%(bookmark_id)s', ['bookmark_id']);
pyroutes.register('my_account_perms', '/_admin/my_account/perms', []);
pyroutes.register('my_account_notifications', '/_admin/my_account/notifications', []);
pyroutes.register('my_account_notifications_toggle_visibility', '/_admin/my_account/toggle_visibility', []);
pyroutes.register('my_account_pullrequests', '/_admin/my_account/pull_requests', []);
pyroutes.register('my_account_pullrequests_data', '/_admin/my_account/pull_requests/data', []);
pyroutes.register('notifications_show_all', '/_admin/notifications', []);
pyroutes.register('notifications_mark_all_read', '/_admin/notifications/mark_all_read', []);
pyroutes.register('notifications_show', '/_admin/notifications/%(notification_id)s', ['notification_id']);
pyroutes.register('notifications_update', '/_admin/notifications/%(notification_id)s/update', ['notification_id']);
pyroutes.register('notifications_delete', '/_admin/notifications/%(notification_id)s/delete', ['notification_id']);
pyroutes.register('my_account_notifications_test_channelstream', '/_admin/my_account/test_channelstream', []);
pyroutes.register('gists_show', '/_admin/gists', []);
pyroutes.register('gists_new', '/_admin/gists/new', []);
pyroutes.register('gists_create', '/_admin/gists/create', []);
pyroutes.register('gist_show', '/_admin/gists/%(gist_id)s', ['gist_id']);
pyroutes.register('gist_delete', '/_admin/gists/%(gist_id)s/delete', ['gist_id']);
pyroutes.register('gist_edit', '/_admin/gists/%(gist_id)s/edit', ['gist_id']);
pyroutes.register('gist_edit_check_revision', '/_admin/gists/%(gist_id)s/edit/check_revision', ['gist_id']);
pyroutes.register('gist_update', '/_admin/gists/%(gist_id)s/update', ['gist_id']);
pyroutes.register('gist_show_rev', '/_admin/gists/%(gist_id)s/%(revision)s', ['gist_id', 'revision']);
pyroutes.register('gist_show_formatted', '/_admin/gists/%(gist_id)s/%(revision)s/%(format)s', ['gist_id', 'revision', 'format']);
pyroutes.register('gist_show_formatted_path', '/_admin/gists/%(gist_id)s/%(revision)s/%(format)s/%(f_path)s', ['gist_id', 'revision', 'format', 'f_path']);
pyroutes.register('debug_style_home', '/_admin/debug_style', []);
pyroutes.register('debug_style_email', '/_admin/debug_style/email/%(email_id)s', ['email_id']);
pyroutes.register('debug_style_email_plain_rendered', '/_admin/debug_style/email-rendered/%(email_id)s', ['email_id']);
pyroutes.register('debug_style_template', '/_admin/debug_style/t/%(t_path)s', ['t_path']);
pyroutes.register('apiv2', '/_admin/api', []);
pyroutes.register('admin_settings_license', '/_admin/settings/license', []);
pyroutes.register('admin_settings_license_unlock', '/_admin/settings/license_unlock', []);
pyroutes.register('login', '/_admin/login', []);
pyroutes.register('register', '/_admin/register', []);
pyroutes.register('repo_reviewers_review_rule_new', '/%(repo_name)s/settings/review/rules/new', ['repo_name']);
pyroutes.register('repo_reviewers_review_rule_edit', '/%(repo_name)s/settings/review/rules/%(rule_id)s', ['repo_name', 'rule_id']);
pyroutes.register('repo_reviewers_review_rule_delete', '/%(repo_name)s/settings/review/rules/%(rule_id)s/delete', ['repo_name', 'rule_id']);
pyroutes.register('plugin_admin_chat', '/_admin/plugin_admin_chat/%(action)s', ['action']);
pyroutes.register('edit_user_auth_tokens', '/_admin/users/%(user_id)s/edit/auth_tokens', ['user_id']);
pyroutes.register('edit_user_auth_tokens_add', '/_admin/users/%(user_id)s/edit/auth_tokens/new', ['user_id']);
pyroutes.register('admin_settings_scheduler_show_tasks', '/_admin/settings/scheduler/_tasks', []);
pyroutes.register('admin_settings_scheduler_show_all', '/_admin/settings/scheduler', []);
pyroutes.register('admin_settings_scheduler_new', '/_admin/settings/scheduler/new', []);
pyroutes.register('admin_settings_scheduler_create', '/_admin/settings/scheduler/create', []);
pyroutes.register('admin_settings_scheduler_edit', '/_admin/settings/scheduler/%(schedule_id)s', ['schedule_id']);
pyroutes.register('admin_settings_scheduler_update', '/_admin/settings/scheduler/%(schedule_id)s/update', ['schedule_id']);
pyroutes.register('admin_settings_scheduler_delete', '/_admin/settings/scheduler/%(schedule_id)s/delete', ['schedule_id']);
pyroutes.register('admin_settings_scheduler_execute', '/_admin/settings/scheduler/%(schedule_id)s/execute', ['schedule_id']);
pyroutes.register('admin_settings_automation', '/_admin/settings/automation', []);
pyroutes.register('admin_settings_automation_update', '/_admin/settings/automation/%(entry_id)s/update', ['entry_id']);
pyroutes.register('admin_permissions_branch', '/_admin/permissions/branch', []);
pyroutes.register('admin_permissions_branch_update', '/_admin/permissions/branch/update', []);
pyroutes.register('my_account_auth_tokens', '/_admin/my_account/auth_tokens', []);
pyroutes.register('my_account_auth_tokens_add', '/_admin/my_account/auth_tokens/new', []);
pyroutes.register('my_account_external_identity', '/_admin/my_account/external-identity', []);
pyroutes.register('my_account_external_identity_delete', '/_admin/my_account/external-identity/delete', []);
pyroutes.register('pullrequest_draft_comments_submit', '/%(repo_name)s/pull-request/%(pull_request_id)s/draft_comments_submit', ['repo_name', 'pull_request_id']);
pyroutes.register('commit_draft_comments_submit', '/%(repo_name)s/changeset/%(commit_id)s/draft_comments_submit', ['repo_name', 'commit_id']);
pyroutes.register('repo_artifacts_list', '/%(repo_name)s/artifacts', ['repo_name']);
pyroutes.register('repo_artifacts_data', '/%(repo_name)s/artifacts_data', ['repo_name']);
pyroutes.register('repo_artifacts_new', '/%(repo_name)s/artifacts/new', ['repo_name']);
pyroutes.register('repo_artifacts_get', '/%(repo_name)s/artifacts/download/%(uid)s', ['repo_name', 'uid']);
pyroutes.register('repo_artifacts_store', '/%(repo_name)s/artifacts/store', ['repo_name']);
pyroutes.register('repo_artifacts_info', '/%(repo_name)s/artifacts/info/%(uid)s', ['repo_name', 'uid']);
pyroutes.register('repo_artifacts_delete', '/%(repo_name)s/artifacts/delete/%(uid)s', ['repo_name', 'uid']);
pyroutes.register('repo_artifacts_update', '/%(repo_name)s/artifacts/update/%(uid)s', ['repo_name', 'uid']);
pyroutes.register('repo_automation', '/%(repo_name)s/settings/automation', ['repo_name']);
pyroutes.register('repo_automation_update', '/%(repo_name)s/settings/automation/%(entry_id)s/update', ['repo_name', 'entry_id']);
pyroutes.register('edit_repo_remote_push', '/%(repo_name)s/settings/remote/push', ['repo_name']);
pyroutes.register('edit_repo_perms_branch', '/%(repo_name)s/settings/branch_permissions', ['repo_name']);
pyroutes.register('edit_repo_perms_branch_delete', '/%(repo_name)s/settings/branch_permissions/%(rule_id)s/delete', ['repo_name', 'rule_id']);
pyroutes.register('user_groups', '/_admin/user_groups', []);
pyroutes.register('user_groups_create', '/_admin/user_groups/create', []);
pyroutes.register('user_groups_data', '/_admin/user_groups_data', []);
pyroutes.register('user_groups_delete', '/_admin/user_groups/%(user_group_id)s/delete', ['user_group_id']);
pyroutes.register('user_groups_new', '/_admin/user_groups/new', []);
pyroutes.register('user_groups_update', '/_admin/user_groups/%(user_group_id)s/update', ['user_group_id']);
pyroutes.register('user_notice_dismiss', '/_admin/users/%(user_id)s/notice_dismiss', ['user_id']);
pyroutes.register('user_profile', '/_profiles/%(username)s', ['username']);
pyroutes.register('user_update', '/_admin/users/%(user_id)s/update', ['user_id']);
pyroutes.register('users', '/_admin/users', []);
pyroutes.register('users_create', '/_admin/users/create', []);
pyroutes.register('users_data', '/_admin/users_data', []);
pyroutes.register('users_new', '/_admin/users/new', []);
}

View file

@ -233,7 +233,7 @@ def write_usage_data(event):
# write every 6th hour
if age_in_min and age_in_min < 60 * 6:
log.debug('Usage file created %s minutes ago, skipping (threashold: %s)...',
log.debug('Usage file created %s minutes ago, skipping (threshold: %s minutes)...',
age_in_min, 60 * 6)
return