dyno/app/__init__.py (30 lines of code) (raw):
# -*- coding: utf-8 -*-
# Licensed to Elasticsearch B.V. under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Elasticsearch B.V. licenses this file to you under
# the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
"""
Application setup and initlization
"""
import os
from flask import Flask, render_template
from flask_socketio import SocketIO
from flask_cors import CORS
from werkzeug.utils import import_string
from . import cfg
def _env_init(app_env):
"""
Select the proper configuration class from the `cfg` module and return it
for use in application initlization.
Note
----
This function has the side effect of printing to the console in some cases.
Parameters
----------
app_env : str
An application environment to run in. Must be either `test`, `dev` or `prod`.
Otherwise, an exception will be thrown.
Returns
-------
obj
An object suitable for use in configuring Flask. Typically used with Flask().config.from_object()
Raises
------
Exception
If the type of environment is not recognized, an exception of type Exception will be raised.
Examples
--------
Create a Flask object and give it a configuration
>>> app = Flask(__name__)
>>> config_class = _env_init(app_env)
>>> app.config.from_object(config_class)
"""
if app_env == 'test':
print('\n\n\033[1;33;40m ** Starting with test configuration ** \033[m \n\n')
return import_string('dyno.app.cfg.TestingConfig')()
elif app_env == 'dev':
print('\n\n\033[1;33;40m ** Starting with development configuration ** \033[m \n\n')
return import_string('dyno.app.cfg.DevelopmentConfig')()
elif app_env == 'prod':
return import_string('dyno.app.cfg.ProductionConfig')()
else:
raise Exception('Must specify valid app_env when calling create_app()')
def create_app(app_env='prod'):
"""
This the main entrypoint for the Flask application.
Parameters
----------
app_env : str
An application environment to run in. Must be either `test`, `dev` or `prod`.
Returns
-------
obj
A initialized Flask application
"""
config_class = _env_init(app_env)
app = Flask(__name__)
app.config.from_object(config_class)
CORS(app)
from .api import bp as api_bp # noqa E402
app.register_blueprint(api_bp, url_prefix=app.config['API_PREFIX'])
return app
app = create_app()
socketio = SocketIO(app, cors_allowed_origins=app.config['CORS_ORIGINS'])
@app.route('/log')
def index():
return render_template("index.html")