示例#1
0
文件: __init__.py 项目: via-ya/apizen
def create_app(app_config=None):

    app = Flask(__name__)

    # 读取配置文件
    if app_config is None:
        env = Environments(app, var_name='env', default_env='None')
        env.from_object('app.config')
    else:
        app.config.from_object(configs[app_config])

    # 蓝图注册
    register_blueprints(app)
    # 扩展注册
    register_extensions(app)

    # 自定义日期格式,待修改
    datetime_format = app.config.get('APIZEN_DATETIME_FMT',
                                     '%Y/%m/%d %H:%M:%S')
    CustomJSONEncoder.datetime_format = datetime_format
    app.json_encoder = CustomJSONEncoder

    @app.route('/', methods=['GET'])
    def index():
        return '<h1>请直接调用接口</h1>'

    return app
示例#2
0
def make_env(app):
    # environment-based configuration loading
    env = Environments(app, var_name="BEAVY_ENV")

    env.from_yaml(os.path.join(BASE_DIR, 'config.yml'))
    # env.from_yaml(os.path.join(os.getcwd(), 'config.yml'))
    with open(os.path.join(os.getcwd(), 'config.yml'), "r") as r:
        deepmerge(app.config, yaml.load(r))

    # allow for environment variables to update items
    if os.environ.get("BEAVY_CONFIG_FROM_ENV", False):
        app.config.update(os.environ)

        if "DATABASE_URL" in os.environ:
            app.config["SQLALCHEMY_DATABASE_URI"] = os.environ["DATABASE_URL"]
        if "RABBITMQ_URL" in os.environ:
            app.config["CELERY_BROKER_URL"] = os.environ["RABBITMQ_URL"]
        if "REDIS_URL" in os.environ:
            app.config["RATELIMIT_STORAGE_URL"] = os.environ["REDIS_URL"]
            app.config["CACHE_REDIS_URL"] = os.environ["REDIS_URL"]

    # update social buttons
    _FLBLPRE = "flask_social_blueprint.providers.{}"
    if "SOCIAL_BLUEPRINT" not in app.config:
        app.config["SOCIAL_BLUEPRINT"] = dict([
            ("." in name and name or _FLBLPRE.format(name), values)
            for name, values in app.config.get("SOCIAL_LOGINS").items()
        ])

    return env
示例#3
0
def create_app(config_name):
    app = Flask(__name__)
    env = Environments(app, default_env=config_name)
    app.config.from_object(env.from_yaml('config.yml'))

    certfile = app.config['OAUTH_CERTIFICATE_PATH']
    with open(certfile, 'r') as contents:
        key_contents = contents.read()
    key = RSA.importKey(key_contents)
    app.oauth_certificate = key.publickey().exportKey()

    bootstrap.init_app(app)
    db.init_app(app)
    mail.init_app(app)

    if not app.debug and not app.testing and not app.config['SSL_DISABLE']:
        from flask_sslify import SSLify
        sslify = SSLify(app)

    @app.errorhandler(InvalidUsage)
    def handle_invalid_usage(error):
        response = jsonify(error.to_dict())
        response.status_code = error.status_code
        return response

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint, url_prefix='/auth')

    from .api_1_0 import api as api_1_0_blueprint
    app.register_blueprint(api_1_0_blueprint, url_prefix='/api/v1.0')

    return app
示例#4
0
def create_app(package_name,
               package_path,
               settings_override=None,
               settings='settings.yaml'):
    """
    Create a L{flask.Flask} application with common configuration applied.

    @param package_name: application package name.
    @param package_path: package path to search for blueprints.
    @param settings: the settings per environment in YAML.
    @param settings_override: a dictionary of settings to override.
    @return: the Flask application; never C{None}.
    """

    app = Flask(package_name, instance_relative_config=True)

    env = Environments(app)
    env.from_yaml(os.path.join(os.getcwd(), '', settings))
    app.config.from_object(settings_override)

    logging.basicConfig(level=logging.DEBUG)

    register_blueprints(app, package_name, package_path)

    return app
