in src/backend/entrypoints/streamlit_frontend/state.py [0:0]
def publish_alerts(keycloak_access_token, alert):
if not st.session_state.receiver_email:
with st.container():
st.error("Email field is empty.")
return
receivers = [i.strip() for i in st.session_state.receiver_email.split(",")]
for receiver in receivers:
if not re.match(EMAIL_REGEXP, receiver):
with st.container():
st.error(f"Email {receiver} is invalid.")
return
if len(receivers) > 1:
receivers = "; ".join(receivers)
else:
receivers = receivers[0]
activation_time = st.session_state["trigger_time"] if "day" in st.session_state.data_periodicity else 0
if activation_time != 0:
activation_time = datetime.strptime(activation_time, "%H:%M:%S") - datetime.strptime("00:00:00", "%H:%M:%S")
activation_time = activation_time.seconds * 1000
request_headers = {
"Authorization": "Bearer " + keycloak_access_token,
"Content-Type": "application/json",
}
indicators_prompt = PROMPTS_SEPARATOR.join(st.session_state["indicators_dialogue"])
alerts_prompt = PROMPTS_SEPARATOR.join(st.session_state["alerts_dialogue"])
request_body = {
"user_id": st.session_state.keycloak_session.user_info["email"],
"data_source": st.session_state.provider,
"title": st.session_state.alert_title,
"active": "true",
"periodicity": string_to_ms(st.session_state.data_periodicity),
"time_range": string_to_ms(st.session_state.time_period_),
"tickers_prompt": st.session_state.tickers,
"tickers": list(st.session_state["true_symbols"].values()),
"indicators_prompt": indicators_prompt,
"indicators_logic": st.session_state["indicators_code"],
"alerts_prompt": alerts_prompt,
"alerts_logic": st.session_state["alert_code"],
"trigger_type": TRIGGER_TYPES[st.session_state["trigger_type"]],
"alert_text_template": st.session_state["alert_message"],
"alert_emails": receivers,
"end_time": None,
"activation_time": activation_time,
"time_zone": st.session_state.get("timezone", None),
"datasets": st.session_state.get("datasets_multiselect", None),
}
if alert is not None:
request_body["id"] = alert["id"]
request_body["created"] = alert["created"]
resp = requests.put(f"{ALERTS_BACKEND_SERVICE_URL}/api/v0/alerts", json=request_body, headers=request_headers)
else:
resp = requests.post(f"{ALERTS_BACKEND_SERVICE_URL}/api/v0/alerts", json=request_body, headers=request_headers)
return resp.status_code, resp.content