atramhasis.data.db.db()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 7
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 6
dl 0
loc 7
rs 10
c 0
b 0
f 0
cc 1
nop 1
1
"""
2
Module that sets up the datamanagers and the database connections.
3
"""
4
from skosprovider_sqlalchemy.models import Base as SkosBase
5
from sqlalchemy import engine_from_config
6
from sqlalchemy.orm import sessionmaker
7
from zope.sqlalchemy import register
8
9
from atramhasis.data.datamanagers import AuditManager
10
from atramhasis.data.datamanagers import ConceptSchemeManager
11
from atramhasis.data.datamanagers import LanguagesManager
12
from atramhasis.data.datamanagers import SkosManager
13
from .models import Base
14
15
16
def data_managers(request):
17
    """
18
    Generate a datamanager with a database session and register a cleanup handler.
19
20
    :param pyramid.request.Request request: The request this db session will
21
        be tied to.
22
    :returns: A dictionary containing different
23
        :class:`datamanagers <atramhasis.data.datamanagers.DataManager>`.
24
    """
25
    session = request.db
26
    skos_manager = SkosManager(session)
27
    conceptscheme_manager = ConceptSchemeManager(session)
28
    languages_manager = LanguagesManager(session)
29
    audit_manager = AuditManager(session)
30
31
    return {'skos_manager': skos_manager, 'conceptscheme_manager': conceptscheme_manager,
32
            'languages_manager': languages_manager, 'audit_manager': audit_manager}
33
34
35
def db(request):
36
    session = request.registry.dbmaker()
37
38
    def cleanup(_):
39
        session.close()
40
    request.add_finished_callback(cleanup)
41
    return session
42
43
44
def includeme(config):
45
    """
46
    Set up SQLAlchemy.
47
48
    :param pyramid.config.Configurator config: Pyramid configuration.
49
    """
50
51
    # Setting up SQLAlchemy
52
    engine = engine_from_config(config.get_settings(), 'sqlalchemy.')
53
    Base.metadata.bind = engine
54
    SkosBase.metadata.bind = engine
55
    config.registry.dbmaker = sessionmaker(bind=engine)
56
    register(config.registry.dbmaker)
57
    config.add_request_method(data_managers, reify=True)
58
    config.add_request_method(db, reify=True)
59