def trading_rule_edit_callback()

in src/backend/entrypoints/streamlit_frontend/state.py [0:0]


def trading_rule_edit_callback(trading_id, keycloak_access_token, is_public=False):
    request_headers = {"Authorization": f"Bearer {keycloak_access_token}"}

    public = "public/" if is_public else ""

    trading_json = requests.get(f"{ALERTS_BACKEND_SERVICE_URL}/api/v0/trading-info/{public}{trading_id}", headers=request_headers)

    if trading_json.status_code != 200:
        raise ConnectionError(f"Cant obtain trading rule \n{trading_json.content}")

    trading = json.loads(trading_json.content)

    # Full current session clear
    keycloak_session = st.session_state.keycloak_session
    st.session_state.clear()
    st.session_state["log"] = []
    set_default_state()
    st.session_state.keycloak_session = keycloak_session
    st.session_state["is_admin"] = "admin" in alerts_backend_proxy_singleton.get_user_roles()

    st.session_state["trading_edit"] = {}
    st.session_state["trading_edit"]["id"] = trading_id
    st.session_state["trading_edit"]["created"] = trading["created"]

    restore_indicators(trading)

    st.session_state["trading_rule_title"] = trading["title"]
    st.session_state["actual_currency"] = trading["account_currency"]
    st.session_state["bet_size"] = int(float(trading["bet_size"]))
    st.session_state["total_gross_limit"] = int(float(trading["total_gross_limit"]))
    st.session_state["per_instrument_gross_limit"] = int(float(trading["per_instrument_gross_limit"]))
    st.session_state["nop_limit"] = int(float(trading["nop_limit"]))
    st.session_state["use_dividends_trading"] = (
        trading.get("account_for_dividends", False) if trading.get("account_for_dividends", False) is not None else False
    )
    st.session_state["execution_cost_bps"] = float(
        trading.get("execution_cost_bps", None) if trading.get("execution_cost_bps", None) is not None else 0.0
    )
    st.session_state["fill_trade_price"] = trading.get("trade_fill_price", None)

    if st.session_state["is_admin"]:
        st.session_state["public_rule"] = trading["public"]

    st.session_state["model_descr"] = trading.get("description", "") if trading.get("description", "") is not None else ""

    st.session_state["app_mode"] = "Trading"
    st.session_state["mode_index"] = 1

    # Don't know why, but this thing switches to the first tab, which we exactly need
    st.empty()