示例#5
0
def create_app(config_name):
    app = Flask(__name__)
    env = Environments(app, default_env=config_name)
    env.from_yaml(os.path.join(basedir, 'config.yml'))
    celery.conf.update(BROKER_URL=app.config['REDIS_URL'],
                       CELERY_RESULT_BACKEND=app.config['REDIS_URL'])

    #Adding logging capabilities.
    if app.config['LOGGING'] == True:
        import logging
        logger = logging.getLogger('replicate')
        logger.setLevel(logging.DEBUG)

        log_directory = basedir + app.config['LOG_FILE_PTAH']
        log_filename = log_directory + app.config['LOG_FILE']
        if not os.path.exists(os.path.dirname(log_filename)):
            os.makedirs(os.path.dirname(log_filename))
        file_handler = logging.FileHandler(log_filename, mode='a+')

        stream_handler = logging.StreamHandler()
        formatter = logging.Formatter(
            '%(asctime)s - %(process)d - %(name)s - %(module)s:%(lineno)d - %(levelname)s - %(message)s'
        )
        file_handler.setFormatter(formatter)
        stream_handler.setFormatter(formatter)
        app.logger.addHandler(file_handler)
        #app.logger.addHandler(stream_handler)
        app.logger.setLevel(logging.DEBUG)
        app.logger.info('Application Process Started')

    #SSL
    if not app.debug and not app.testing and app.config['SSL_DISABLE']:
        from flask.ext.sslify import SSLify
        sslify = SSLify(app)

    # handle proxy server headers
    from werkzeug.contrib.fixers import ProxyFix
    app.wsgi_app = ProxyFix(app.wsgi_app)

    db.init_app(app)
    login_manager.init_app(app)
    cache.init_app(app)
    csrf.init_app(app)
    redis_store.init_app(app)

    from ooiservices.app.main import api as main_blueprint
    app.register_blueprint(main_blueprint)

    from ooiservices.app.uframe import uframe as uframe_blueprint
    app.register_blueprint(uframe_blueprint, url_prefix='/uframe')

    from ooiservices.app.redmine import redmine as redmine_blueprint
    app.register_blueprint(redmine_blueprint, url_prefix='/redmine')

    return app
示例#6
0
def make_env(app):
    # environment-based configuration loading
    env = Environments(app, var_name="BEAVY_ENV")

    env.from_yaml(os.path.join(BASE_DIR, 'config.yml'))
    env.from_yaml(os.path.join(os.getcwd(), 'config.yml'))

    # update social buttons
    _FLBLPRE = "flask_social_blueprint.providers.{}"
    if not "SOCIAL_BLUEPRINT" in app.config:
        app.config["SOCIAL_BLUEPRINT"] = dict([
            ("." in name and name or _FLBLPRE.format(name), values)
            for name, values in app.config.get("SOCIAL_LOGINS").items()
        ])

    return env
示例#7
0
    def __init__(self):
        super(Main, self).__init__(
            __name__,
            static_url_path='/res',
            static_folder='../webapp/resources',
            template_folder='templates')

        # Runtime environment (e.g., export FLASK_ENV=PRODUCTION)
        # https://pythonhosted.org/Flask-Environments
        env = Environments(self)
        env.from_yaml(os.path.join(os.getcwd(), 'config/config.yml'))

        # Config logging.
        # https://docs.python.org/2/howto/logging.html
        logging.config.dictConfig(yaml.load(open(self.config['LOG_CONFIG'])))

        # Jinja2 templates.
        # http://jinja.pocoo.org/docs/dev/api
        # http://flask.pocoo.org/docs/0.10/api/#flask.Flask.jinja_options
        self.jinja_options = flask.Flask.jinja_options.copy()
        self.jinja_options.update(dict(
            trim_blocks=True,
            lstrip_blocks=True
        ))

        # http://pythonhosted.org/Flask-Session
        # http://flask.pocoo.org/docs/0.10/quickstart/#sessions
        self.session = Session(self)

        # Enable injection within this class.
        # https://github.com/alecthomas/injector
        injector = Injector()
        injector.install_into(self)

        # Flask injection.
        # NOTE: Order of modules is important.
        LOG.info('### %s ###' % self.config['ENVIORNMENT'])
        FlaskInjector(app=self, injector=injector, modules=[
            ConfigModule,
            OAuthConfigModule,
            TwitterModule,
            ViewModule,
            OAuthRouterModule
        ])
