# app/__init__.py from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate from flask_login import LoginManager db = SQLAlchemy() migrate = Migrate() login_manager = LoginManager() def create_app(config_class='config.Config'): app = Flask(__name__) app.config.from_object(config_class) db.init_app(app) migrate.init_app(app, db) login_manager.init_app(app) login_manager.login_view = 'auth.login' with app.app_context(): # Enable connection ping only for PostgreSQL if app.config['SQLALCHEMY_DATABASE_URI'].startswith("postgresql"): from sqlalchemy import event, text from sqlalchemy.exc import DisconnectionError @event.listens_for(db.engine, "engine_connect") def ping_connection(connection, branch): if branch: return try: connection.execution_options(isolation_level="AUTOCOMMIT").scalar(text("SELECT 1")) except: raise DisconnectionError() from app.main import main from app.auth import auth app.register_blueprint(main) app.register_blueprint(auth) @app.template_filter('datetimeformat') def datetimeformat(value, format="%Y-%m-%d"): return value.strftime(format) if value else "" return app