from flask import Flask from flask_cors import CORS from flask_migrate import Migrate from flask_jwt_extended import JWTManager import logging import os from .config import config_by_name from .models import db def create_app(config_name=None): app = Flask(__name__) if config_name is None: config_name = os.environ.get("FLASK_ENV", "development") app.config.from_object(config_by_name[config_name]) CORS(app, origins=app.config["CORS_ORIGINS"]) db.init_app(app) migrate = Migrate(app, db) jwt = JWTManager(app) setup_logging(app) register_blueprints(app) setup_error_handlers(app) return app def setup_logging(app): log_dir = os.path.dirname(app.config["LOG_FILE"]) if not os.path.exists(log_dir): os.makedirs(log_dir) logging.basicConfig( level=getattr(logging, app.config["LOG_LEVEL"]), format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", handlers=[logging.FileHandler(app.config["LOG_FILE"]), logging.StreamHandler()], ) def register_blueprints(app): from .api import api_bp app.register_blueprint(api_bp, url_prefix="/api") def setup_error_handlers(app): @app.errorhandler(404) def not_found(error): return {"error": "Not found"}, 404 @app.errorhandler(500) def internal_error(error): app.logger.error(f"Internal error: {error}") return {"error": "Internal server error"}, 500