示例#8
0
def create_app():
    """
    This method create the Flask application.
    :return: Flask App Object
    """
    global app
    global login

    app = Flask(__name__, instance_relative_config=True)

    flask_env = os.getenv('FLASK_ENV', 'None')
    if flask_env == 'development':
        config_object = 'config.DevConfig'
    elif flask_env == 'testing':
        config_object = 'config.TestConfig'
    elif flask_env == 'production':
        config_object = 'config.ProdConfig'
    else:
        raise RuntimeError(
            "%s is not recognized as valid app environment. You have to setup the environment!"
            % flask_env)

    # Load config
    env = Environments(app)
    env.from_object(config_object)

    # Configuring redis
    create_redis(app)

    register_extensions(app)
    register_blueprints(app)
    register_handlers(app)

    # loading login manager
    import gooutsafe.auth.login_manager as lm
    login = lm.init_login_manager(app)

    if flask_env == 'testing' or flask_env == 'development':
        register_test_blueprints(app)

    return app
示例#9
0
def create_app_api():
    app = Flask(SERVICE_NAME)

    config_env = Environments(app, default_env="DEVELOPMENT")
    config_env.from_object('config')

    config_redis_ipport = app.config["CONFIG_REDIS_IPPORT"]
    config_redis_password = app.config["CONFIG_REDIS_PWD"]
    app.config[
        'REDIS_URL'] = "redis://:" + config_redis_password + "@" + config_redis_ipport + "/7"
    redisService.init_app(app)
    api_plus = Api(app,
                   version="v1.0.0",
                   title=SERVICE_NAME,
                   prefix=APP_URL_PREFIX)

    # 首先打开(或创建)一个scheduler.lock文件,并加上非阻塞互斥锁。成功后创建scheduler并启动。
    f = open("scheduler.lock", "wb")
    try:
        fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
        scheduler = APScheduler()
        scheduler.init_app(app)
        scheduler.start()
    except:
        # 如果加文件锁失败,说明scheduler已经创建,就略过创建scheduler的部分。
        pass

    # 最后注册一个退出事件,如果这个flask项目退出,则解锁并关闭scheduler.lock文件的锁。
    def unlock():
        fcntl.flock(f, fcntl.LOCK_UN)
        f.close()

    atexit.register(unlock)

    BASIC_URL_PREFIX = "/basic"  # stellar基础接口(用户、区块浏览器等相关)
    api_plus.add_namespace(basic_ns, BASIC_URL_PREFIX)

    return app, api_plus
def create_app():
    """
    This method create the Flask application.
    :return: Flask App Object
    """
    global db
    global app
    global api_app
    global celery

    # first initialize the logger
    init_logger()

    api_app = connexion.FlaskApp(
        __name__,
        server='flask'
    )

    # getting the flask app
    app = api_app.app

    flask_env = os.getenv('FLASK_ENV', 'None')
    if flask_env == 'development':
        config_object = 'config.DevConfig'
    elif flask_env == 'testing':
        config_object = 'config.TestConfig'
    elif flask_env == 'production':
        config_object = 'config.ProdConfig'
    else:
        raise RuntimeError(
            "%s is not recognized as valid app environment. You have to setup the environment!" % flask_env)

    # Load config
    env = Environments(app)
    env.from_object(config_object)

    # creating celery
    celery = make_celery(app)

    # loading communications
    import gooutsafe.comm as comm

    #if flask_env != 'testing':
    comm.init_rabbit_mq()
    """else:
        comm.disabled = True"""

    if flask_env != 'production':
        # disable communication for testing purposes
        comm.disabled = True
    else:
        comm.init_rabbit_mq()

    
    db = MongoEngine(
        app=app
    )

    # requiring the list of models
    import gooutsafe.models

    # registering to api app all specifications
    register_specifications(api_app)

    return app
