2016-05-10 02:42:07 +03:00
|
|
|
# coding: utf-8
|
2024-12-10 21:05:37 +03:00
|
|
|
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)
|
2024-12-10 21:05:37 +03:00
|
|
|
# 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):
|
2024-12-10 21:05:37 +03:00
|
|
|
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()
|
2024-12-10 21:05:37 +03:00
|
|
|
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)
|
2016-06-08 02:03:13 +03:00
|
|
|
|
|
|
|
@app.before_first_request
|
|
|
|
def before_first_request():
|
2016-05-10 02:42:07 +03:00
|
|
|
try:
|
|
|
|
database.connect()
|
|
|
|
except Exception as e:
|
2016-06-08 02:03:13 +03:00
|
|
|
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")
|
2016-06-08 02:03:13 +03:00
|
|
|
# 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)
|