Package coprs
[hide private]
[frames] | no frames]

Source Code for Package coprs

  1  from __future__ import with_statement 
  2   
  3  import os 
  4  import flask 
  5   
  6  from flask_sqlalchemy import SQLAlchemy 
  7  from contextlib import contextmanager 
  8  from flask_openid import OpenID 
  9  from flask_whooshee import Whooshee 
 10  from openid_teams.teams import TeamsResponse 
 11   
 12  from coprs.redis_session import RedisSessionInterface 
 13   
 14  app = flask.Flask(__name__) 
 15  if "COPRS_ENVIRON_PRODUCTION" in os.environ: 
 16      app.config.from_object("coprs.config.ProductionConfig") 
 17  elif "COPRS_ENVIRON_UNITTEST" in os.environ: 
 18      app.config.from_object("coprs.config.UnitTestConfig") 
 19  else: 
 20      app.config.from_object("coprs.config.DevelopmentConfig") 
 21  if os.environ.get("COPR_CONFIG"): 
 22      app.config.from_envvar("COPR_CONFIG") 
 23  else: 
 24      app.config.from_pyfile("/etc/copr/copr.conf", silent=True) 
 25   
 26  app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True 
 27   
 28  oid = OpenID( 
 29      app, app.config["OPENID_STORE"], 
 30      safe_roots=[], 
 31      extension_responses=[TeamsResponse] 
 32  ) 
 33   
 34  db = SQLAlchemy(app) 
35 36 @contextmanager 37 -def db_session_scope():
38 """Provide a transactional scope around a series of operations.""" 39 session = db.session 40 try: 41 yield session 42 session.commit() 43 except Exception as err: 44 session.rollback() 45 raise
46 47 whooshee = Whooshee(app) 48 49 50 import coprs.filters 51 import coprs.log 52 from coprs.log import setup_log 53 import coprs.models 54 import coprs.whoosheers 55 56 from coprs.helpers import RedisConnectionProvider 57 rcp = RedisConnectionProvider(config=app.config) 58 app.session_interface = RedisSessionInterface(rcp.get_connection()) 59 60 from coprs.views import admin_ns 61 from coprs.views.admin_ns import admin_general 62 from coprs.views import api_ns 63 from coprs.views.api_ns import api_general 64 from coprs.views import apiv3_ns 65 from coprs.views.apiv3_ns import (apiv3_general, apiv3_builds, apiv3_packages, apiv3_projects, apiv3_project_chroots, 66 apiv3_modules, apiv3_build_chroots, 67 apiv3_permissions) 68 from coprs.views import coprs_ns 69 from coprs.views.coprs_ns import coprs_builds 70 from coprs.views.coprs_ns import coprs_general 71 from coprs.views.coprs_ns import coprs_chroots 72 from coprs.views.coprs_ns import coprs_packages 73 from coprs.views import backend_ns 74 from coprs.views.backend_ns import backend_general 75 from coprs.views import misc 76 from coprs.views import status_ns 77 from coprs.views.status_ns import status_general 78 from coprs.views import recent_ns 79 from coprs.views.recent_ns import recent_general 80 from coprs.views.stats_ns import stats_receiver 81 from coprs.views import tmp_ns 82 from coprs.views.tmp_ns import tmp_general 83 from coprs.views.groups_ns import groups_ns 84 from coprs.views.groups_ns import groups_general 85 from coprs.views.user_ns import user_ns 86 from coprs.views.user_ns import user_general 87 from coprs.views.webhooks_ns import webhooks_ns 88 from coprs.views.webhooks_ns import webhooks_general 89 from coprs.views.rss_ns import rss_ns 90 from coprs.views.rss_ns import rss_general 91 92 from coprs.exceptions import ObjectNotFound, AccessRestricted, BadRequest, CoprHttpException, MalformedArgumentException 93 from .context_processors import include_banner, inject_fedmenu, counter_processor 94 95 setup_log() 96 97 app.register_blueprint(api_ns.api_ns) 98 app.register_blueprint(apiv3_ns.apiv3_ns) 99 app.register_blueprint(admin_ns.admin_ns) 100 app.register_blueprint(coprs_ns.coprs_ns) 101 app.register_blueprint(misc.misc) 102 app.register_blueprint(backend_ns.backend_ns) 103 app.register_blueprint(status_ns.status_ns) 104 app.register_blueprint(recent_ns.recent_ns) 105 app.register_blueprint(stats_receiver.stats_rcv_ns) 106 app.register_blueprint(tmp_ns.tmp_ns) 107 app.register_blueprint(groups_ns) 108 app.register_blueprint(user_ns) 109 app.register_blueprint(webhooks_ns) 110 app.register_blueprint(rss_ns) 111 112 app.add_url_rule("/", "coprs_ns.coprs_show", coprs_general.coprs_show)
113 114 115 -def get_error_handler():
116 # http://flask.pocoo.org/docs/1.0/blueprints/#error-handlers 117 if flask.request.path.startswith('/api_3/'): 118 return apiv3_ns.APIErrorHandler() 119 return coprs_ns.UIErrorHandler()
120
121 122 @app.errorhandler(404) 123 @app.errorhandler(ObjectNotFound) 124 -def handle_404(error):
125 error_handler = get_error_handler() 126 return error_handler.handle_404(error)
127
128 129 @app.errorhandler(403) 130 @app.errorhandler(AccessRestricted) 131 -def handle_403(error):
132 error_handler = get_error_handler() 133 return error_handler.handle_403(error)
134
135 136 @app.errorhandler(400) 137 @app.errorhandler(BadRequest) 138 @app.errorhandler(MalformedArgumentException) 139 -def handle_400(error):
140 error_handler = get_error_handler() 141 return error_handler.handle_400(error)
142
143 144 @app.errorhandler(500) 145 @app.errorhandler(CoprHttpException) 146 -def handle_500(error):
147 error_handler = get_error_handler() 148 app.logger.error(error) 149 return error_handler.handle_500(error)
150
151 152 @app.errorhandler(504) 153 -def handle_504(error):
154 error_handler = get_error_handler() 155 return error_handler.handle_504(error)
156 157 158 app.jinja_env.trim_blocks = True 159 app.jinja_env.lstrip_blocks = True 160 161 from coprs.rest_api import rest_api_bp, register_api_error_handler, URL_PREFIX 162 register_api_error_handler(app) 163 app.register_blueprint(rest_api_bp, url_prefix=URL_PREFIX) 164 # register_api(app, db) 165 166 from flask_sqlalchemy import models_committed 167 models_committed.connect(coprs.whoosheers.CoprWhoosheer.on_commit, sender=app)
168 169 # Serve static files from system-wide RPM files 170 @app.route('/system_static/<component>/<path:filename>') 171 @app.route('/system_static/<path:filename>') 172 -def system_static(filename, component=""):
173 """ 174 :param component: name of the javascript component provided by a RPM package 175 do not confuse with a name of the RPM package itself 176 (e.g. 'jquery' component is provided by 'js-jquery1' package) 177 :param filename: path to a file relative to the component root directory 178 :return: content of a static file 179 """ 180 path = os.path.join("/usr/share/javascript", component) 181 return flask.send_from_directory(path, filename)
182