示例#11
0
from flask_environments import Environments

from app.css_assets import non_admin_css_files, admin_css_files, gallery_css_files
from app.js_assets import non_admin_js_files, admin_js_files, gallery_js_files

# Create app
GisApp = Flask(__name__)
Bootstrap(GisApp)
# for using jQuery 2 from cdn instead of jQuery 1
# (https://github.com/mbr/flask-bootstrap/blob/master/docs/faq.rst#how-can-i-use-jquery2-instead-of-jquery1)
GisApp.extensions['bootstrap']['cdns']['jquery'] = WebCDN(
    '//cdnjs.cloudflare.com/ajax/libs/jquery/2.2.1/')
# GisApp.config.from_object('config')
db = SQLAlchemy(GisApp)

env = Environments(GisApp)
env.from_object('config')

# Assets
assets = Environment(GisApp)

js = Bundle(*non_admin_js_files, filters='jsmin', output='gen/packed.js')
admin_js = Bundle(*admin_js_files,
                  filters='jsmin',
                  output='gen/admin_packed.js')
gallery_js = Bundle(*gallery_js_files,
                    filters='jsmin',
                    output='gen/gallery_packed.js')

assets.register('application_js', js)
assets.register('admin_application_js', admin_js)
示例#12
0
import logging
from logging.handlers import RotatingFileHandler
from celery import Celery
from flask import Flask
from flask_environments import Environments
from flask_mongoengine import MongoEngine
from celery.signals import before_task_publish, task_prerun, task_success, task_failure
import mongoengine
from datetime import datetime
import pytz

from config import celery_config
from db.mongo_models import task_monitor

app = Flask(__name__)
env = Environments(app)

env.from_object('config.flask_config')
basedir = os.path.abspath(
    os.path.join(os.path.dirname(__file__),
                 os.path.pardir))  # os.path.abspath(os.path.dirname(__file__))
file_handler = RotatingFileHandler(basedir + "/logs/logger_flask.log",
                                   encoding='utf-8')
formatter = logging.Formatter("%(asctime)s\t%(levelname)s\t%(message)s")
file_handler.setFormatter(formatter)

# 初始化mongodb
monogo_conn = MongoEngine()
monogo_conn.init_app(app)

flask_celery = Celery(app.name, broker=celery_config.CELERY_BROKER_URL)
示例#13
0
# import sys
# print(os.path.dirname(__file__))
# print(os.path.dirname(os.path.abspath(__file__)))
# sys.path.append(os.path.dirname(__file__))
# sys.path.append(os.path.dirname(os.path.abspath(__file__)))
# print(sys.path)
from app import init_beas_when_app_start
from app.soda_log import init_log
from app.visualization.soda_visualization_api import base_ns
from app.common.soda_common import SDCommonJsonRet, SDResource, SDCodeMsg, SDRequestParser
from app import sodaVisualizationService

SERVICE_NAME = "soda_potentialpie_pyservice"
APP_URL_PREFIX = "/v1/api/soda"
app = Flask(SERVICE_NAME)
config_env = Environments(app,default_env="DEVELOPMENT")
config_env.from_object('config')

# 日志
init_log()

#加载配置 生产对应环境(生产/开发)的bean
init_beas_when_app_start(app)



api_plus = Api(app,version="v1.0.0",title=SERVICE_NAME,prefix=APP_URL_PREFIX)


#基础接口
BASE_URL_PREFIX = "/base"
示例#14
0
'''
app

The application context
'''
from celery import Celery
from celery.schedules import crontab
from flask import Flask, url_for, jsonify
from flask_environments import Environments
import os


