"""Локальный запуск без Раисы: mock-авторизация, SQLite, миграции, Streamlit. Выставляет LOCATION=local (если не задан), применяет миграции к локальной БД (DATABASE_URL, по умолчанию sqlite+aiosqlite:///./drrk_local.db) и запускает `streamlit run main.py`. Внешние API (MOEX/ЦБ) работают, только если заданы ключи шлюза и есть доступ к GATEWAY_URL. Пример: python run_local.py python run_local.py --no-migrate -- --server.port 8502 """ from __future__ import annotations import argparse import os import subprocess import sys from pathlib import Path ROOT = Path(__file__).resolve().parent if str(ROOT) not in sys.path: sys.path.insert(0, str(ROOT)) def main() -> int: parser = argparse.ArgumentParser(description=__doc__) parser.add_argument( "--no-migrate", action="store_true", help="Не применять миграции перед стартом" ) parser.add_argument( "streamlit_args", nargs="*", help="Аргументы для streamlit run (после --)" ) args = parser.parse_args() from dotenv import load_dotenv load_dotenv(ROOT / ".env") os.environ.setdefault("LOCATION", "local") if not args.no_migrate: from alembic import command from alembic.config import Config command.upgrade(Config(str(ROOT / "alembic.ini")), "head") return subprocess.call( [ sys.executable, "-m", "streamlit", "run", str(ROOT / "main.py"), *args.streamlit_args, ], cwd=ROOT, ) if __name__ == "__main__": raise SystemExit(main())