Spaces:
Sleeping
Sleeping
File size: 3,710 Bytes
a7a9474 41468c2 9b2df1e c69eff0 545cebd 41468c2 9b2df1e 41468c2 9b2df1e a7a9474 9b2df1e 9c6ca56 c69eff0 9b2df1e 9c6ca56 9b2df1e 9c6ca56 9b2df1e 9c6ca56 9b2df1e 9c6ca56 9b2df1e 9c6ca56 9b2df1e 9c6ca56 18b542f 545cebd 9b2df1e 545cebd e7befe4 545cebd 9b2df1e 41468c2 a7a9474 9b2df1e a7a9474 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
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
@app.route("/")
def home():
logger.info(">>> / endpoint called")
return {"status": "Backend running"}
@app.route("/seed-db")
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)}
@app.route("/test-db")
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
@app.route("/debug-env")
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
@app.route("/self-test")
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)
|