cubicweb/pyramid/__init__.py
author Philippe Pepiot <ph@itsalwaysdns.eu>
Tue, 31 Mar 2020 19:15:03 +0200
changeset 12957 0c973204033a
parent 12911 a17cbf539a69
permissions -rw-r--r--
[server] prevent returning closed cursor to the database pool In since c8c6ad8 init_repository use repo.internal_cnx() instead of repo.system_source.get_connection() so it use the pool and we should not close cursors from the pool before returning it back. Otherwise we may have "connection already closed" error. This bug only trigger when connection-pool-size = 1. Since we are moving to use a dynamic pooler we need to get this fixed. This does not occur with sqlite since the connection wrapper instantiate new cursor everytime, but this occur with other databases.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11967
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
     1
# copyright 2017 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
     2
# copyright 2014-2016 UNLISH S.A.S. (Montpellier, FRANCE), all rights reserved.
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
     3
#
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
     4
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
     5
#
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
     6
# This file is part of CubicWeb.
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
     7
#
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
     8
# CubicWeb is free software: you can redistribute it and/or modify it under the
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
     9
# terms of the GNU Lesser General Public License as published by the Free
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
    10
# Software Foundation, either version 2.1 of the License, or (at your option)
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
    11
# any later version.
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
    12
#
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
    13
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
    14
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
    15
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
    16
# details.
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
    17
#
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
    18
# You should have received a copy of the GNU Lesser General Public License along
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
    19
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
    20
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
    21
