import os import sys from flask import Flask from flask_login import LoginManager import logging from logging.handlers import RotatingFileHandler from flask.logging import default_handler from app.models import db from app.auth.models import User from dotenv import load_dotenv app_dir = os.path.join(os.path.abspath(os.path.dirname(__file__)), '..') env_file = os.path.join(app_dir, ".flaskenv") load_dotenv(env_file, verbose=True) login_manager = LoginManager() login_manager.login_view = "auth.login" login_manager.login_message = "Veuillez vous connecter s'il vous plait" @login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id)) # TODO: move the following into create_app() # and use app.logger system # Please, set a config file on top project dir # see in ../pdc_config.py try: from pdc_config import Config, ProdConfig, DevConfig, TestConfig except ImportError: print("Please set a pdc_config.py file in you PYTHON_PATH") print("See INSTALL.md for more info") sys.exit(-1) def create_app(config_class=None): """ App Factory. can be called with configuration class as argument. """ # Configuration Switcher # try to set configuration depending on environment # if no configuration class was given # if config_class is None: flask_env = os.environ.get('FLASK_ENV') if not flask_env: flask_env = 'testing' if flask_env == 'production': config_class = ProdConfig elif flask_env == 'development': config_class = DevConfig elif flask_env == 'testing': config_class = TestConfig else: config_class = Config # Main flask app # app = Flask(__name__) app.config.from_object(config_class) # Log to stdout or to file # app.logger.removeHandler(default_handler) if app.debug or app.testing or app.config['LOG_TO_STDOUT']: log_handler = logging.StreamHandler() else: logs_file = app.config['PDC_LOGS_FILE'] logs_dir = os.path.dirname(logs_file) if not os.path.exists(logs_dir): os.mkdir(logs_dir) log_handler = RotatingFileHandler(logs_file, maxBytes=10240, backupCount=10) log_handler.setFormatter(logging.Formatter( '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]')) app.logger.addHandler(log_handler) app.logger.setLevel(app.config['PDC_LOGS_LEVEL']) app.logger.info("Starting PDC-WEB") db.init_app(app) login_manager.init_app(app) # Get and activate blueprints # from .main import bp as main_bp app.register_blueprint(main_bp) from .auth import bp as auth_bp app.register_blueprint(auth_bp) from .errors import bp as errors_bp app.register_blueprint(errors_bp) return app