celery = Celery('__main__')

app = Flask(__name__, static_folder='web/static')
env = Environments(app, default_env='DEVELOPMENT')
env.from_yaml('config.yml')
# Override config file with local version
if os.path.exists('config.local.yml'):
    env.from_yaml('config.local.yml')

celery.conf.update(broker_url=app.config['REDIS_URL'],
                   result_backend=app.config['REDIS_URL'])

TaskBase = celery.Task


class ContextTask(TaskBase):
    abstract = True

    def __call__(self, *args, **kwargs):
示例#15
0
from flask.ext import login
from flask.ext.admin.base import MenuLink, Admin, BaseView, expose
from flask.ext.admin.contrib import sqla
from wtforms import PasswordField
import os
from collections import OrderedDict
from datetime import datetime
from redis import Redis
from flask.ext.admin.contrib import rediscli

# Create app
app = Flask(__name__)

# Import the config.yml or config_local.yml file and load it into the app environment
basedir = os.path.abspath(os.path.dirname(__file__))
env = Environments(app, default_env='PRODUCTION')

if os.path.exists(os.path.join(basedir, 'config_local.yml')):
    env.from_yaml(os.path.join(basedir, 'config_local.yml'))
else:
    env.from_yaml(os.path.join(basedir, 'config.yml'))

# Setup mail functionality
mail = Mail(app)

# Create database connection object
db = SQLAlchemy(app)


# These classes are from ooi-ui-services, slightly modified
# TODO: Figure out a way to keep these classes maintained with ooi-ui-services
示例#16
0
from flask_environments import Environments
from flask_migrate import Migrate

from api.blueprints import register_blueprints as register_api_blueprints
from auth.auth import register_login_logout
from auth.blueprints import register_blueprints as register_auth_blueprints
from common.errors import init_error_handlers
from common.resources import Api
from common.schemas import marshmallow
from database import models  # noqa ## so alembic is aware of all the models
from database import db
from database.db import setup_pg_extensions

api = Api()
cors = CORS(resources={r"/*": {"origins": "*"}})
env = Environments()
migrate = Migrate(compare_type=True)
oauth = OAuth()


def init_plugins(app):
    """Initialise plugins that need to run BEFORE app context is activated
    Args:
        app: flask app with no activated context
    """
    from database import models  # noqa

    env.init_app(app)
    api.init_app(app)
    marshmallow.init_app(app)
    cors.init_app(app)
示例#17
0
import osmapi
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask_bootstrap import Bootstrap
from flask_environments import Environments

# Create app
GisGeneratorApp = Flask(__name__)
Bootstrap(GisGeneratorApp)

# GisApp.config.from_object('config')
db = SQLAlchemy(GisGeneratorApp)

env = Environments(GisGeneratorApp)
env.from_object('config')

# Load Routes
from app import routes

# configure OSM Api
GisGeneratorApp.osmApiClient = osmapi.OsmApi(
    api=GisGeneratorApp.config['OSMAPI_CONFIG']['domain'],
    username=GisGeneratorApp.config['OSMAPI_CONFIG']['username'],
    password=GisGeneratorApp.config['OSMAPI_CONFIG']['password']
)
def create_app():
    """
    This method create the Flask application.
    :return: Flask App Object
    """
    global db
    global app
    global migrate
    global login
    global celery

    app = Flask(__name__, instance_relative_config=True)

    flask_env = os.getenv('FLASK_ENV', 'None')
    if flask_env == 'development':
        config_object = 'config.DevConfig'
    elif flask_env == 'testing':
        config_object = 'config.TestConfig'
    elif flask_env == 'production':
        config_object = 'config.ProdConfig'
    else:
        raise RuntimeError(
            "%s is not recognized as valid app environment. You have to setup the environment!" % flask_env)

    # Load config
    env = Environments(app)
    env.from_object(config_object)

    # registering db
    db = SQLAlchemy(
        app=app
    )

    # creating celery
    celery = make_celery(app)

    # requiring the list of models

    register_extensions(app)
    register_blueprints(app)
    register_handlers(app)

    # loading login manager
    import gooutsafe.auth as auth
    login = auth.init_login_manager(app)

    # creating migrate
    migrate = Migrate(
        app=app,
        db=db
    )

    # checking the environment
    if flask_env == 'testing':
        # we need to populate the db
        db.create_all()

    if flask_env == 'testing' or flask_env == 'development':
        register_test_blueprints(app)

    return app
