student-admin / app.py
roshcheeku's picture
Update app.py
e7befe4 verified
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)