console/SWSCloudWeb/application.py

133 lines
4 KiB
Python
Raw Normal View History

2016-05-10 02:42:07 +03:00
# coding: utf-8
import logging
2016-10-20 04:30:25 +03:00
import os
2016-06-12 01:33:23 +03:00
from flask import Flask, g, render_template
2016-05-10 02:42:07 +03:00
from flask_babel import Babel
from flaskext.markdown import Markdown
2016-10-20 04:30:25 +03:00
from flask_multistatic import MultiStaticFlask
2016-05-10 02:42:07 +03:00
2016-10-01 12:09:52 +03:00
from SWSCloudAdministrator.Administrator import viewAdministrator
2016-05-10 02:42:07 +03:00
from SWSCloudCore import models
from SWSCloudCore.config import config
2016-06-12 01:33:23 +03:00
from SWSCloudCore.models import database
from SWSCloudServerAPI.ServerAPI import viewServerAPI
from SWSCloudWeb.views import viewHomepage
from SWSCloudWeb.views.account import viewAccount
2016-10-17 02:10:57 +03:00
from SWSCloudWeb.views.bills import viewBills
2016-10-01 12:09:52 +03:00
from SWSCloudWeb.views.compute.containers import viewContainers
from SWSCloudWeb.views.compute.vms import viewVMs
2016-06-12 01:33:23 +03:00
from SWSCloudWeb.views.payments import viewPayments
from SWSCloudWeb.views.support import viewSupport
from SWSCloudWeb.views.tasks import viewTasks
2016-05-10 02:42:07 +03:00
2016-10-20 04:30:25 +03:00
# app = Flask(__name__, static_folder='static', static_url_path='')
app = MultiStaticFlask(__name__, static_folder='static', static_url_path='')
2016-05-10 02:42:07 +03:00
# 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")
2016-10-20 04:30:25 +03:00
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)
2016-10-20 04:30:25 +03:00
# 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
2016-05-10 02:42:07 +03:00
Markdown(app)
babel = Babel(app)
# /
app.register_blueprint(viewHomepage)
app.register_blueprint(viewSupport)
# /tasks
app.register_blueprint(viewTasks)
2016-10-17 02:10:57 +03:00
# /compute
2016-05-10 02:42:07 +03:00
app.register_blueprint(viewContainers)
2016-05-16 09:24:27 +03:00
app.register_blueprint(viewVMs)
2016-05-10 02:42:07 +03:00
# /id
app.register_blueprint(viewAccount)
2016-10-17 02:10:57 +03:00
# /billing
app.register_blueprint(viewBills)
2016-05-10 02:42:07 +03:00
# /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)
2016-05-10 02:42:07 +03:00
return render_template('errors/500.html'), 500
@app.before_request
def before_request():
g.settings = dict()
try:
# извлекаем настройки и определяем их в глобальную переменную
for setting in models.Settings.select(models.Settings.key, models.Settings.val).execute():
g.settings[setting.key] = setting.val
except Exception as e:
logging.error(e)
# exit(1)
@app.before_first_request
def before_first_request():
2016-05-10 02:42:07 +03:00
try:
database.connect()
except Exception as e:
app.logger.error(e)
2016-05-10 02:42:07 +03:00
# 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
2016-05-10 02:42:07 +03:00
return response
2016-06-14 08:05:05 +03:00
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)