Completed
Push — develop ( 3d3b3d...ad6009 )
by Bram
36s queued 17s
created

atramhasis.configure_session()   A

Complexity

Conditions 3

Size

Total Lines 29
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 16
nop 1
dl 0
loc 29
rs 9.6
c 0
b 0
f 0
1
import logging
2
import os
3
4
from pyramid.config import Configurator
5
from pyramid.config import PHASE3_CONFIG
6
from pyramid.interfaces import ISessionFactory
7
from pyramid.session import SignedCookieSessionFactory
8
from pyramid.settings import aslist
9
10
from atramhasis.renderers import json_renderer_verbose
11
12
LOG = logging.getLogger(__name__)
13
14
15
DEFAULT_SETTINGS = {
16
    "cache.tree.backend": "dogpile.cache.memory",
17
    "cache.tree.arguments.cache_size": "5000",
18
    "cache.tree.expiration_time": "7000",
19
    "cache.list.backend": "dogpile.cache.memory",
20
    "cache.list.arguments.cache_size": "5000",
21
    "cache.list.expiration_time": "7000",
22
    "jinja2.extensions": "jinja2.ext.do",
23
    "jinja2.filters": "label_sort = atramhasis.utils.label_sort",
24
    "dojo.mode": "dist",
25
    "layout.focus_conceptschemes": [],
26
    "skosprovider.skosregistry_factory": "atramhasis.skos.create_registry",
27
    "skosprovider.skosregistry_location": "request",
28
}
29
30
31
def includeme(config):
32
    """this function adds some configuration for the application"""
33
    settings = config.registry.settings
34
    for key, value in DEFAULT_SETTINGS.items():
35
        if key not in settings:
36
            settings[key] = value
37
    configure_session(config)
38
    config.include('pyramid_jinja2')
39
    config.include('pyramid_tm')
40
    config.add_static_view('static', 'static', cache_max_age=3600)
41
    config.add_renderer('csv', 'atramhasis.renderers.CSVRenderer')
42
    config.add_renderer('skosrenderer_verbose', json_renderer_verbose)
43
    # Rewrite urls with trailing slash
44
    config.include('pyramid_rewrite')
45
    config.include("pyramid_openapi3")
46
    config.include('atramhasis.routes')
47
    config.include('pyramid_skosprovider')
48
    config.include('atramhasis.cache')
49
    config.scan('pyramid_skosprovider')
50
51
    config.add_translation_dirs('atramhasis:locale/')
52
53
    config.scan()
54
55
56
def configure_session(config):
57
    """
58
    Configure pyramid's session factory.
59
60
    People can configure their own session factory, but if no factory is registered
61
    atramhasis will try configuring its own.
62
    """
63
64
    def check_session_factory_set():
65
        session_factory = config.registry.queryUtility(ISessionFactory)
66
        if session_factory:
67
            return
68
69
        settings = config.registry.settings
70
        if 'atramhasis.session_factory.secret' not in settings:
71
            msg = (
72
                'No session factory is configured, and '
73
                'atramhasis.session_factory.secret setting is missing.'
74
            )
75
            raise ValueError(msg)
76
77
        LOG.info('Using default SignedCookieSessionFactory.')
78
        default_session_factory = SignedCookieSessionFactory(
79
            settings['atramhasis.session_factory.secret']
80
        )
81
        config.registry.registerUtility(default_session_factory, ISessionFactory)
82
83
    config.action(
84
        'check_session_factory_set', check_session_factory_set, order=PHASE3_CONFIG + 1
85
    )
86
87
88
def main(global_config, **settings):
89
    """ This function returns a Pyramid WSGI application.
90
    """
91
    settings['layout.focus_conceptschemes'] = aslist(settings['layout.focus_conceptschemes'], flatten=False)
92
93
    dump_location = settings['atramhasis.dump_location']
94
    if not os.path.exists(dump_location):
95
        os.makedirs(dump_location)
96
97
    config = Configurator(settings=settings)
98
99
    return load_app(config)
100
101
102
def load_app(config):
103
    includeme(config)
104
105
    config.include('atramhasis.data:db')
106
107
    return config.make_wsgi_app()
108