62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
"""Локальный запуск без Раисы: 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())
|