-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrun.py
105 lines (81 loc) · 2.69 KB
/
run.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import os
import hydra
import hydra.utils
import kombu
import logging
import bjoern
import pathlib
import fanstatic
import transaction
import rutter.urlmap
import horseman.response
import cromlech.session
import cromlech.sessions.file
from uvc_serviceportal.app import app
from uvc_serviceportal.mq import MQCenter
from uvc_serviceportal.request import Request
from uvc_serviceportal.leikas.components import REGISTRY
from uvc_serviceportal.message import FlashMessageDataManager
import uvc_serviceportal.web
logger = logging.getLogger(__name__)
def setup_session(config):
# Session middleware
folder = hydra.utils.to_absolute_path(config.sessions.folder)
handler = cromlech.sessions.file.FileStore(folder, 3600)
manager = cromlech.session.SignedCookieManager(
"secret", handler, cookie="my_sid")
return cromlech.session.WSGISessionManager(
manager, environ_key=config.sessions.environ_key)
def setup_app(config, logger):
@app.listen('request_created')
def session(request):
request['session'] = request.environ[config.sessions.environ_key]
@app.listen('request_created')
def flash_messages(request):
txn = transaction.get()
dm = FlashMessageDataManager(request['session'], 'messages')
txn.join(dm)
request['flash'] = dm
# Logger
app['logger'] = logger
# MQ
mqcenter = MQCenter(config.app.mq_url, {
'test': kombu.Exchange('test', type='direct')
})
mqcenter.register_queue('test', 'info', 'default')
app['mq'] = mqcenter
# SAML
app['saml'] = hydra.utils.to_absolute_path(config.SAML.folder)
# Creating the main router
application = rutter.urlmap.URLMap(
not_found_app=horseman.response.Response.create(404)
)
application["/"] = app
return application
def setup_env(config):
if config.templates.cache:
cache_folder = pathlib.Path(hydra.utils.to_absolute_path(
config.templates.cache))
cache_folder.mkdir(mode=0o755, parents=False, exist_ok=True)
os.environ['CHAMELEON_CACHE'] = str(cache_folder)
if config.templates.debug:
os.environ['CHAMELEON_DEBUG'] = 'true'
@hydra.main(config_path="config.yaml", strict=False)
def run(config):
setup_env(config)
session = setup_session(config)
application = session(setup_app(config, logger))
# Loading Leikas
REGISTRY.load()
# Serving the app
server = config.server
host, port = server.host, server.port
logger.info(f"Server Started on http://{host}:{port}")
bjoern.run(
fanstatic.Fanstatic(application, bottom=True, compile=True),
host,
int(port),
reuse_port=True,
)
if __name__ == "__main__":
run()