""" Flask OpenAI Chat Application Modern Flask app with proper structure and error handling """ import os import logging from flask import Flask from flask_cors import CORS from dotenv import load_dotenv def create_app(): """Application factory pattern""" # Load environment variables load_dotenv() app = Flask(__name__) # Configuration app.config['SECRET_KEY'] = os.getenv('SECRET_KEY', 'dev-secret-key-change-in-production') app.config['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY') # Validate required environment variables if not app.config['OPENAI_API_KEY']: raise ValueError("❌ OPENAI_API_KEY is not set. Please add it to your .env file.") # Enable CORS for all routes CORS(app, origins=["*"]) # In production, specify allowed origins # Setup logging setup_logging(app) # Register blueprints from app.routes.chat import chat_bp from app.routes.health import health_bp app.register_blueprint(chat_bp) app.register_blueprint(health_bp) # Error handlers register_error_handlers(app) return app def setup_logging(app): """Configure application logging""" if not app.debug: # Production logging if not os.path.exists('logs'): os.mkdir('logs') file_handler = logging.handlers.RotatingFileHandler( 'logs/app.log', maxBytes=10240, backupCount=10 ) file_handler.setFormatter(logging.Formatter( '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]' )) file_handler.setLevel(logging.INFO) app.logger.addHandler(file_handler) app.logger.setLevel(logging.INFO) app.logger.info('Flask OpenAI Chat startup') def register_error_handlers(app): """Register global error handlers""" @app.errorhandler(400) def bad_request(error): return {'error': 'Bad request', 'message': str(error)}, 400 @app.errorhandler(404) def not_found(error): return {'error': 'Not found', 'message': 'The requested resource was not found'}, 404 @app.errorhandler(500) def internal_error(error): app.logger.error(f'Server Error: {error}') return {'error': 'Internal server error', 'message': 'Something went wrong'}, 500