Spaces:
Sleeping
Sleeping
Delete config.py
Browse files
config.py
DELETED
|
@@ -1,91 +0,0 @@
|
|
| 1 |
-
"""
|
| 2 |
-
config.py β FGH-Dermatology API
|
| 3 |
-
================================
|
| 4 |
-
All settings are environment-driven. No defaults contain real secrets.
|
| 5 |
-
"""
|
| 6 |
-
|
| 7 |
-
import os
|
| 8 |
-
from dotenv import load_dotenv
|
| 9 |
-
|
| 10 |
-
load_dotenv()
|
| 11 |
-
|
| 12 |
-
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
def _clean_env(key: str, default: str = "") -> str:
|
| 16 |
-
"""Strip surrounding quotes and variable-name prefix from a pasted secret."""
|
| 17 |
-
val = os.environ.get(key, default).strip()
|
| 18 |
-
if val.startswith(("'", '"')) and val.endswith(("'", '"')):
|
| 19 |
-
val = val[1:-1].strip()
|
| 20 |
-
if val.upper().startswith(f"{key}="):
|
| 21 |
-
val = val.split("=", 1)[1].strip()
|
| 22 |
-
return val
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
class Config:
|
| 26 |
-
# ββ Flask ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 27 |
-
SECRET_KEY = _clean_env("SECRET_KEY", "fgh-api-dev-secret-change-me")
|
| 28 |
-
DEBUG = os.environ.get("FLASK_DEBUG", "false").lower() in ("1", "true", "yes")
|
| 29 |
-
|
| 30 |
-
# ββ JWT ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 31 |
-
# A separate long random secret used to sign access tokens.
|
| 32 |
-
# Generate with: python -c "import secrets; print(secrets.token_hex(32))"
|
| 33 |
-
JWT_SECRET = _clean_env("JWT_SECRET", "fgh-jwt-dev-secret-change-me")
|
| 34 |
-
# Token lifetime in seconds (default 8 hours β suitable for a clinical shift)
|
| 35 |
-
JWT_EXPIRY_SECONDS = int(os.environ.get("JWT_EXPIRY_SECONDS", 28800))
|
| 36 |
-
|
| 37 |
-
# ββ CORS βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 38 |
-
# Comma-separated list of allowed frontend origins.
|
| 39 |
-
# In production: "https://fgh-dermatology.vercel.app"
|
| 40 |
-
# For local dev: "http://localhost:3000"
|
| 41 |
-
ALLOWED_ORIGINS = [
|
| 42 |
-
o.strip()
|
| 43 |
-
for o in os.environ.get(
|
| 44 |
-
"ALLOWED_ORIGINS", "http://localhost:3000"
|
| 45 |
-
).split(",")
|
| 46 |
-
if o.strip()
|
| 47 |
-
]
|
| 48 |
-
|
| 49 |
-
# ββ MongoDB Atlas ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 50 |
-
MONGODB_URI = _clean_env("MONGODB_URI") or "mongodb://localhost:27017/"
|
| 51 |
-
MONGODB_DB_NAME = os.environ.get("MONGODB_DB_NAME", "fgh_dermatology")
|
| 52 |
-
|
| 53 |
-
# ββ Hugging Face Hub β model βββββββββββββββββββββββββββββββββββββββββββββ
|
| 54 |
-
HF_MODEL_REPO_ID = _clean_env("HF_MODEL_REPO_ID")
|
| 55 |
-
HF_MODEL_FILENAME = _clean_env("HF_MODEL_FILENAME") or "skin_cancer_model.h5"
|
| 56 |
-
HF_MODEL_REVISION = _clean_env("HF_MODEL_REVISION") or "main"
|
| 57 |
-
HF_TOKEN = _clean_env("HF_TOKEN") or None
|
| 58 |
-
HF_CACHE_DIR = os.environ.get(
|
| 59 |
-
"HF_CACHE_DIR", os.path.join(BASE_DIR, "model", "hf_cache")
|
| 60 |
-
)
|
| 61 |
-
MODEL_PATH = os.environ.get(
|
| 62 |
-
"MODEL_PATH", os.path.join(BASE_DIR, "model", "skin_cancer_model.h5")
|
| 63 |
-
)
|
| 64 |
-
MODEL_INPUT_SIZE = int(os.environ.get("MODEL_INPUT_SIZE", "224"))
|
| 65 |
-
|
| 66 |
-
# ββ Upload handling βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 67 |
-
UPLOAD_FOLDER = os.environ.get(
|
| 68 |
-
"UPLOAD_FOLDER", os.path.join(BASE_DIR, "uploads")
|
| 69 |
-
)
|
| 70 |
-
ALLOWED_EXTENSIONS = {"jpg", "jpeg", "png", "tiff", "tif", "bmp"}
|
| 71 |
-
MAX_CONTENT_LENGTH = int(os.environ.get("MAX_CONTENT_LENGTH", 10 * 1024 * 1024))
|
| 72 |
-
UPLOAD_RETENTION_SECONDS = int(os.environ.get("UPLOAD_RETENTION_SECONDS", 3600))
|
| 73 |
-
|
| 74 |
-
# ββ Diagnostic taxonomy βββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 75 |
-
CLASS_LABELS = [
|
| 76 |
-
"Melanoma",
|
| 77 |
-
"Basal Cell Carcinoma",
|
| 78 |
-
"Melanocytic Nevus",
|
| 79 |
-
"Benign Keratosis-like Lesion",
|
| 80 |
-
]
|
| 81 |
-
CLASS_METADATA = {
|
| 82 |
-
"Melanoma": {"code": "MEL", "risk": "HIGH", "malignant": True},
|
| 83 |
-
"Basal Cell Carcinoma": {"code": "BCC", "risk": "HIGH", "malignant": True},
|
| 84 |
-
"Melanocytic Nevus": {"code": "NV", "risk": "LOW", "malignant": False},
|
| 85 |
-
"Benign Keratosis-like Lesion": {"code": "BKL", "risk": "LOW", "malignant": False},
|
| 86 |
-
}
|
| 87 |
-
|
| 88 |
-
# ββ Auth policy βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 89 |
-
MIN_PASSWORD_LENGTH = int(os.environ.get("MIN_PASSWORD_LENGTH", 10))
|
| 90 |
-
MAX_LOGIN_ATTEMPTS = int(os.environ.get("MAX_LOGIN_ATTEMPTS", 5))
|
| 91 |
-
LOGIN_LOCKOUT_SECONDS = int(os.environ.get("LOGIN_LOCKOUT_SECONDS", 300))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|