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

Source Code for Package coprs

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