##// END OF EJS Templates
scm-app: allow to set documented pyro4 as scm_app_implementation....
scm-app: allow to set documented pyro4 as scm_app_implementation. The documented ini setting allows to set pyro4 as scm_app, while the backend code crashes on import of pyro4 module. This change allows to configure the app based on the .ini docs. if we pass pyro4 as backedn, we simply skip import and use the default pyro4 scm_app

File last commit:

r628:4d980275 default
r632:064401fe default
Show More
environment.py
188 lines | 6.9 KiB | text/x-python | PythonLexer
project: added all source files and assets
r1 # -*- coding: utf-8 -*-
# Copyright (C) 2010-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/
"""
Pylons environment configuration
"""
import os
import logging
import rhodecode
import platform
import re
dan
cleanup: move jsroutes generator function and only generate in...
r95 import io
project: added all source files and assets
r1
from mako.lookup import TemplateLookup
from pylons.configuration import PylonsConfig
from pylons.error import handle_mako_error
dan
cleanup: move jsroutes generator function and only generate in...
r95 from pyramid.settings import asbool
project: added all source files and assets
r1
dan
celery: Reorder celery imports to fix case where celery tasks were being...
r628 # ------------------------------------------------------------------------------
# CELERY magic until refactor - issue #4163 - import order matters here:
from rhodecode.lib import celerypylons # this must be first, celerypylons
# sets config settings upon import
project: added all source files and assets
r1
dan
celery: Reorder celery imports to fix case where celery tasks were being...
r628 import rhodecode.integrations # any modules using celery task
# decorators should be added afterwards:
# ------------------------------------------------------------------------------
project: added all source files and assets
r1
dan
celery: Reorder celery imports to fix case where celery tasks were being...
r628 from rhodecode.lib import app_globals
project: added all source files and assets
r1 from rhodecode.config import utils
from rhodecode.config.routing import make_map
dan
cleanup: move jsroutes generator function and only generate in...
r95 from rhodecode.config.jsroutes import generate_jsroutes_content
project: added all source files and assets
r1
from rhodecode.lib import helpers
from rhodecode.lib.auth import set_available_permissions
from rhodecode.lib.utils import (
repo2db_mapper, make_db_config, set_rhodecode_config,
load_rcextensions)
from rhodecode.lib.utils2 import str2bool, aslist
from rhodecode.lib.vcs import connect_vcs, start_vcs_server
from rhodecode.model.scm import ScmModel
log = logging.getLogger(__name__)
def load_environment(global_conf, app_conf, initial=False,
test_env=None, test_index=None):
"""
Configure the Pylons environment via the ``pylons.config``
object
"""
config = PylonsConfig()
# Pylons paths
root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
paths = {
'root': root,
'controllers': os.path.join(root, 'controllers'),
'static_files': os.path.join(root, 'public'),
'templates': [os.path.join(root, 'templates')],
}
# Initialize config with the basic options
config.init_app(global_conf, app_conf, package='rhodecode', paths=paths)
# store some globals into rhodecode
rhodecode.CELERY_ENABLED = str2bool(config['app_conf'].get('use_celery'))
rhodecode.CELERY_EAGER = str2bool(
config['app_conf'].get('celery.always.eager'))
config['routes.map'] = make_map(config)
dan
cleanup: move jsroutes generator function and only generate in...
r95
dan
javascript: add default value for js generate ini option
r264 if asbool(config.get('generate_js_files', 'false')):
dan
cleanup: move jsroutes generator function and only generate in...
r95 jsroutes = config['routes.map'].jsroutes()
jsroutes_file_content = generate_jsroutes_content(jsroutes)
jsroutes_file_path = os.path.join(
paths['static_files'], 'js', 'rhodecode', 'routes.js')
with io.open(jsroutes_file_path, 'w', encoding='utf-8') as f:
f.write(jsroutes_file_content)
dan
refactor: made javascript routes autogenerate based on python routes
r94
project: added all source files and assets
r1 config['pylons.app_globals'] = app_globals.Globals(config)
config['pylons.h'] = helpers
rhodecode.CONFIG = config
load_rcextensions(root_path=config['here'])
# Setup cache object as early as possible
import pylons
pylons.cache._push_object(config['pylons.app_globals'].cache)
# Create the Mako TemplateLookup, with the default auto-escaping
config['pylons.app_globals'].mako_lookup = TemplateLookup(
directories=paths['templates'],
error_handler=handle_mako_error,
module_directory=os.path.join(app_conf['cache_dir'], 'templates'),
input_encoding='utf-8', default_filters=['escape'],
imports=['from webhelpers.html import escape'])
# sets the c attribute access when don't existing attribute are accessed
config['pylons.strict_tmpl_context'] = True
notifications: support real-time notifications with websockets via channelstream
r526 # configure channelstream
config['channelstream_config'] = {
'enabled': asbool(config.get('channelstream.enabled', False)),
'server': config.get('channelstream.server'),
'secret': config.get('channelstream.secret')
}
project: added all source files and assets
r1 set_available_permissions(config)
db_cfg = make_db_config(clear_session=True)
repos_path = list(db_cfg.items('paths'))[0][1]
config['base_path'] = repos_path
# store db config also in main global CONFIG
set_rhodecode_config(config)
# configure instance id
utils.set_instance_id(config)
# CONFIGURATION OPTIONS HERE (note: all config options will override
# any Pylons config options)
# store config reference into our module to skip import magic of pylons
rhodecode.CONFIG.update(config)
return config
db: Move db setup code to seperate function.
r121 def load_pyramid_environment(global_config, settings):
# Some parts of the code expect a merge of global and app settings.
settings_merged = global_config.copy()
settings_merged.update(settings)
Martin Bornhold
config: Fix settings for celery tasks.
r626 # Store the settings to make them available to other modules.
rhodecode.PYRAMID_SETTINGS = settings_merged
db: Move db setup code to seperate function.
r121 # If this is a test run we prepare the test environment like
# creating a test database, test search index and test repositories.
# This has to be done before the database connection is initialized.
if settings['is_test']:
rhodecode.is_test = True
utils.initialize_test_environment(settings_merged)
# Initialize the database connection.
utils.initialize_database(settings_merged)
Martin Bornhold
vcs: Move the setup code for vcs lib from pylons to pyramid layer....
r582
# Limit backends to `vcs.backends` from configuration
for alias in rhodecode.BACKENDS.keys():
if alias not in settings['vcs.backends']:
del rhodecode.BACKENDS[alias]
log.info('Enabled VCS backends: %s', rhodecode.BACKENDS.keys())
# initialize vcs client and optionally run the server if enabled
vcs_server_uri = settings['vcs.server']
vcs_server_enabled = settings['vcs.server.enable']
start_server = (
settings['vcs.start_server'] and
not int(os.environ.get('RC_VCSSERVER_TEST_DISABLE', '0')))
if vcs_server_enabled and start_server:
log.info("Starting vcsserver")
start_vcs_server(server_and_port=vcs_server_uri,
protocol=utils.get_vcs_server_protocol(settings),
log_level=settings['vcs.server.log_level'])
Martin Bornhold
config: Move pyro4 initialization to load_pyramid_environment.
r625 utils.configure_pyro4(settings)
Martin Bornhold
vcs: Move the setup code for vcs lib from pylons to pyramid layer....
r582 utils.configure_vcs(settings)
if vcs_server_enabled:
connect_vcs(vcs_server_uri, utils.get_vcs_server_protocol(settings))