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