##// END OF EJS Templates
integrations: add integration support...
integrations: add integration support * added db migration for integration table, version 55 * added integrations views/templates/models * added slack integration * added h.url.current() support for pyramid only contexts * added issues extractor for commit messages * renamed repo-deleted/repo-created to repo-delete/repo-create * removed marshmallow * added serialization for events to static dicts of data * added lazy_ugettext for translation of start time string

File last commit:

r411:df8dc98d default
r411:df8dc98d default
Show More
routes.py
133 lines | 5.8 KiB | text/x-python | PythonLexer
# -*- coding: utf-8 -*-
# Copyright (C) 2012-2016 RhodeCode GmbH
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License, version 3
# (only), as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# This program is dual-licensed. If you wish to learn more about the
# RhodeCode Enterprise Edition, including its added features, Support services,
# and proprietary license terms, please see https://rhodecode.com/licenses/
import logging
from rhodecode.model.db import Repository, Integration
from rhodecode.config.routing import (
ADMIN_PREFIX, add_route_requirements, URL_NAME_REQUIREMENTS)
from rhodecode.integrations import integration_type_registry
log = logging.getLogger(__name__)
def includeme(config):
config.add_route('global_integrations_home',
ADMIN_PREFIX + '/integrations')
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',
attr='index',
renderer='rhodecode:templates/admin/integrations/list.html',
request_method='GET',
route_name=route_name)
config.add_route('global_integrations_create',
ADMIN_PREFIX + '/integrations/{integration}/new',
custom_predicates=(valid_integration,))
config.add_route('global_integrations_edit',
ADMIN_PREFIX + '/integrations/{integration}/{integration_id}',
custom_predicates=(valid_integration,))
for route_name in ['global_integrations_create', 'global_integrations_edit']:
config.add_view('rhodecode.integrations.views.GlobalIntegrationsView',
attr='settings_get',
renderer='rhodecode:templates/admin/integrations/edit.html',
request_method='GET',
route_name=route_name)
config.add_view('rhodecode.integrations.views.GlobalIntegrationsView',
attr='settings_post',
renderer='rhodecode:templates/admin/integrations/edit.html',
request_method='POST',
route_name=route_name)
config.add_route('repo_integrations_home',
add_route_requirements(
'{repo_name}/settings/integrations',
URL_NAME_REQUIREMENTS
),
custom_predicates=(valid_repo,))
config.add_route('repo_integrations_list',
add_route_requirements(
'{repo_name}/settings/integrations/{integration}',
URL_NAME_REQUIREMENTS
),
custom_predicates=(valid_repo, valid_integration))
for route_name in ['repo_integrations_home', 'repo_integrations_list']:
config.add_view('rhodecode.integrations.views.RepoIntegrationsView',
attr='index',
request_method='GET',
route_name=route_name)
config.add_route('repo_integrations_create',
add_route_requirements(
'{repo_name}/settings/integrations/{integration}/new',
URL_NAME_REQUIREMENTS
),
custom_predicates=(valid_repo, valid_integration))
config.add_route('repo_integrations_edit',
add_route_requirements(
'{repo_name}/settings/integrations/{integration}/{integration_id}',
URL_NAME_REQUIREMENTS
),
custom_predicates=(valid_repo, valid_integration))
for route_name in ['repo_integrations_edit', 'repo_integrations_create']:
config.add_view('rhodecode.integrations.views.RepoIntegrationsView',
attr='settings_get',
renderer='rhodecode:templates/admin/integrations/edit.html',
request_method='GET',
route_name=route_name)
config.add_view('rhodecode.integrations.views.RepoIntegrationsView',
attr='settings_post',
renderer='rhodecode:templates/admin/integrations/edit.html',
request_method='POST',
route_name=route_name)
def valid_repo(info, request):
repo = Repository.get_by_repo_name(info['match']['repo_name'])
if repo:
return True
def valid_integration(info, request):
integration_type = info['match']['integration']
integration_id = info['match'].get('integration_id')
repo_name = info['match'].get('repo_name')
if integration_type not in integration_type_registry:
return False
repo = None
if repo_name:
repo = Repository.get_by_repo_name(info['match']['repo_name'])
if not repo:
return False
if integration_id:
integration = Integration.get(integration_id)
if not integration:
return False
if integration.integration_type != integration_type:
return False
if repo and repo.repo_id != integration.repo_id:
return False
return True