import os from datetime import datetime, date from flask import Flask from config import config from app.extensions import db, migrate, login_manager def create_app(config_name='default'): app = Flask(__name__) app.config.from_object(config[config_name]) # Ensure storage directories exist for folder_key in ('UPLOAD_FOLDER', 'PDF_FOLDER', 'TEMPLATE_FOLDER', 'DOCX_FOLDER'): folder = os.path.join(app.root_path, '..', app.config[folder_key]) os.makedirs(folder, exist_ok=True) # Initialize extensions db.init_app(app) migrate.init_app(app, db) login_manager.init_app(app) # Import models so Flask-Migrate detects them from app.models import admin_user, user, asset, assignment, paperwork, audit_log, document_template # noqa: F401 # Register blueprints from app.routes.auth import bp as auth_bp from app.routes.dashboard import bp as dashboard_bp from app.routes.users import bp as users_bp from app.routes.assets import bp as assets_bp from app.routes.assignments import bp as assignments_bp from app.routes.paperwork import bp as paperwork_bp from app.routes.audit import bp as audit_bp from app.routes.settings import bp as settings_bp from app.routes.doc_templates import bp as doc_templates_bp app.register_blueprint(auth_bp) app.register_blueprint(dashboard_bp) app.register_blueprint(users_bp) app.register_blueprint(assets_bp) app.register_blueprint(assignments_bp) app.register_blueprint(paperwork_bp) app.register_blueprint(audit_bp) app.register_blueprint(settings_bp) app.register_blueprint(doc_templates_bp) # Inject common template variables from datetime import datetime, date @app.context_processor def inject_globals(): return { 'now': datetime.utcnow(), 'today': date.today(), 'today_date': date.today().isoformat(), } return app