netviz/app/__init__.py
2025-03-25 23:41:13 +01:00

62 lines
No EOL
1.5 KiB
Python

"""
NetViz application factory.
"""
import os
from flask import Flask
from flask_talisman import Talisman
from flask_seasurf import SeaSurf
from app.extensions import db, migrate, login_manager, limiter, mail, session
from app.utils.security import get_secure_headers
def create_app(test_config=None):
"""Create and configure the Flask application using the factory pattern."""
app = Flask(__name__, instance_relative_config=True)
# Load config
if test_config is None:
app.config.from_object("app.config.Config")
else:
app.config.from_mapping(test_config)
# Ensure instance folder exists
try:
os.makedirs(app.instance_path)
except OSError:
pass
# Initialize extensions
db.init_app(app)
migrate.init_app(app, db)
login_manager.init_app(app)
limiter.init_app(app)
mail.init_app(app)
session.init_app(app)
# Security headers
if app.config.get("SECURE_HEADERS_ENABLED", False):
Talisman(app, **get_secure_headers())
# CSRF protection
csrf = SeaSurf(app)
# Register blueprints
from app.auth import auth_bp
app.register_blueprint(auth_bp)
from app.core import core_bp
app.register_blueprint(core_bp)
from app.api import api_bp
app.register_blueprint(api_bp)
# Error handlers
from app.utils.error_handlers import register_error_handlers
register_error_handlers(app)
# CLI commands
from app.utils.commands import register_commands
register_commands(app)
return app