Spaces:
Sleeping
Sleeping
| from flask import Flask, jsonify | |
| from flask_cors import CORS | |
| from dotenv import load_dotenv | |
| import os, sys, logging | |
| # Configure logging so Hugging Face (gunicorn) always shows it | |
| logging.basicConfig( | |
| level=logging.INFO, | |
| format="%(asctime)s [%(levelname)s] %(message)s", | |
| handlers=[logging.StreamHandler(sys.stdout)] | |
| ) | |
| logger = logging.getLogger(__name__) | |
| logger.info(">>> Starting app.py import...") | |
| from db import db | |
| import requests | |
| load_dotenv() | |
| app = Flask(__name__) | |
| CORS(app) | |
| # Import blueprints with error handling | |
| try: | |
| from routes.auth import auth_bp | |
| from routes.courses import courses_bp | |
| from routes.feedback import feedback_bp | |
| from routes.profile import profile_bp | |
| from routes.admin import admin_bp | |
| logger.info(">>> Successfully imported all blueprints") | |
| except Exception as e: | |
| logger.exception("!!! Failed importing blueprints") | |
| raise e | |
| # Register blueprints | |
| try: | |
| app.register_blueprint(auth_bp, url_prefix="/auth") | |
| app.register_blueprint(courses_bp, url_prefix="/courses") | |
| app.register_blueprint(feedback_bp, url_prefix="/feedback") | |
| app.register_blueprint(profile_bp, url_prefix="/profile") | |
| app.register_blueprint(admin_bp, url_prefix="/admin") | |
| logger.info(">>> All blueprints registered successfully") | |
| except Exception as e: | |
| logger.exception("!!! Failed registering blueprints") | |
| raise e | |
| def home(): | |
| logger.info(">>> / endpoint called") | |
| return {"status": "Backend running"} | |
| def seed_db(): | |
| try: | |
| import seed | |
| logger.info(">>> /seed-db route executed successfully") | |
| return {"status": "Seeding completed!"} | |
| except Exception as e: | |
| logger.exception("!!! /seed-db failed") | |
| return {"status": "Seeding failed", "error": str(e)} | |
| def test_db(): | |
| try: | |
| count_users = db["users"].count_documents({}) | |
| count_courses = db["courses"].count_documents({}) | |
| count_feedback = db["feedback"].count_documents({}) | |
| logger.info(f">>> /test-db OK β users={count_users}, courses={count_courses}, feedback={count_feedback}") | |
| return { | |
| "status": "Connected to MongoDB", | |
| "users_count": count_users, | |
| "courses_count": count_courses, | |
| "feedback_count": count_feedback | |
| } | |
| except Exception as e: | |
| logger.exception("!!! /test-db failed") | |
| return {"status": "DB connection failed", "error": str(e)} | |
| # β Debug route to check env vars | |
| def debug_env(): | |
| logger.info(">>> /debug-env called") | |
| return { | |
| "mongo_uri_present": bool(os.environ.get("MONGO_URI")), | |
| "mongo_db_present": bool(os.environ.get("MONGO_DB")) | |
| } | |
| # β Self-test route: checks if all main routes are reachable | |
| def self_test(): | |
| results = {} | |
| routes = ["/", "/test-db", "/debug-env", "/auth", "/courses", "/feedback", "/profile", "/admin"] | |
| with app.test_client() as client: | |
| for r in routes: | |
| try: | |
| res = client.get(r) | |
| results[r] = { | |
| "status_code": res.status_code, | |
| "ok": res.status_code == 200, | |
| "response": res.json if res.is_json else res.data.decode("utf-8") | |
| } | |
| except Exception as e: | |
| results[r] = {"error": str(e)} | |
| return jsonify(results) | |
| logger.info(">>> Finished loading app.py (Gunicorn should now serve the app)") | |
| if __name__ == "__main__": | |
| port = int(os.environ.get("PORT", 7860)) | |
| logger.info(f">>> Running Flask dev server on 0.0.0.0:{port}") | |
| app.run(host="0.0.0.0", port=port, debug=True) | |