Files
s1ne/backend/core/settings.py
2026-03-29 23:50:49 -05:00

48 lines
3.2 KiB
Python

import os
from pathlib import Path
from functools import lru_cache
from dotenv import load_dotenv
load_dotenv()
# ─── Paths ───────────────────────────────────────────────
ROOT_DIR = Path(__file__).resolve().parent.parent
DATA_DIR = ROOT_DIR / "data"
TMP_DIR = Path("/tmp")
DOWNLOAD_DIR = DATA_DIR / "downloads"
USERS_DIR = DATA_DIR / "users"
ENV = os.getenv("APP_ENV", "development")
PROXY_LIST_FILE = Path(os.getenv("PROXY_LIST_FILE", ".50.txt"))
# ─── Additional ───────────────────────────────────────────────
PROXY_USERNAME = os.getenv("PROXY_USERNAME")
PROXY_PASSWORD = os.getenv("PROXY_PASSWORD")
# ─── DB and SQLAlchemy ───────────────────────────────────────────
SQLALCHEMY_DATABASE_URI= os.getenv("DATABASE_URL") or f"sqlite:///{DATA_DIR / 'local.db'}"
DB_POOL_SIZE = int(os.getenv("DB_POOL_SIZE", 20))
DB_ECHO = bool(os.getenv("DB_ECHO", False))
# ─── Concurrency ───────────────────────────────────────────────
CPU_COUNT = os.cpu_count() or 2
THREADS_MAX = min(32, CPU_COUNT * 4)
PROCS_MAX = min(CPU_COUNT, 4)
PER_IP_CONCURRENCY = int(os.getenv("PER_IP_CONCURRENCY", 2))
# ─── Cache and Tuning knobs ──────────────────────────────────────
FORMAT_CACHE_TTL_SEC = int(os.getenv("FORMAT_CACHE_TTL_SEC", 8_000))
DOWNLOAD_CACHE_TTL_SEC = int(os.getenv("DOWNLOAD_CACHE_TTL_SEC", 86_400)) # 24h
PARALLEL_CHUNK_MB = int(os.getenv("PARALLEL_CHUNK_MB", 2))
MAX_CONCURRENT_FRAG = int(os.getenv("MAX_CONCURRENT_FRAG", 4))
ARIA2C_THRESHOLD_MB = int(os.getenv("ARIA2C_THRESHOLD_MB", 512))
MIN_SCORE = float(os.getenv("PROXY_MIN_SCORE", "0.05"))
MAX_IN_USE = int(os.getenv("PROXY_CONCURRENCY_LIMIT", "4"))
FAIL_COOLDOWN_SEC = int(os.getenv("PROXY_FAIL_COOLDOWN", "600"))
_MAX_LOGIN_FAILS = int(os.getenv("MAX_LOGIN_FAILS", "12"))
_MAX_INVALID_URLS = int(os.getenv("MAX_INVALID_URLS", "20"))
_WINDOW_MINUTES = int(os.getenv("WINDOW_MINUTES", "60"))
# ─── Logging ───────────────────────────────────────────────────
LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO")
# ─── db ───────────────────────────────────────────────────
SKIP_SCHEMA_BOOTSTRAP = int(os.getenv("SKIP_SCHEMA_BOOTSTRAP","0"))
@lru_cache
def ensure_dirs() -> None:
for p in (DATA_DIR, USERS_DIR, DOWNLOAD_DIR):
p.mkdir(parents=True, exist_ok=True)
ensure_dirs()