anupama-api / scripts /start_backend.py
srujangowda14's picture
committing backend files
a8c4bc6
Raw
History Blame Contribute Delete
4.35 kB
import os
import html as html_lib
import re
import subprocess
import sys
from pathlib import Path
from urllib.parse import parse_qs, urlencode, urljoin, urlparse
from urllib.request import build_opener, HTTPCookieProcessor, Request
ROOT_DIR = Path(__file__).resolve().parent.parent
CHECKPOINT_DIR = Path(os.getenv("MINDFUL_CHECKPOINT_DIR", ROOT_DIR / "checkpoints"))
def extract_google_drive_id(url: str) -> str | None:
parsed = urlparse(url)
if "drive.google.com" not in parsed.netloc:
return None
query_id = parse_qs(parsed.query).get("id")
if query_id:
return query_id[0]
parts = [part for part in parsed.path.split("/") if part]
if "d" in parts:
index = parts.index("d")
if index + 1 < len(parts):
return parts[index + 1]
return None
def ensure_file_from_env(env_name: str, target_name: str) -> None:
url = os.getenv(env_name)
target_path = CHECKPOINT_DIR / target_name
if target_path.exists():
print(f"[startup] Found {target_name}, skipping download.")
return
if not url:
print(f"[startup] {target_name} missing and {env_name} is not set.", file=sys.stderr)
return
CHECKPOINT_DIR.mkdir(parents=True, exist_ok=True)
print(f"[startup] Downloading {target_name} from {env_name}...")
file_id = extract_google_drive_id(url)
if file_id:
download_google_drive_file(file_id, target_path)
else:
raise RuntimeError(f"Unsupported download URL for {env_name}. Use a Google Drive share link.")
def download_google_drive_file(file_id: str, target_path: Path) -> None:
opener = build_opener(HTTPCookieProcessor())
base_url = f"https://drive.google.com/uc?export=download&id={file_id}"
with opener.open(Request(base_url, headers={"User-Agent": "Mozilla/5.0"})) as response:
html = response.read().decode("utf-8", errors="ignore")
download_url = base_url
form_match = re.search(r'<form[^>]+id="download-form"[^>]+action="([^"]+)"', html)
if form_match:
action = html_lib.unescape(form_match.group(1))
hidden_inputs = re.findall(
r'<input[^>]+type="hidden"[^>]+name="([^"]+)"[^>]+value="([^"]*)"',
html,
)
params = {name: html_lib.unescape(value) for name, value in hidden_inputs}
params.setdefault("id", file_id)
download_url = urljoin("https://drive.google.com", action)
if params:
download_url = f"{download_url}?{urlencode(params)}"
else:
confirm_token = None
token_match = re.search(r'name="confirm"\s+value="([^"]+)"', html)
if token_match:
confirm_token = token_match.group(1)
else:
for marker in ("confirm=", "confirm=t&confirm="):
if marker in html:
fragment = html.split(marker, 1)[1]
confirm_token = fragment.split("&", 1)[0].split('"', 1)[0]
break
if confirm_token:
download_url = f"https://drive.google.com/uc?export=download&confirm={confirm_token}&id={file_id}"
with opener.open(Request(download_url, headers={"User-Agent": "Mozilla/5.0"})) as response:
content_type = response.headers.get("Content-Type", "")
if "text/html" in content_type:
body = response.read().decode("utf-8", errors="ignore")
raise RuntimeError(
"Google Drive download failed. Make sure the file is shared as "
"'Anyone with the link' and that download quota is not exceeded.\n"
f"Response snippet: {body[:300]}"
)
with open(target_path, "wb") as output_file:
while True:
chunk = response.read(1024 * 1024)
if not chunk:
break
output_file.write(chunk)
def main() -> None:
ensure_file_from_env("BEST_MODEL_URL", "best_model.pt")
ensure_file_from_env("FINAL_MODEL_URL", "final_model.pt")
port = os.getenv("PORT", "8000")
subprocess.run(
[
sys.executable,
"-m",
"uvicorn",
"backend.main:app",
"--host",
"0.0.0.0",
"--port",
port,
],
check=True,
)
if __name__ == "__main__":
main()