#!/usr/bin/env python3 from __future__ import annotations import argparse import os import subprocess import sys from pathlib import Path ROOT_DIR = Path(__file__).resolve().parent REQUIREMENTS = ROOT_DIR / "requirements.txt" EXPORT_DIR = ROOT_DIR / "exports" def install_requirements() -> None: if not REQUIREMENTS.exists(): raise SystemExit("Brak pliku requirements.txt") subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", str(REQUIREMENTS)]) def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser(description="Lokalne uruchamianie symulatora kredytu bez Dockera.") parser.add_argument("--host", default="127.0.0.1", help="Adres hosta, domyślnie 127.0.0.1") parser.add_argument("--port", type=int, default=8047, help="Port, domyślnie 8047") parser.add_argument("--no-reload", action="store_true", help="Wyłącz auto-reload podczas developmentu") parser.add_argument("--install", action="store_true", help="Zainstaluj zależności z requirements.txt przed startem") return parser.parse_args() def main() -> None: args = parse_args() os.chdir(ROOT_DIR) EXPORT_DIR.mkdir(parents=True, exist_ok=True) os.environ.setdefault("MORTGAGE_EXPORT_DIR", str(EXPORT_DIR)) if args.install: install_requirements() try: import uvicorn except ModuleNotFoundError: print("Brak zależności. Uruchom:") print(" python dev.py --install") print("albo:") print(" python -m pip install -r requirements.txt") raise SystemExit(1) print(f"Start: http://{args.host}:{args.port}") uvicorn.run( "app.main:app", host=args.host, port=args.port, reload=not args.no_reload, app_dir=str(ROOT_DIR), ) if __name__ == "__main__": main()