console/SWSCloudWeb/application.py
2016-10-20 04:30:25 +03:00

129 lines
3.9 KiB
Python

# coding: utf-8
import os
from flask import Flask, g, render_template
from flask_babel import Babel
from flaskext.markdown import Markdown
from flask_multistatic import MultiStaticFlask
from SWSCloudAdministrator.Administrator import viewAdministrator
from SWSCloudCore import models
from SWSCloudCore.config import config
from SWSCloudCore.models import database
from SWSCloudServerAPI.ServerAPI import viewServerAPI
from SWSCloudWeb.views import viewHomepage
from SWSCloudWeb.views.account import viewAccount
from SWSCloudWeb.views.bills import viewBills
from SWSCloudWeb.views.compute.containers import viewContainers
from SWSCloudWeb.views.compute.vms import viewVMs
from SWSCloudWeb.views.payments import viewPayments
from SWSCloudWeb.views.support import viewSupport
from SWSCloudWeb.views.tasks import viewTasks
# app = Flask(__name__, static_folder='static', static_url_path='')
app = MultiStaticFlask(__name__, static_folder='static', static_url_path='')
# app.config['SERVER_NAME'] = settings.get('Application', 'SERVER_NAME')
app.config['DEBUG'] = config.getboolean('Application', 'DEBUG')
app.config['SECRET_KEY'] = config.get("Application", "SECRET_KEY")
if app.config.get('THEME_TEMPLATE_FOLDER', False):
# Jinja can be told to look for templates in different folders
# That's what we do here
template_folder = app.config['THEME_TEMPLATE_FOLDER']
if template_folder[0] != '/':
template_folder = os.path.join(app.root_path, app.template_folder, template_folder)
import jinja2
# Jinja looks for the template in the order of the folders specified
templ_loaders = [jinja2.FileSystemLoader(template_folder), app.jinja_loader]
app.jinja_loader = jinja2.ChoiceLoader(templ_loaders)
if app.config.get('THEME_STATIC_FOLDER', False):
static_folder = app.config['THEME_STATIC_FOLDER']
if static_folder[0] != '/':
static_folder = os.path.join(app.root_path, 'static', static_folder)
print static_folder
# Unlike templates, to serve static files from multiples folders we
# need flask-multistatic
# app.static_folder = [static_folder, os.path.join(app.root_path, 'static')]
app.static_folder = static_folder
Markdown(app)
babel = Babel(app)
# /
app.register_blueprint(viewHomepage)
app.register_blueprint(viewSupport)
# /tasks
app.register_blueprint(viewTasks)
# /compute
app.register_blueprint(viewContainers)
app.register_blueprint(viewVMs)
# /id
app.register_blueprint(viewAccount)
# /billing
app.register_blueprint(viewBills)
# /payments
app.register_blueprint(viewPayments)
# /api
app.register_blueprint(viewServerAPI)
# /administrator
app.register_blueprint(viewAdministrator)
@app.errorhandler(404)
def page_not_found(e):
return render_template('errors/404.html'), 404
@app.errorhandler(403)
def page_not_found(e):
return render_template('errors/403.html'), 403
@app.errorhandler(410)
def page_not_found(e):
return render_template('errors/410.html'), 410
@app.errorhandler(500)
def page_not_found(e):
print e
return render_template('errors/500.html'), 500
@app.before_request
def before_request():
g.settings = dict()
# извлекаем настройки и определяем их в глобальную переменную
for setting in models.Settings.select(models.Settings.key, models.Settings.val).execute():
g.settings[setting.key] = setting.val
@app.before_first_request
def before_first_request():
try:
database.connect()
except Exception as e:
app.logger.error(e)
# TODO: code to email alert
# g.endpoint = request.endpoint.replace('.', '/')
return render_template('errors/500.html'), 500
@app.after_request
def after_request(response):
# app.logger.debug("db.close")
# try:
# database.close()
# except Exception as e:
# app.logger.error(e)
# TODO: code to email alert
# pass
return response
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)