SmartMate / app /init.py
ngwakomadikwe's picture
Create app/init.py
491ff1d verified
raw
history blame
2.35 kB
"""
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