##// END OF EJS Templates
core: use proper event to bootstrap pylons env....
core: use proper event to bootstrap pylons env. - allows to skip this for VCS and API calls in more efficient way. - fixes #5164

File last commit:

r1309:8a946991 default
r1309:8a946991 default
Show More
tweens.py
66 lines | 2.3 KiB | text/x-python | PythonLexer
# -*- coding: utf-8 -*-
# Copyright (C) 2010-2017 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.lib.middleware.vcs import (
detect_vcs_request, VCS_TYPE_KEY, VCS_TYPE_SKIP)
log = logging.getLogger(__name__)
def vcs_detection_tween_factory(handler, registry):
def vcs_detection_tween(request):
"""
Do detection of vcs type, and save results for other layers to re-use
this information
"""
vcs_handler = detect_vcs_request(
request.environ, request.registry.settings.get('vcs.backends'))
if vcs_handler:
# save detected VCS type for later re-use
request.environ[VCS_TYPE_KEY] = vcs_handler.SCM
request.vcs_call = vcs_handler.SCM
return handler(request)
# mark that we didn't detect an VCS, and we can skip detection later on
request.environ[VCS_TYPE_KEY] = VCS_TYPE_SKIP
return handler(request)
return vcs_detection_tween
def includeme(config):
config.add_subscriber('rhodecode.subscribers.add_renderer_globals',
'pyramid.events.BeforeRender')
config.add_subscriber('rhodecode.subscribers.set_user_lang',
'pyramid.events.NewRequest')
config.add_subscriber('rhodecode.subscribers.add_localizer',
'pyramid.events.NewRequest')
config.add_subscriber('rhodecode.subscribers.add_pylons_context',
'pyramid.events.ContextFound')
config.add_tween('rhodecode.tweens.vcs_detection_tween_factory')