# coding: utf-8 import logging 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() 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(): 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)