Ejemplo n.º 1
0
def create_app(config=None):

    if config is not None:
        app.config.from_object(config)

    db.init_app(app)

    @app.route('/')
    def index():
        return "Hello World!"

    # import internal resources
    from Users.user_login import user_page
    app.register_blueprint(user_page)

    # init api and routes
    api = Api(app=app)
    routes_manage.routes_creator(api=api)

    return app
Ejemplo n.º 2
0
def create_application():
    if os.environ.get("SENTRY_DSN"):
        sentry_sdk.init(dsn=os.environ["SENTRY_DSN"],
                        integrations=[FlaskIntegration()])

    static_folder = os.path.join("..", "static")
    template_folder = os.path.join("..", "templates")

    application = Flask(__name__,
                        static_folder=static_folder,
                        template_folder=template_folder)
    try:
        application.config.update(
            DEBUG=os.environ.get("FLASK_DEBUG", False),
            SECRET_KEY=os.environ.get("FLASK_SECRET_KEY", ""),
            CACHE_DEFAULT_TIMEOUT=600,
            CACHE_DIR=".cache",
            CACHE_TYPE="FileSystemCache",
            CACHE_THRESHOLD=1000,
            MONGODB_HOST=os.environ["MONGO_HOST"],
            SESSION_COOKIE_SECURE=not os.environ.get("FLASK_DEBUG", False),
            SESSION_COOKIE_HTTPONLY=True,
            SESSION_COOKIE_SAMESITE="Strict",
            JWT_REFRESH_TOKEN_EXPIRES=False,
        )
    except KeyError as e:
        logger.error(
            "Bad configuration, some environment variables are not set",
            arg=e.args[0])
        sys.exit(2)

    cache.init_app(application)
    db.init_app(application)
    cors.init_app(application,
                  supports_credentials=True,
                  origins=os.environ.get("FRONTEND_DOMAIN", "*"))
    jwt.init_app(application)
    oid.init_app(application)
    return application
Ejemplo n.º 3
0
from flask_login import login_user
from flask_login import logout_user
from flask_login import login_required
from flask_login import current_user

from models import User
from models import File

from flask_uploads import configure_uploads
from init import photos

app = Flask(__name__)
app.config.from_pyfile('config.py')

db.init_app(app)
login_manager.init_app(app)
csrf = CSRFProtect(app)

# initialise the uploadset
# configure the uploadset
# define upload folder and allowed file types

configure_uploads(app, photos)


@login_manager.user_loader
def load_user(id):
    return User.query.get(id)

Ejemplo n.º 4
0
def create_app(config_name):

    app = Flask(__name__, instance_relative_config=True)
    configuration = app_config[config_name]
    app.config.from_object(configuration)

    if config_name != "testing":
        # load the instance config, if it exists, when not testing
        app.config.from_pyfile("config.py", silent=True)

    # create empty instance folder and empty config if not present
    try:
        os.makedirs(app.instance_path)
        with open(os.path.join(app.instance_path, "config.py"), "a"):
            pass
    except OSError:
        pass

    migrate.init_app(app, db)
    db.init_app(app)
    ma.init_app(app)
    mail.init_app(app)
    login_manager.init_app(app)
    csrf = CSRFProtect(app)  # noqa

    admin = Admin(
        app,
        name="My App",
        template_mode="bootstrap4",
        index_view=MyAdminIndexView(),
    )
    admin.add_view(DefaultModelView(Settings, db.session))
    admin.add_view(DefaultModelView(Path, db.session))
    admin.add_view(DefaultModelView(Section, db.session))
    admin.add_view(DefaultModelView(Link, db.session))
    admin.add_link(
        MenuLink(name="Logout", category="", url="/auth/logout?next=/admin"))

    #
    # dev static
    #

    @app.route("/devstatic/<path:boxormodule>/f/<path:filename>")
    def devstatic(boxormodule, filename):
        if app.config["DEBUG"]:
            module_static = os.path.join(modules_path, boxormodule, "static")
            return send_from_directory(module_static, filename=filename)

    available_everywhere_entities = {}

    #
    # load blueprints
    #
    for folder in os.listdir(os.path.join(base_path, "modules")):
        if folder.startswith("__"):  # ignore __pycache__
            continue

        if folder.startswith("box__"):
            # boxes
            for sub_folder in os.listdir(
                    os.path.join(base_path, "modules", folder)):
                if sub_folder.startswith("__"):  # ignore __pycache__
                    continue
                elif sub_folder.endswith(".json"):  # box_info.json
                    continue
                try:
                    sys_mod = importlib.import_module(
                        "modules.{}.{}.view".format(folder, sub_folder))
                    app.register_blueprint(
                        getattr(sys_mod, "{}_blueprint".format(sub_folder)))
                except AttributeError as e:
                    print(
                        " x Blueprint skipped:",
                        "modules.{}.{}.view".format(folder, sub_folder,
                                                    folder),
                    )
                try:
                    mod_global = importlib.import_module(
                        "modules.{}.{}.global".format(folder, sub_folder))
                    available_everywhere_entities.update(
                        mod_global.available_everywhere)
                except ImportError:
                    pass

        else:
            # apps
            try:
                mod = importlib.import_module("modules.{}.view".format(folder))
                app.register_blueprint(
                    getattr(mod, "{}_blueprint".format(folder)))
            except AttributeError as e:
                print("[ ] Blueprint skipped:", e)
            try:
                mod_global = importlib.import_module(
                    "modules.{}.global".format(folder))
                available_everywhere_entities.update(
                    mod_global.available_everywhere)
            except ImportError as e:
                # print(e)
                pass

    #
    # custom templates folder
    #
    with app.app_context():
        front_theme_dir = os.path.join(app.config["BASE_DIR"], "static",
                                       "themes", "front")
        back_theme_dir = os.path.join(app.config["BASE_DIR"], "static",
                                      "themes", "back")
        my_loader = jinja2.ChoiceLoader([
            app.jinja_loader,
            jinja2.FileSystemLoader([front_theme_dir, back_theme_dir]),
        ])
        app.jinja_loader = my_loader

    #
    # global vars
    #
    @app.context_processor
    def inject_global_vars():
        APP_NAME = get_setting("APP_NAME")

        base_context = {
            "APP_NAME": APP_NAME,
            "len": len,
            "current_user": current_user,
        }
        base_context.update(available_everywhere_entities)

        return base_context

    # end of func
    return app