1 from __future__ import with_statement
2
3 import os
4 import flask
5
6 from flask_sqlalchemy import SQLAlchemy
7 from flask_openid import OpenID
8 from flask_whooshee import Whooshee
9 from openid_teams.teams import TeamsResponse
10
11 from coprs.redis_session import RedisSessionInterface
12
13 app = flask.Flask(__name__)
14 if "COPRS_ENVIRON_PRODUCTION" in os.environ:
15 app.config.from_object("coprs.config.ProductionConfig")
16 elif "COPRS_ENVIRON_UNITTEST" in os.environ:
17 app.config.from_object("coprs.config.UnitTestConfig")
18 else:
19 app.config.from_object("coprs.config.DevelopmentConfig")
20 if os.environ.get("COPR_CONFIG"):
21 app.config.from_envvar("COPR_CONFIG")
22 else:
23 app.config.from_pyfile("/etc/copr/copr.conf", silent=True)
24
25 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
26
27 oid = OpenID(
28 app, app.config["OPENID_STORE"],
29 safe_roots=[],
30 extension_responses=[TeamsResponse]
31 )
32
33 db = SQLAlchemy(app)
34 whooshee = Whooshee(app)
35
36
37 import coprs.filters
38 import coprs.log
39 from coprs.log import setup_log
40 import coprs.models
41 import coprs.whoosheers
42
43 from coprs.helpers import RedisConnectionProvider
44 rcp = RedisConnectionProvider(config=app.config)
45 app.session_interface = RedisSessionInterface(rcp.get_connection())
46
47 from coprs.views import admin_ns
48 from coprs.views.admin_ns import admin_general
49 from coprs.views import api_ns
50 from coprs.views.api_ns import api_general
51 from coprs.views import coprs_ns
52 from coprs.views.coprs_ns import coprs_builds
53 from coprs.views.coprs_ns import coprs_general
54 from coprs.views.coprs_ns import coprs_chroots
55 from coprs.views.coprs_ns import coprs_packages
56 from coprs.views import backend_ns
57 from coprs.views.backend_ns import backend_general
58 from coprs.views import misc
59 from coprs.views import status_ns
60 from coprs.views.status_ns import status_general
61 from coprs.views import recent_ns
62 from coprs.views.recent_ns import recent_general
63 from coprs.views.stats_ns import stats_receiver
64 from coprs.views import tmp_ns
65 from coprs.views.tmp_ns import tmp_general
66 from coprs.views.groups_ns import groups_ns
67 from coprs.views.groups_ns import groups_general
68 from coprs.views.webhooks_ns import webhooks_ns
69 from coprs.views.webhooks_ns import webhooks_general
70
71
72 from .context_processors import include_banner, inject_fedmenu
73
74 setup_log()
75
76 app.register_blueprint(api_ns.api_ns)
77 app.register_blueprint(admin_ns.admin_ns)
78 app.register_blueprint(coprs_ns.coprs_ns)
79 app.register_blueprint(misc.misc)
80 app.register_blueprint(backend_ns.backend_ns)
81 app.register_blueprint(status_ns.status_ns)
82 app.register_blueprint(recent_ns.recent_ns)
83 app.register_blueprint(stats_receiver.stats_rcv_ns)
84 app.register_blueprint(tmp_ns.tmp_ns)
85 app.register_blueprint(groups_ns)
86 app.register_blueprint(webhooks_ns)
87
88 app.add_url_rule("/", "coprs_ns.coprs_show", coprs_general.coprs_show)
89
90 app.jinja_env.trim_blocks = True
91 app.jinja_env.lstrip_blocks = True
92
93 from coprs.rest_api import rest_api_bp, register_api_error_handler, URL_PREFIX
94 register_api_error_handler(app)
95 app.register_blueprint(rest_api_bp, url_prefix=URL_PREFIX)
96
97
98 from flask_sqlalchemy import models_committed
99 models_committed.connect(coprs.whoosheers.CoprWhoosheer.on_commit, sender=app)
100
101
102
103 @app.route('/system_static/<component>/<path:filename>')
104 @app.route('/system_static/<path:filename>')
105 -def system_static(filename, component=""):
106 """
107 :param component: name of the javascript component provided by a RPM package
108 do not confuse with a name of the RPM package itself
109 (e.g. 'jquery' component is provided by 'js-jquery1' package)
110 :param filename: path to a file relative to the component root directory
111 :return: content of a static file
112 """
113 path = os.path.join("/usr/share/javascript", component)
114 return flask.send_from_directory(path, filename)
115