import os from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate from flask_cors import CORS from config.settings import config db = SQLAlchemy() migrate = Migrate() def create_app(config_name=None): """Application factory pattern""" if config_name is None: config_name = os.environ.get('FLASK_ENV', 'development') app = Flask(__name__) app.config.from_object(config[config_name]) # Initialize extensions db.init_app(app) migrate.init_app(app, db) CORS(app) # Create upload directories os.makedirs(app.config.get('UPLOAD_FOLDER', 'uploads'), exist_ok=True) os.makedirs(app.config.get('REPORTS_FOLDER', 'reports'), exist_ok=True) # Register blueprints from app.api import api_bp app.register_blueprint(api_bp, url_prefix='/api') # Register error handlers from app.errors import register_error_handlers register_error_handlers(app) return app