Spaces:
Running
Running
| 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" | |