77 lines
1.9 KiB
Python
77 lines
1.9 KiB
Python
import flask
|
|
import logging
|
|
import sys
|
|
import os
|
|
from flaskbase.extensions import db
|
|
from flaskbase.middleware import MethodRewriteMiddleware
|
|
|
|
_initializers = set()
|
|
|
|
|
|
def import_submodules(app, submodule):
|
|
ret = list()
|
|
|
|
for mod_name in app.config['ENABLED_MODULES']:
|
|
try:
|
|
# FIXME support for mod_name directing to submodule
|
|
mod = __import__('%s.%s' % (mod_name, submodule))
|
|
ret.append((mod_name, getattr(mod, submodule)))
|
|
except ImportError:
|
|
# Check if error occured right in that try clause
|
|
if sys.exc_info()[2].tb_next:
|
|
logging.warning('Import failed for %s.%s', mod_name, submodule,
|
|
exc_info=True)
|
|
|
|
return ret
|
|
|
|
|
|
def create_app(settings_object=None, settings={}):
|
|
app = flask.Flask(
|
|
__name__,
|
|
template_folder='../templates',
|
|
static_folder='../static'
|
|
)
|
|
|
|
if 'SETTINGS_MODULE' in os.environ:
|
|
app.config.from_envvar('SETTINGS_MODULE')
|
|
else:
|
|
if not settings_object:
|
|
settings_object = 'flaskbase.settings.{}'.format(
|
|
os.environ.get('ENV', 'production'))
|
|
|
|
app.config.from_object(settings_object)
|
|
|
|
app.config.update(settings)
|
|
|
|
# FIXME https://github.com/mattupstate/flask-social/issues/34
|
|
app.wsgi_app = MethodRewriteMiddleware(app.wsgi_app)
|
|
|
|
for m_name, m in import_submodules(app, 'extensions'):
|
|
m.init_app(app)
|
|
|
|
import_submodules(app, 'models')
|
|
|
|
for m_name, m in import_submodules(app, 'views'):
|
|
app.register_blueprint(
|
|
m.blueprint,
|
|
url_prefix=app.config['URLS'].get(m_name, '/' + m.blueprint.name),
|
|
)
|
|
|
|
import_submodules(app, 'admin')
|
|
|
|
for fun in _initializers:
|
|
fun(app)
|
|
|
|
logging.info('Starting...')
|
|
return app
|
|
|
|
|
|
def initializer(f):
|
|
_initializers.add(f)
|
|
|
|
return f
|
|
|
|
|
|
def init_db(app):
|
|
db.create_all()
|