示例#19
0
def create_app():
    """
    This method create the Flask application.
    :return: Flask App Object
    """
    global db
    global app
    global migrate
    global api_app

    # first initialize the logger
    init_logger()

    api_app = connexion.FlaskApp(
        __name__,
        server='flask',
        specification_dir='openapi/',
    )

    # getting the flask app
    app = api_app.app

    flask_env = os.getenv('FLASK_ENV', 'None')
    if flask_env == 'development':
        config_object = 'config.DevConfig'
    elif flask_env == 'testing':
        config_object = 'config.TestConfig'
    elif flask_env == 'production':
        config_object = 'config.ProdConfig'
    else:
        raise RuntimeError(
            "%s is not recognized as valid app environment. You have to setup the environment!" % flask_env)

    # Load config
    env = Environments(app)
    env.from_object(config_object)

    # creating redis instance
    create_redis(app)

    # loading communications
    import gooutsafe.comm as comm

    if flask_env != 'production':
        # disable communication for testing purposes
        comm.disabled = True
    else:
        comm.init_rabbit_mq(app)

    # registering db
    db = SQLAlchemy(
        app=app
    )

    # requiring the list of models
    import gooutsafe.models

    # creating migrate
    migrate = Migrate(
        app=app,
        db=db
    )

    # checking the environment
    if flask_env == 'testing':
        # we need to populate the db
        db.create_all()

    # registering to api app all specifications
    register_specifications(api_app)

    return app
示例#20
0
from flask import Flask, render_template
from flask_environments import Environments

app = Flask(__name__)

# Recuperation des données de paramétrages de l'application
# Shell variable creation  :  $ export FLASK_ENV="DevelopmentConfig"
# TODO : [MODERNISATION] utilisation d'un fichier YAML

env = Environments(app, var_name='FLASK_ENV', default_env='TestConfig')
env.from_object('config')

from app.utils import logmanager
示例#21
0
def create_app(broker_start=False, log_level=logging.ERROR):
    """
    This method create the Flask application.
    :return: Flask App Object
    """
    global db
    global app
    global migrate
    global login

    api_app = connexion.App(__name__,
                            server='flask',
                            specification_dir='openapi/')

    # getting the flask app
    app = api_app.app

    flask_env = os.getenv('FLASK_ENV', 'None')
    if flask_env == 'development':
        config_object = 'config.DevConfig'
    elif flask_env == 'testing':
        config_object = 'config.TestConfig'
    elif flask_env == 'production':
        config_object = 'config.ProdConfig'
    else:
        raise RuntimeError(
            "%s is not recognized as valid app environment. You have to setup the environment!"
            % flask_env)

    # Load config
    env = Environments(app)
    env.from_object(config_object)

    # configuring logging
    logging.basicConfig(level=log_level)

    # loading communications
    import gooutsafe.comm as comm

    if broker_start:
        if flask_env != 'testing':
            comm.init_rabbit_mq(app)
        else:
            comm.disabled = True

    # registering db
    db = SQLAlchemy(app=app)

    # importing models
    try:
        import gooutsafe.models.reservation
    except ImportError:
        raise RuntimeError('Cannot import the models!')

    # creating migrate
    migrate = Migrate(app=app, db=db)

    # checking the environment
    if flask_env == 'testing':
        # we need to populate the db
        db.create_all()

    # registering to api app all specifications
    register_specifications(api_app)

    return app