maneshtrader/backend_embedded_launcher.py

71 lines
2.1 KiB
Python

from __future__ import annotations
import os
import sys
import webbrowser
from pathlib import Path
import streamlit.cli_util as cli_util
from streamlit import config
from streamlit.web import bootstrap
def _resource_root() -> Path:
if hasattr(sys, "_MEIPASS"):
return Path(getattr(sys, "_MEIPASS"))
return Path(__file__).resolve().parent
def _resolve_port(default: int = 8501) -> int:
raw = os.environ.get("MANESH_TRADER_PORT", str(default))
try:
port = int(raw)
except ValueError:
return default
if 1 <= port <= 65535:
return port
return default
def _disable_external_browser() -> None:
# Force any browser launch attempt to no-op in embedded mode.
webbrowser.open = lambda *_args, **_kwargs: False
webbrowser.open_new = lambda *_args, **_kwargs: False
webbrowser.open_new_tab = lambda *_args, **_kwargs: False
cli_util.open_browser = lambda _url: None
def main() -> None:
root = _resource_root()
app_script = root / "app.py"
if not app_script.exists():
raise FileNotFoundError(f"Bundled app script not found: {app_script}")
os.chdir(root)
os.environ.setdefault("STREAMLIT_BROWSER_GATHER_USAGE_STATS", "false")
os.environ.setdefault("STREAMLIT_DEVELOPMENT_MODE", "false")
os.environ.setdefault("STREAMLIT_GLOBAL_DEVELOPMENT_MODE", "false")
port = _resolve_port()
os.environ["STREAMLIT_SERVER_HEADLESS"] = "true"
os.environ["STREAMLIT_SERVER_PORT"] = str(port)
os.environ["STREAMLIT_SERVER_ADDRESS"] = "127.0.0.1"
os.environ["STREAMLIT_BROWSER_SERVER_ADDRESS"] = "127.0.0.1"
os.environ["STREAMLIT_BROWSER_SERVER_PORT"] = str(port)
config.set_option("global.developmentMode", False)
config.set_option("server.headless", True)
config.set_option("server.port", port)
config.set_option("server.address", "127.0.0.1")
config.set_option("browser.serverAddress", "127.0.0.1")
config.set_option("browser.serverPort", port)
_disable_external_browser()
bootstrap.run(str(app_script), False, [], {})
if __name__ == "__main__":
main()