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