“shubhamdhamal”
Fix: Include milestone progress in API responses for mobile app
a5cfef0
import os
from dotenv import load_dotenv
basedir = os.path.abspath(os.path.dirname(__file__))
# Load .env file only if not on Render or Hugging Face
if not os.environ.get('RENDER') and not os.environ.get('SPACE_ID'):
load_dotenv(os.path.join(basedir, '.env'))
# Set Flask app for CLI commands (needed for flask db upgrade)
os.environ.setdefault('FLASK_APP', 'run.py')
class Config:
# Check if running in production (Render or HF Spaces)
IS_PRODUCTION = bool(os.environ.get('RENDER')
or os.environ.get('SPACE_ID'))
# SECRET_KEY is CRITICAL for sessions and CSRF
SECRET_KEY = os.environ.get('SECRET_KEY') or os.environ.get(
'FLASK_SECRET_KEY') or 'dev-secret-key-change-in-production-2024'
# Database configuration - Use PostgreSQL (Neon) in production, SQLite locally
# Set DATABASE_URL environment variable for production PostgreSQL connection
# Example: postgresql://user:password@hostname/database?sslmode=require
SQLALCHEMY_DATABASE_URI = os.environ.get(
'DATABASE_URL') or 'sqlite:///learning_path.db'
# Fix for Heroku/Render style postgres:// URLs (SQLAlchemy requires postgresql://)
if SQLALCHEMY_DATABASE_URI and SQLALCHEMY_DATABASE_URI.startswith('postgres://'):
SQLALCHEMY_DATABASE_URI = SQLALCHEMY_DATABASE_URI.replace(
'postgres://', 'postgresql://', 1)
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ENGINE_OPTIONS = {
'pool_pre_ping': True, # Enable connection health checks
'pool_recycle': 300, # Recycle connections every 5 minutes
}
# WTF CSRF Settings - Temporarily disabled due to HF Spaces session issues
# TODO: Re-enable after figuring out session persistence
WTF_CSRF_ENABLED = False # Disable CSRF for now - will re-enable with fix
WTF_CSRF_TIME_LIMIT = None # No time limit if needed
WTF_CSRF_SSL_STRICT = False
# Session configuration - CRITICAL for CSRF to work
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_SAMESITE = 'Lax'
PERMANENT_SESSION_LIFETIME = 7200 # 2 hours
SESSION_COOKIE_NAME = 'learning_path_session'
# HF Spaces internal traffic is HTTP even though external is HTTPS
# Setting SECURE=False allows cookies to be set over internal HTTP
SESSION_COOKIE_SECURE = False # Must be False for HF Spaces
REMEMBER_COOKIE_SECURE = False
REMEMBER_COOKIE_SAMESITE = 'Lax'
LOG_TO_STDOUT = os.environ.get('LOG_TO_STDOUT')