import os import sys # ── parse custom flags BEFORE importing database (which reads env vars) ─────── # The --cache-db CLI flag sets the env var so gunicorn deployments can instead # set SCRIPTURE_DETECTOR_CACHE_DB=1 in their environment directly. _argv = sys.argv[1:] if "--cache-db" in _argv: os.environ["SCRIPTURE_DETECTOR_CACHE_DB"] = "1" sys.argv = [sys.argv[0]] + [a for a in _argv if a != "--cache-db"] import csv import io import json import re import uuid import zipfile from datetime import date from pathlib import Path from flask import Flask, render_template, jsonify, request, redirect, url_for, Response, session from werkzeug.middleware.proxy_fix import ProxyFix from google import genai import database # imported as module so we can write to database.session_local from database import ( init_db, create_source, get_source, get_all_sources, delete_source, add_quote, update_quote, delete_quote, get_quotes_for_source, delete_quotes_for_source, delete_quotes_in_range, get_setting, set_setting, get_all_settings, get_book_distribution, get_quote_type_distribution, get_dashboard_data, search_sources, ) from tei import source_to_tei, tei_to_source_data app = Flask(__name__) # Trust the X-Forwarded-* headers from reverse proxies (HuggingFace, nginx…). # This lets Flask see the real HTTPS scheme so secure cookies work correctly. app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1, x_host=1, x_prefix=1) # ── Secret key ──────────────────────────────────────────────────────────────── # Set SD_SECRET_KEY in the environment (HF Spaces → Settings → Secrets) so # sessions survive server restarts. A random key is used as a safe fallback # (sessions reset whenever the server restarts). app.secret_key = os.environ.get("SD_SECRET_KEY") or os.urandom(32) # ── Session cookie settings ─────────────────────────────────────────────────── # HuggingFace Spaces embeds the app inside an