def publish_trading_rule()

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


def publish_trading_rule(keycloak_access_token, trading_rule, public=False):
    request_headers = {
        "Authorization": "Bearer " + keycloak_access_token,
        "Content-Type": "application/json",
    }

    request_body = {
        "model": st.session_state["engine"],
        "title": st.session_state["trading_rule_title"],
        "user_id": st.session_state.keycloak_session.user_info["email"],
        "data_source": st.session_state["data_provider"],
        "datasets": st.session_state.get("datasets_keys", None),
        "periodicity": string_to_ms(st.session_state.data_periodicity),
        "time_range": string_to_ms(st.session_state.time_period_),
        "tickers_prompt": st.session_state.tradable_symbols_prompt,
        "tickers": list(st.session_state["true_symbols"].values()),
        "account_for_dividends": st.session_state.get("use_dividends_trading", False),
        "active": True,
        "end_time": None,
        "public": public,
        "indicators_prompt": PROMPTS_SEPARATOR.join(st.session_state["indicators_dialogue"]),
        "indicators_logic": st.session_state.get("indicators_code", ""),
        "trading_prompt": "",
        "trading_logic": "",
        "account_currency": st.session_state["actual_currency"],
        "bet_size": str(st.session_state["bet_size"]),
        "total_gross_limit": str(st.session_state["total_gross_limit"]),
        "per_instrument_gross_limit": str(st.session_state["per_instrument_gross_limit"]),
        "nop_limit": str(st.session_state["nop_limit"]),
        "description": st.session_state["model_descr"],
        "trade_fill_price": st.session_state["fill_trade_price"]
        if st.session_state.get("fill_trade_price", "") is not None
        else "",
        "execution_cost_bps": str(st.session_state["execution_cost_bps"]),
    }

    if trading_rule is not None:
        request_body["id"] = trading_rule["id"]
        request_body["created"] = trading_rule["created"]
        resp = requests.put(f"{ALERTS_BACKEND_SERVICE_URL}/api/v0/trading-info", json=request_body, headers=request_headers)
    else:
        resp = requests.post(f"{ALERTS_BACKEND_SERVICE_URL}/api/v0/trading-info", json=request_body, headers=request_headers)

    return resp.status_code, resp.content