Source code for kwalitee.factory

# -*- coding: utf-8 -*-
#
# This file is part of kwalitee
# Copyright (C) 2014, 2015 CERN.
#
# kwalitee is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# kwalitee is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with kwalitee; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
#
# In applying this licence, CERN does not waive the privileges and immunities
# granted to it by virtue of its status as an Intergovernmental Organization
# or submit itself to any jurisdiction.

"""kwalitee factory for Flask application."""


from __future__ import unicode_literals

import os

from flask import Flask, Config
from flask_sqlalchemy import SQLAlchemy
from werkzeug.routing import BaseConverter

[docs]class ShaConverter(BaseConverter): """Werkzeug routing converter for sha-1 (truncated or full).""" regex = r'(?!/)(?:[a-fA-F0-9]{40}|[a-fA-F0-9]{7})' weight = 150
[docs]def create_app(name=None, config=None): """Create the Flask application.""" name = 'kwalitee' if name is None else name app = Flask(name, template_folder="templates", static_folder="static", instance_relative_config=True, instance_path=os.environ.get("KWALITEE_INSTANCE_PATH")) # Load default configuration app.config.from_object("kwalitee.config") # Load kwalitee.cfg from instance folder app.config.from_pyfile("kwalitee.cfg", silent=True) app.config.from_envvar("KWALITEE_CONFIG", silent=True) app.config.update(config or {}) # Create instance path if not os.path.exists(app.instance_path): os.makedirs(app.instance_path) # Setting up the database from .import models models.init_app(app) # Setting up RQ from . import worker worker.init_app(app) # Setting up the views app.url_map.converters['sha'] = ShaConverter from . import views app.add_url_rule("/", "index", views.index, methods=["GET"]) app.add_url_rule("/<account>/", "account", views.account, methods=["GET"]) app.add_url_rule("/<account>/<repository>/", "repository", views.repository, methods=["GET"]) app.add_url_rule("/<account>/<repository>/commits/<sha:sha>/", "commit", views.commit, methods=["GET"]) app.add_url_rule("/<account>/<repository>/branches/<sha:sha>/<path:branch>", "branch_status", views.branch_status, methods=["GET"]) app.add_url_rule("/<account>/<repository>/branches/<path:branch>", "branch", views.branch, methods=["GET"]) app.add_url_rule("/payload", "payload", views.payload, methods=["POST"]) # legacy app.add_url_rule("/status/<sha>", "status", views.status, methods=["GET"]) if app.debug: from werkzeug.debug import DebuggedApplication app.wsgi_app = DebuggedApplication(app.wsgi_app, evalex=True) return app