"""Pyramid interface to CubicWeb"""
83739be20fab [pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11959
diff changeset
    22
12789
a073ebcb6518 [debug-toolbar/fix] only import mako when the toolbar is loaded
Laurent Peuch <cortex@worlddomination.be>
parents: 12782
diff changeset
    23
import sys
12052
1a1d2f5faddb [pyramid] Call repository's shutdown method atexit
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12025
diff changeset
    24
import atexit
12789
a073ebcb6518 [debug-toolbar/fix] only import mako when the toolbar is loaded
Laurent Peuch <cortex@worlddomination.be>
parents: 12782
diff changeset
    25
import logging
12587
6b08ba99b40e DeprecationWarning: The SafeConfigParser class has been renamed to ConfigParser in Python 3.2. This alias will be removed in future versions. Use ConfigParser directly instead.
Laurent Peuch <cortex@worlddomination.be>
parents: 12567
diff changeset
    26
from configparser import ConfigParser
11503
ddf61aa73384 Add a wsgi application factory suitable for wsgi servers.
Christophe de Vienne <christophe@unlish.com>
parents: 11501
diff changeset
    27
import os
12186
36f1c7ab9010 [pyramid] Only expose 'cubicweb.bwcompat' setting for "all-in-one" configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12137
diff changeset
    28
import warnings
12052
1a1d2f5faddb [pyramid] Call repository's shutdown method atexit
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12025
diff changeset
    29
11511
13e0f569684c Use 'wsgicors' for CORS handling.
Christophe de Vienne <christophe@unlish.com>
parents: 11503
diff changeset
    30
import wsgicors
11503
ddf61aa73384 Add a wsgi application factory suitable for wsgi servers.
Christophe de Vienne <christophe@unlish.com>
parents: 11501
diff changeset
    31
ddf61aa73384 Add a wsgi application factory suitable for wsgi servers.
Christophe de Vienne <christophe@unlish.com>
parents: 11501
diff changeset
    32
from cubicweb.cwconfig import CubicWebConfiguration as cwcfg
12771
70597b447fb7 [debug-toolbar/display_source_code] add a pyramid view that display syntax highlighted python source file
Laurent Peuch <cortex@worlddomination.be>
parents: 12762
diff changeset
    33
11501
fcf7f99fad4a Add a make_cubicweb_application function
Christophe de Vienne <christophe@unlish.com>
parents: 11492
diff changeset
    34
from pyramid.config import Configurator
11970
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
    35
from pyramid.exceptions import ConfigurationError
11534
ceb1a5baca4f [config] Read pyramid settings in a 'pyramid.ini' file
Christophe de Vienne <christophe@unlish.com>
parents: 11532
diff changeset
    36
from pyramid.settings import asbool, aslist
ceb1a5baca4f [config] Read pyramid settings in a 'pyramid.ini' file
Christophe de Vienne <christophe@unlish.com>
parents: 11532
diff changeset
    37
11501
fcf7f99fad4a Add a make_cubicweb_application function
Christophe de Vienne <christophe@unlish.com>
parents: 11492
diff changeset
    38
12751
30b205676182 [pyramid/ctl] add a new option to activate the debugtoolbar (-t)
Laurent Peuch <cortex@worlddomination.be>
parents: 12587
diff changeset
    39
def config_from_cwconfig(cwconfig, settings=None, debugtoolbar=False):
11958
950ce7d9f642 [pyramid] Rename make_cubicweb_application function as config_from_cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11811
diff changeset
    40
    """Return a Pyramid Configurator instance built from a CubicWeb config and
950ce7d9f642 [pyramid] Rename make_cubicweb_application function as config_from_cwconfig
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11811
diff changeset
    41
    Pyramid-specific configuration files (pyramid.ini).
11537
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
    42
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
    43
    :param cwconfig: A CubicWeb configuration
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
    44
    :returns: A Pyramid config object
11501
fcf7f99fad4a Add a make_cubicweb_application function
Christophe de Vienne <christophe@unlish.com>
parents: 11492
diff changeset
    45
    """
11620
2497bcf18030 split collecting setting before using them, so the function can be reused when inserting WSGI middlewares
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 11601
diff changeset
    46
    settings = dict(settings) if settings else {}
12751
30b205676182 [pyramid/ctl] add a new option to activate the debugtoolbar (-t)
Laurent Peuch <cortex@worlddomination.be>
parents: 12587
diff changeset
    47
    settings.update(settings_from_cwconfig(cwconfig, debugtoolbar=debugtoolbar))
11620
2497bcf18030 split collecting setting before using them, so the function can be reused when inserting WSGI middlewares
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 11601
diff changeset
    48
    config = Configurator(settings=settings)
2497bcf18030 split collecting setting before using them, so the function can be reused when inserting WSGI middlewares
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 11601
diff changeset
    49
    config.registry['cubicweb.config'] = cwconfig
11631
faf279e33298 Merge with pyramid-cubicweb
Yann Voté <yann.vote@logilab.fr>
parents: 11623
diff changeset
    50
    config.include('cubicweb.pyramid')
12751
30b205676182 [pyramid/ctl] add a new option to activate the debugtoolbar (-t)
Laurent Peuch <cortex@worlddomination.be>
parents: 12587
diff changeset
    51
30b205676182 [pyramid/ctl] add a new option to activate the debugtoolbar (-t)
Laurent Peuch <cortex@worlddomination.be>
parents: 12587
diff changeset
    52
    if debugtoolbar:
30b205676182 [pyramid/ctl] add a new option to activate the debugtoolbar (-t)
Laurent Peuch <cortex@worlddomination.be>
parents: 12587
diff changeset
    53
        config.include("pyramid_debugtoolbar")
30b205676182 [pyramid/ctl] add a new option to activate the debugtoolbar (-t)
Laurent Peuch <cortex@worlddomination.be>
parents: 12587
diff changeset
    54
11620
2497bcf18030 split collecting setting before using them, so the function can be reused when inserting WSGI middlewares
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 11601
diff changeset
    55
    return config
11534
ceb1a5baca4f [config] Read pyramid settings in a 'pyramid.ini' file
Christophe de Vienne <christophe@unlish.com>
parents: 11532
diff changeset
    56
11811
f09efeead7f9 Fix broken flake8 configuration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11702
diff changeset
    57
12751
30b205676182 [pyramid/ctl] add a new option to activate the debugtoolbar (-t)
Laurent Peuch <cortex@worlddomination.be>
parents: 12587
diff changeset
    58
def settings_from_cwconfig(cwconfig, debugtoolbar=False):
11620
2497bcf18030 split collecting setting before using them, so the function can be reused when inserting WSGI middlewares
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 11601
diff changeset
    59
    '''
2497bcf18030 split collecting setting before using them, so the function can be reused when inserting WSGI middlewares
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 11601
diff changeset
    60
    Extract settings from pyramid.ini and pyramid-debug.ini (if in debug)
2497bcf18030 split collecting setting before using them, so the function can be reused when inserting WSGI middlewares
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 11601
diff changeset
    61
2497bcf18030 split collecting setting before using them, so the function can be reused when inserting WSGI middlewares
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 11601
diff changeset
    62
    Can be used to configure middleware WSGI with settings from pyramid.ini files
11534
ceb1a5baca4f [config] Read pyramid settings in a 'pyramid.ini' file
Christophe de Vienne <christophe@unlish.com>
parents: 11532
diff changeset
    63
11620
2497bcf18030 split collecting setting before using them, so the function can be reused when inserting WSGI middlewares
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 11601
diff changeset
    64
    :param cwconfig: A CubicWeb configuration
2497bcf18030 split collecting setting before using them, so the function can be reused when inserting WSGI middlewares
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 11601
diff changeset
    65
    :returns: A settings dictionnary
2497bcf18030 split collecting setting before using them, so the function can be reused when inserting WSGI middlewares
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 11601
diff changeset
    66
    '''
2497bcf18030 split collecting setting before using them, so the function can be reused when inserting WSGI middlewares
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 11601
diff changeset
    67
    settings_filenames = [os.path.join(cwconfig.apphome, 'pyramid.ini')]
2497bcf18030 split collecting setting before using them, so the function can be reused when inserting WSGI middlewares
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 11601
diff changeset
    68
    settings = {}
11501
fcf7f99fad4a Add a make_cubicweb_application function
Christophe de Vienne <christophe@unlish.com>
parents: 11492
diff changeset
    69
    if cwconfig.debugmode:
11534
ceb1a5baca4f [config] Read pyramid settings in a 'pyramid.ini' file
Christophe de Vienne <christophe@unlish.com>
parents: 11532
diff changeset
    70
        settings_filenames.insert(
ceb1a5baca4f [config] Read pyramid settings in a 'pyramid.ini' file
Christophe de Vienne <christophe@unlish.com>
parents: 11532
diff changeset
    71
            0, os.path.join(cwconfig.apphome, 'pyramid-debug.ini'))
11811
f09efeead7f9 Fix broken flake8 configuration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11702
diff changeset
    72
11501
fcf7f99fad4a Add a make_cubicweb_application function
Christophe de Vienne <christophe@unlish.com>
parents: 11492
diff changeset
    73
        settings.update({
fcf7f99fad4a Add a make_cubicweb_application function
Christophe de Vienne <christophe@unlish.com>
parents: 11492
diff changeset
    74
            'pyramid.debug_authorization': True,
fcf7f99fad4a Add a make_cubicweb_application function
Christophe de Vienne <christophe@unlish.com>
parents: 11492
diff changeset
    75
            'pyramid.debug_notfound': True,
fcf7f99fad4a Add a make_cubicweb_application function
Christophe de Vienne <christophe@unlish.com>
parents: 11492
diff changeset
    76
            'pyramid.debug_routematch': True,
11567
4f8aa5fcd5da [debug] The debug mode now set pyramid.reload_templates
Christophe de Vienne <christophe@unlish.com>
parents: 11564
diff changeset
    77
            'pyramid.reload_templates': True,
11501
fcf7f99fad4a Add a make_cubicweb_application function
Christophe de Vienne <christophe@unlish.com>
parents: 11492
diff changeset
    78
        })
11811
f09efeead7f9 Fix broken flake8 configuration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11702
diff changeset
    79
12762
f14dde905818 [pyramid/ctl/debugtoolbar] automatically include custom panels on -t
Laurent Peuch <cortex@worlddomination.be>
parents: 12751
diff changeset
    80
        if debugtoolbar:
f14dde905818 [pyramid/ctl/debugtoolbar] automatically include custom panels on -t
Laurent Peuch <cortex@worlddomination.be>
parents: 12751
diff changeset
    81
            settings["debugtoolbar.includes"] = ["cubicweb.pyramid.debugtoolbar_panels"]
f14dde905818 [pyramid/ctl/debugtoolbar] automatically include custom panels on -t
Laurent Peuch <cortex@worlddomination.be>
parents: 12751
diff changeset
    82
11534
ceb1a5baca4f [config] Read pyramid settings in a 'pyramid.ini' file
Christophe de Vienne <christophe@unlish.com>
parents: 11532
diff changeset
    83
    for fname in settings_filenames:
ceb1a5baca4f [config] Read pyramid settings in a 'pyramid.ini' file
Christophe de Vienne <christophe@unlish.com>
parents: 11532
diff changeset
    84
        if os.path.exists(fname):
12587
6b08ba99b40e DeprecationWarning: The SafeConfigParser class has been renamed to ConfigParser in Python 3.2. This alias will be removed in future versions. Use ConfigParser directly instead.
Laurent Peuch <cortex@worlddomination.be>
parents: 12567
diff changeset
    85
            cp = ConfigParser()
11534
ceb1a5baca4f [config] Read pyramid settings in a 'pyramid.ini' file
Christophe de Vienne <christophe@unlish.com>
parents: 11532
diff changeset
    86
            cp.read(fname)
ceb1a5baca4f [config] Read pyramid settings in a 'pyramid.ini' file
Christophe de Vienne <christophe@unlish.com>
parents: 11532
diff changeset
    87
            settings.update(cp.items('main'))
ceb1a5baca4f [config] Read pyramid settings in a 'pyramid.ini' file
Christophe de Vienne <christophe@unlish.com>
parents: 11532
diff changeset
    88
            break
11811
f09efeead7f9 Fix broken flake8 configuration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11702
diff changeset
    89
11620
2497bcf18030 split collecting setting before using them, so the function can be reused when inserting WSGI middlewares
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 11601
diff changeset
    90
    return settings
11503
ddf61aa73384 Add a wsgi application factory suitable for wsgi servers.
Christophe de Vienne <christophe@unlish.com>
parents: 11501
diff changeset
    91
ddf61aa73384 Add a wsgi application factory suitable for wsgi servers.
Christophe de Vienne <christophe@unlish.com>
parents: 11501
diff changeset
    92
11535
dd875009cc47 [profile] Add a profiling tool
Christophe de Vienne <christophe@unlish.com>
parents: 11534
diff changeset
    93
def wsgi_application_from_cwconfig(
dd875009cc47 [profile] Add a profiling tool
Christophe de Vienne <christophe@unlish.com>
parents: 11534
diff changeset
    94
        cwconfig,
12751
30b205676182 [pyramid/ctl] add a new option to activate the debugtoolbar (-t)
Laurent Peuch <cortex@worlddomination.be>
parents: 12587
diff changeset
    95
        profile=False, profile_output=None, profile_dump_every=None, debugtoolbar=False):
11537
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
    96
    """ Build a WSGI application from a cubicweb configuration
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
    97
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
    98
    :param cwconfig: A CubicWeb configuration
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
    99
    :param profile: Enable profiling. See :ref:`profiling`.
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   100
    :param profile_output: Profiling output filename. See :ref:`profiling`.
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   101
    :param profile_dump_every: Profiling number of requests before dumping the
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   102
                               stats. See :ref:`profiling`.
12751
30b205676182 [pyramid/ctl] add a new option to activate the debugtoolbar (-t)
Laurent Peuch <cortex@worlddomination.be>
parents: 12587
diff changeset
   103
    :param debugtoolbar: Activate pyramid debugtoolbar when True.
11537
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   104
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   105
    :returns: A fully operationnal WSGI application
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   106
    """
12751
30b205676182 [pyramid/ctl] add a new option to activate the debugtoolbar (-t)
Laurent Peuch <cortex@worlddomination.be>
parents: 12587
diff changeset
   107
    config = config_from_cwconfig(cwconfig, debugtoolbar=debugtoolbar)
30b205676182 [pyramid/ctl] add a new option to activate the debugtoolbar (-t)
Laurent Peuch <cortex@worlddomination.be>
parents: 12587
diff changeset
   108
11535
dd875009cc47 [profile] Add a profiling tool
Christophe de Vienne <christophe@unlish.com>
parents: 11534
diff changeset
   109
    profile = profile or asbool(config.registry.settings.get(
dd875009cc47 [profile] Add a profiling tool
Christophe de Vienne <christophe@unlish.com>
parents: 11534
diff changeset
   110
        'cubicweb.profile.enable', False))
dd875009cc47 [profile] Add a profiling tool
Christophe de Vienne <christophe@unlish.com>
parents: 11534
diff changeset
   111
    if profile:
dd875009cc47 [profile] Add a profiling tool
Christophe de Vienne <christophe@unlish.com>
parents: 11534
diff changeset
   112
        config.add_route('profile_ping', '_profile/ping')
dd875009cc47 [profile] Add a profiling tool
Christophe de Vienne <christophe@unlish.com>
parents: 11534
diff changeset
   113
        config.add_route('profile_cnx', '_profile/cnx')
11631
faf279e33298 Merge with pyramid-cubicweb
Yann Voté <yann.vote@logilab.fr>
parents: 11623
diff changeset
   114
        config.scan('cubicweb.pyramid.profile')
12771
70597b447fb7 [debug-toolbar/display_source_code] add a pyramid view that display syntax highlighted python source file
Laurent Peuch <cortex@worlddomination.be>
parents: 12762
diff changeset
   115
70597b447fb7 [debug-toolbar/display_source_code] add a pyramid view that display syntax highlighted python source file
Laurent Peuch <cortex@worlddomination.be>
parents: 12762
diff changeset
   116
    if debugtoolbar:
12789
a073ebcb6518 [debug-toolbar/fix] only import mako when the toolbar is loaded
Laurent Peuch <cortex@worlddomination.be>
parents: 12782
diff changeset
   117
        try:
a073ebcb6518 [debug-toolbar/fix] only import mako when the toolbar is loaded
Laurent Peuch <cortex@worlddomination.be>
parents: 12782
diff changeset
   118
            from cubicweb.pyramid.debug_source_code import (
a073ebcb6518 [debug-toolbar/fix] only import mako when the toolbar is loaded
Laurent Peuch <cortex@worlddomination.be>
parents: 12782
diff changeset
   119
                debug_display_source_code,
a073ebcb6518 [debug-toolbar/fix] only import mako when the toolbar is loaded
Laurent Peuch <cortex@worlddomination.be>
parents: 12782
diff changeset
   120
                DEBUG_DISPLAY_SOURCE_CODE_PATH,
a073ebcb6518 [debug-toolbar/fix] only import mako when the toolbar is loaded
Laurent Peuch <cortex@worlddomination.be>
parents: 12782
diff changeset
   121
            )
a073ebcb6518 [debug-toolbar/fix] only import mako when the toolbar is loaded
Laurent Peuch <cortex@worlddomination.be>
parents: 12782
diff changeset
   122
        except ImportError as e:
a073ebcb6518 [debug-toolbar/fix] only import mako when the toolbar is loaded
Laurent Peuch <cortex@worlddomination.be>
parents: 12782
diff changeset
   123
            logging.exception("Error: you tried to activate the debug toolbar but you have missing "
a073ebcb6518 [debug-toolbar/fix] only import mako when the toolbar is loaded
Laurent Peuch <cortex@worlddomination.be>
parents: 12782
diff changeset
   124
                              "dependencies: %s" % e)
a073ebcb6518 [debug-toolbar/fix] only import mako when the toolbar is loaded
Laurent Peuch <cortex@worlddomination.be>
parents: 12782
diff changeset
   125
a073ebcb6518 [debug-toolbar/fix] only import mako when the toolbar is loaded
Laurent Peuch <cortex@worlddomination.be>
parents: 12782
diff changeset
   126
            sys.exit(1)
a073ebcb6518 [debug-toolbar/fix] only import mako when the toolbar is loaded
Laurent Peuch <cortex@worlddomination.be>
parents: 12782
diff changeset
   127
        else:
a073ebcb6518 [debug-toolbar/fix] only import mako when the toolbar is loaded
Laurent Peuch <cortex@worlddomination.be>
parents: 12782
diff changeset
   128
            config.add_route('debug_display_source_code', DEBUG_DISPLAY_SOURCE_CODE_PATH)
a073ebcb6518 [debug-toolbar/fix] only import mako when the toolbar is loaded
Laurent Peuch <cortex@worlddomination.be>
parents: 12782
diff changeset
   129
            config.add_view(debug_display_source_code, route_name='debug_display_source_code')
12771
70597b447fb7 [debug-toolbar/display_source_code] add a pyramid view that display syntax highlighted python source file
Laurent Peuch <cortex@worlddomination.be>
parents: 12762
diff changeset
   130
11511
13e0f569684c Use 'wsgicors' for CORS handling.
Christophe de Vienne <christophe@unlish.com>
parents: 11503
diff changeset
   131
    app = config.make_wsgi_app()
13e0f569684c Use 'wsgicors' for CORS handling.
Christophe de Vienne <christophe@unlish.com>
parents: 11503
diff changeset
   132
    # This replaces completely web/cors.py, which is not used by
11631
faf279e33298 Merge with pyramid-cubicweb
Yann Voté <yann.vote@logilab.fr>
parents: 11623
diff changeset
   133
    # cubicweb.pyramid anymore
11511
13e0f569684c Use 'wsgicors' for CORS handling.
Christophe de Vienne <christophe@unlish.com>
parents: 11503
diff changeset
   134
    app = wsgicors.CORS(
13e0f569684c Use 'wsgicors' for CORS handling.
Christophe de Vienne <christophe@unlish.com>
parents: 11503
diff changeset
   135
        app,
11532
6a1d0aa3ac85 Fix cors 'origin' parameter passing
Christophe de Vienne <christophe@unlish.com>
parents: 11522
diff changeset
   136
        origin=' '.join(cwconfig['access-control-allow-origin']),
11547
fd7d2033cd80 [cors] Fix 'headers' and 'methods' parameters
Christophe de Vienne <christophe@unlish.com>
parents: 11540
diff changeset
   137
        headers=', '.join(cwconfig['access-control-allow-headers']),
12198
be4824a72bf5 [cubicweb/pyramid] take into account two ignored CORS configuration items from all-in-one.conf
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 12186
diff changeset
   138
        expose_headers=', '.join(cwconfig['access-control-expose-headers']),
11547
fd7d2033cd80 [cors] Fix 'headers' and 'methods' parameters
Christophe de Vienne <christophe@unlish.com>
parents: 11540
diff changeset
   139
        methods=', '.join(cwconfig['access-control-allow-methods']),
12198
be4824a72bf5 [cubicweb/pyramid] take into account two ignored CORS configuration items from all-in-one.conf
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 12186
diff changeset
   140
        maxage=cwconfig['access-control-max-age'],
11511
13e0f569684c Use 'wsgicors' for CORS handling.
Christophe de Vienne <christophe@unlish.com>
parents: 11503
diff changeset
   141
        credentials='true')
11535
dd875009cc47 [profile] Add a profiling tool
Christophe de Vienne <christophe@unlish.com>
parents: 11534
diff changeset
   142
dd875009cc47 [profile] Add a profiling tool
Christophe de Vienne <christophe@unlish.com>
parents: 11534
diff changeset
   143
    if profile:
11631
faf279e33298 Merge with pyramid-cubicweb
Yann Voté <yann.vote@logilab.fr>
parents: 11623
diff changeset
   144
        from cubicweb.pyramid.profile import wsgi_profile
11535
dd875009cc47 [profile] Add a profiling tool
Christophe de Vienne <christophe@unlish.com>
parents: 11534
diff changeset
   145
        filename = profile_output or config.registry.settings.get(
dd875009cc47 [profile] Add a profiling tool
Christophe de Vienne <christophe@unlish.com>
parents: 11534
diff changeset
   146
            'cubicweb.profile.output', 'program.prof')
dd875009cc47 [profile] Add a profiling tool
Christophe de Vienne <christophe@unlish.com>
parents: 11534
diff changeset
   147
        dump_every = profile_dump_every or config.registry.settings.get(
dd875009cc47 [profile] Add a profiling tool
Christophe de Vienne <christophe@unlish.com>
parents: 11534
diff changeset
   148
            'cubicweb.profile.dump_every', 100)
dd875009cc47 [profile] Add a profiling tool
Christophe de Vienne <christophe@unlish.com>
parents: 11534
diff changeset
   149
        app = wsgi_profile(app, filename=filename, dump_every=dump_every)
11511
13e0f569684c Use 'wsgicors' for CORS handling.
Christophe de Vienne <christophe@unlish.com>
parents: 11503
diff changeset
   150
    return app
11522
568204930c85 Provides a full wsgi cubicweb application builder
Christophe de Vienne <christophe@unlish.com>
parents: 11511
diff changeset
   151
568204930c85 Provides a full wsgi cubicweb application builder
Christophe de Vienne <christophe@unlish.com>
parents: 11511
diff changeset
   152
568204930c85 Provides a full wsgi cubicweb application builder
Christophe de Vienne <christophe@unlish.com>
parents: 11511
diff changeset
   153
def wsgi_application(instance_name=None, debug=None):
11537
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   154
    """ Build a WSGI application from a cubicweb instance name
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   155
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   156
    :param instance_name: Name of the cubicweb instance (optional). If not
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   157
                          provided, :envvar:`CW_INSTANCE` must exists.
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   158
    :param debug: Enable/disable the debug mode. If defined to True or False,
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   159
                  overrides :envvar:`CW_DEBUG`.
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   160
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   161
    The following environment variables are used if they exist:
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   162
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   163
    .. envvar:: CW_INSTANCE
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   164
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   165
        A CubicWeb instance name.
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   166
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   167
    .. envvar:: CW_DEBUG
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   168
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   169
        If defined, the debugmode is enabled.
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   170
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   171
    The function can be used as an entry-point for third-party wsgi containers.
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   172
    Below is a sample uswgi configuration file:
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   173
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   174
    .. code-block:: ini
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   175
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   176
        [uwsgi]
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   177
        http = 127.0.1.1:8080
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   178
        env = CW_INSTANCE=myinstance
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   179
        env = CW_DEBUG=1
11631
faf279e33298 Merge with pyramid-cubicweb
Yann Voté <yann.vote@logilab.fr>
parents: 11623
diff changeset
   180
        module = cubicweb.pyramid:wsgi_application()
11537
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   181
        virtualenv = /home/user/.virtualenvs/myvirtualenv
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   182
        processes = 1
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   183
        threads = 8
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   184
        stats = 127.0.0.1:9191
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   185
        plugins = http,python
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   186
caf268942436 Initial documentation.
Christophe de Vienne <christophe@unlish.com>
parents: 11535
diff changeset
   187
    """
11522
568204930c85 Provides a full wsgi cubicweb application builder
Christophe de Vienne <christophe@unlish.com>
parents: 11511
diff changeset
   188
    if instance_name is None:
11623
b6f6737d4823 wsgi: clearer exception when CW_INSTANCE is missing
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 11620
diff changeset
   189
        instance_name = os.environ['CW_INSTANCE']
11522
568204930c85 Provides a full wsgi cubicweb application builder
Christophe de Vienne <christophe@unlish.com>
parents: 11511
diff changeset
   190
    if debug is None:
568204930c85 Provides a full wsgi cubicweb application builder
Christophe de Vienne <christophe@unlish.com>
parents: 11511
diff changeset
   191
        debug = 'CW_DEBUG' in os.environ
568204930c85 Provides a full wsgi cubicweb application builder
Christophe de Vienne <christophe@unlish.com>
parents: 11511
diff changeset
   192
568204930c85 Provides a full wsgi cubicweb application builder
Christophe de Vienne <christophe@unlish.com>
parents: 11511
diff changeset
   193
    cwconfig = cwcfg.config_for(instance_name, debugmode=debug)
568204930c85 Provides a full wsgi cubicweb application builder
Christophe de Vienne <christophe@unlish.com>
parents: 11511
diff changeset
   194
568204930c85 Provides a full wsgi cubicweb application builder
Christophe de Vienne <christophe@unlish.com>
parents: 11511
diff changeset
   195
    return wsgi_application_from_cwconfig(cwconfig)
11586
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   196
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   197
11968
bb0dfc7d2d0e [skeleton,pyramid] Move pyramid app definition in cubicweb.pyramid module
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11967
diff changeset
   198
def pyramid_app(global_config, **settings):
bb0dfc7d2d0e [skeleton,pyramid] Move pyramid app definition in cubicweb.pyramid module
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11967
diff changeset
   199
    """Return a Pyramid WSGI application bound to a CubicWeb repository."""
bb0dfc7d2d0e [skeleton,pyramid] Move pyramid app definition in cubicweb.pyramid module
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11967
diff changeset
   200
    config = Configurator(settings=settings)
bb0dfc7d2d0e [skeleton,pyramid] Move pyramid app definition in cubicweb.pyramid module
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11967
diff changeset
   201
    config.include('cubicweb.pyramid')
bb0dfc7d2d0e [skeleton,pyramid] Move pyramid app definition in cubicweb.pyramid module
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11967
diff changeset
   202
    return config.make_wsgi_app()
bb0dfc7d2d0e [skeleton,pyramid] Move pyramid app definition in cubicweb.pyramid module
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11967
diff changeset
   203
bb0dfc7d2d0e [skeleton,pyramid] Move pyramid app definition in cubicweb.pyramid module
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11967
diff changeset
   204
11586
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   205
def includeme(config):
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   206
    """Set-up a CubicWeb instance.
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   207
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   208
    The CubicWeb instance can be set in several ways:
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   209
11970
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   210
    -   Provide an already loaded CubicWeb repository in the registry:
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   211
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   212
        .. code-block:: python
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   213
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   214
            config.registry['cubicweb.repository'] = your_repo_instance
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   215
11586
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   216
    -   Provide an already loaded CubicWeb config instance in the registry:
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   217
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   218
        .. code-block:: python
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   219
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   220
            config.registry['cubicweb.config'] = your_config_instance
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   221
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   222
    -   Provide an instance name in the pyramid settings with
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   223
        :confval:`cubicweb.instance`.
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   224
11970
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   225
    A CubicWeb repository is instantiated and attached in
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   226
    'cubicweb.repository' registry key if not already present.
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   227
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   228
    The CubicWeb instance registry is attached in 'cubicweb.registry' registry
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   229
    key.
11586
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   230
    """
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   231
    cwconfig = config.registry.get('cubicweb.config')
11970
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   232
    repo = config.registry.get('cubicweb.repository')
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   233
12911
a17cbf539a69 [pyramid] add routes /{eid} and /{etype}/{eid} to return RDF when rdf mimetype in Accept HTTP headers
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 12789
diff changeset
   234
    config.include('cubicweb.pyramid.rest_api')
a17cbf539a69 [pyramid] add routes /{eid} and /{etype}/{eid} to return RDF when rdf mimetype in Accept HTTP headers
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 12789
diff changeset
   235
11970
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   236
    if repo is not None:
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   237
        if cwconfig is None:
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   238
            config.registry['cubicweb.config'] = cwconfig = repo.config
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   239
        elif cwconfig is not repo.config:
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   240
            raise ConfigurationError(
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   241
                'CubicWeb config instance (found in "cubicweb.config" '
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   242
                'registry key) mismatches with that of the repository '
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   243
                '(registry["cubicweb.repository"])'
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   244
            )
11586
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   245
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   246
    if cwconfig is None:
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   247
        debugmode = asbool(
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   248
            config.registry.settings.get('cubicweb.debug', False))
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   249
        cwconfig = cwcfg.config_for(
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   250
            config.registry.settings['cubicweb.instance'], debugmode=debugmode)
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   251
        config.registry['cubicweb.config'] = cwconfig
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   252
11970
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   253
    if repo is None:
b282ef22b5ab [pyramid] Make it possible to setup CubicWeb instance from an existing repo in includeme()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11969
diff changeset
   254
        repo = config.registry['cubicweb.repository'] = cwconfig.repository()
11586
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   255
    config.registry['cubicweb.registry'] = repo.vreg
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   256
12079
4870e5a60a52 [pyramid] Do not register repository.shutdown atexit in test mode
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12052
diff changeset
   257
    if cwconfig.mode != 'test':
12137
4db0f2251960 [pyramid] Avoid shutting down the repository at exit if it's already shutting down
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12101
diff changeset
   258
        @atexit.register
4db0f2251960 [pyramid] Avoid shutting down the repository at exit if it's already shutting down
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12101
diff changeset
   259
        def shutdown_repo():
4db0f2251960 [pyramid] Avoid shutting down the repository at exit if it's already shutting down
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12101
diff changeset
   260
            if repo.shutting_down:
4db0f2251960 [pyramid] Avoid shutting down the repository at exit if it's already shutting down
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12101
diff changeset
   261
                return
4db0f2251960 [pyramid] Avoid shutting down the repository at exit if it's already shutting down
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12101
diff changeset
   262
            repo.shutdown
12052
1a1d2f5faddb [pyramid] Call repository's shutdown method atexit
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12025
diff changeset
   263
11586
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   264
    if asbool(config.registry.settings.get('cubicweb.defaults', True)):
11631
faf279e33298 Merge with pyramid-cubicweb
Yann Voté <yann.vote@logilab.fr>
parents: 11623
diff changeset
   265
        config.include('cubicweb.pyramid.defaults')
11586
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   266
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   267
    for name in aslist(config.registry.settings.get('cubicweb.includes', [])):
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   268
        config.include(name)
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   269
11631
faf279e33298 Merge with pyramid-cubicweb
Yann Voté <yann.vote@logilab.fr>
parents: 11623
diff changeset
   270
    config.include('cubicweb.pyramid.core')
11586
c7a25122af4d [config] Move most config code to a includeme()
Christophe de Vienne <christophe@unlish.com>
parents: 11567
diff changeset
   271
12186
36f1c7ab9010 [pyramid] Only expose 'cubicweb.bwcompat' setting for "all-in-one" configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12137
diff changeset
   272
    if asbool(config.registry.settings.get('cubicweb.bwcompat',
36f1c7ab9010 [pyramid] Only expose 'cubicweb.bwcompat' setting for "all-in-one" configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12137
diff changeset
   273
                                           cwconfig.name == 'all-in-one')):
36f1c7ab9010 [pyramid] Only expose 'cubicweb.bwcompat' setting for "all-in-one" configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12137
diff changeset
   274
        if cwconfig.name != 'all-in-one':
36f1c7ab9010 [pyramid] Only expose 'cubicweb.bwcompat' setting for "all-in-one" configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12137
diff changeset
   275
            warnings.warn('"cubicweb.bwcompat" setting only applies to '
36f1c7ab9010 [pyramid] Only expose 'cubicweb.bwcompat' setting for "all-in-one" configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12137
diff changeset
   276
                          '"all-in-one" instance configuration',
36f1c7ab9010 [pyramid] Only expose 'cubicweb.bwcompat' setting for "all-in-one" configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12137
diff changeset
   277
                          UserWarning)
36f1c7ab9010 [pyramid] Only expose 'cubicweb.bwcompat' setting for "all-in-one" configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12137
diff changeset
   278
        else:
36f1c7ab9010 [pyramid] Only expose 'cubicweb.bwcompat' setting for "all-in-one" configuration type
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12137
diff changeset
   279
            config.include('cubicweb.pyramid.bwcompat')