PoraHobe / config.py
SpreadSheets600's picture
Upgrade DB, previews, and student UX flow
1476658
import os
from urllib.parse import parse_qs, urlparse, urlunparse
def _normalize_sqlitecloud_uri(raw_uri):
uri = (raw_uri or "").strip()
if not uri:
return ""
# If a malformed value includes extra text before sqlitecloud://, keep only
# the driver URL portion.
idx = uri.find("sqlitecloud://")
if idx > 0:
uri = uri[idx:]
if not uri.startswith("sqlitecloud://"):
return uri
parsed = urlparse(uri)
query = parse_qs(parsed.query)
# Some copied strings accidentally place the actual URL in the apikey query.
apikey_values = query.get("apikey", [])
if apikey_values and apikey_values[0].startswith("sqlitecloud://"):
nested = apikey_values[0]
nested_idx = nested.find("sqlitecloud://")
if nested_idx >= 0:
return _normalize_sqlitecloud_uri(nested[nested_idx:])
db_name = os.environ.get("SQLITECLOUD_DB_NAME", "").strip()
path = parsed.path or ""
if path in ("", "/") and db_name:
path = f"/{db_name}"
return urlunparse(
(parsed.scheme, parsed.netloc, path, parsed.params, parsed.query, parsed.fragment)
)
def _default_database_uri():
explicit = os.environ.get("DATABASE_URL")
if explicit:
return _normalize_sqlitecloud_uri(explicit)
sqlitecloud_host = os.environ.get("SQLITECLOUD_HOST", "").strip()
sqlitecloud_api_key = os.environ.get("SQLITECLOUD_API_KEY", "").strip()
sqlitecloud_db_name = os.environ.get("SQLITECLOUD_DB_NAME", "porahobe").strip()
if sqlitecloud_host and sqlitecloud_api_key:
host = sqlitecloud_host.replace("sqlitecloud://", "").replace("https://", "")
host = host.split("?")[0].split("/")[0].split(":443")[0]
return f"sqlitecloud://{host}:8860/{sqlitecloud_db_name}?apikey={sqlitecloud_api_key}"
if os.path.isdir("/data"):
# Hugging Face Spaces persistent volume.
return "sqlite:////data/porahobebot.db"
# Local/dev fallback.
return "sqlite:///instance/app.db"
class Config:
SECRET_KEY = os.environ.get("SECRET_KEY") or "dev-secret-key"
SQLALCHEMY_DATABASE_URI = _default_database_uri()
SQLALCHEMY_TRACK_MODIFICATIONS = False
# Google OAuth
GOOGLE_CLIENT_SECRET = os.environ.get("GOOGLE_CLIENT_SECRET")
GOOGLE_CLIENT_ID = os.environ.get("GOOGLE_CLIENT_ID")
# Discord OAuth
DISCORD_CLIENT_SECRET = os.environ.get("DISCORD_CLIENT_SECRET")
DISCORD_CLIENT_ID = os.environ.get("DISCORD_CLIENT_ID")
DISCORD_BOT_TOKEN = os.environ.get("DISCORD_BOT_TOKEN")
DISCORD_GUILD_ID = os.environ.get("DISCORD_GUILD_ID")
DISCORD_WEBHOOK_URL = os.environ.get("DISCORD_WEBHOOK_URL")
# S3 Storage Configuration
S3_BUCKET_NAME = os.environ.get("S3_BUCKET_NAME")
S3_ENDPOINT_URL = os.environ.get("S3_ENDPOINT")
S3_SECRET_KEY = os.environ.get("S3_SECRET_KEY")
S3_ACCESS_KEY_ID = os.environ.get("S3_ACCESS_KEY_ID")
# Admin
ADMIN_SECRET_CODE = os.environ.get("ADMIN_SECRET_CODE") or "admin123"