def fetch_data()

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


def fetch_data() -> None:
    if not st.session_state.tradable_symbols_prompt:
        with st.container():
            st.write("\n")
            st.write("\n")
            st.error("Tickers field is empty")
        return

    # ticker_list = re.split(r"[,|+|\-|*|/|(|)]", st.session_state.tickers)
    # ticker_list = [i.strip() for i in ticker_list]
    # check_list = [" " in i for i in ticker_list]

    # if any(check_list):
    #     st.session_state["fetch_ticker_error"] = True
    #     return

    update_price_chart_layouts()
    clear_fundamentals()

    with st.spinner("Fetching data..."):
        result, max_mem_usage, execution_time = func_profile(symbol_step, st.session_state)

        max_mem_usage = math.ceil(max_mem_usage)
        execution_time = math.ceil(execution_time)

        request_timestamp, fetched_symbols_meta, synth_formulas = result
        fetched_data = "\n\n".join(fetched_symbols_meta)
        calculated_synthetics = "\n\n".join(
            f"`{synth_name} = {synth_formula}`" for synth_name, synth_formula in synth_formulas.items()
        )
        calculated_synthetics_logs = f"Calculated synthetics:\n\n {calculated_synthetics}" if calculated_synthetics else ""
        data_source = [
            p
            for p in DATA_PROVIDERS_NAMES_TO_BACKEND_KEY
            if DATA_PROVIDERS_NAMES_TO_BACKEND_KEY[p] == st.session_state.data_provider
        ][0]
        fetched_data_logs = f"**Fetched from {data_source} (periodicity: {st.session_state.interval}, time range: {st.session_state.time_period}) at {request_timestamp}**: \n {fetched_data}"
        define_useful_strings(st.session_state)
        # define_empty_indicators_step(st.session_state)

        append_log(fetched_data_logs + f"\n\nExecution time: {execution_time} seconds")
        if calculated_synthetics_logs:
            append_log(calculated_synthetics_logs)
    st.session_state.jupyter_redirect_url = ""