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
|
|
|
|