diff --git a/frontend/components/config_loader.py b/frontend/components/config_loader.py index 3f5ff1f..812c983 100644 --- a/frontend/components/config_loader.py +++ b/frontend/components/config_loader.py @@ -2,16 +2,27 @@ import streamlit as st from CONFIG import BACKEND_API_HOST, BACKEND_API_PORT from backend.services.backend_api_client import BackendAPIClient +from frontend.utils import generate_random_name backend_api_client = BackendAPIClient.get_instance(host=BACKEND_API_HOST, port=BACKEND_API_PORT) def get_default_config_loader(controller_name: str): - use_default_config = st.checkbox("Use default config", value=True) all_configs = backend_api_client.get_all_controllers_config() - if use_default_config: - st.session_state["default_config"] = {} - else: - configs = [config for config in all_configs if config["controller_name"] == controller_name] - default_config = st.selectbox("Select a config", [config["id"] for config in configs]) - st.session_state["default_config"] = next((config for config in all_configs if config["id"] == default_config), {}) + existing_configs = [config["id"].split("-")[0] for config in all_configs] + default_dict = {"id": generate_random_name(existing_configs)} + with st.expander("Configurations", expanded=True): + c1, c2 = st.columns(2) + with c1: + use_default_config = st.checkbox("Use default config", value=True) + if use_default_config: + st.session_state["default_config"] = default_dict + else: + with c2: + configs = [config for config in all_configs if config["controller_name"] == controller_name] + default_config = st.selectbox("Select a config", [config["id"] for config in configs]) + st.session_state["default_config"] = next((config for config in all_configs if config["id"] == default_config), None) + if st.session_state["default_config"] is None: + st.session_state["default_config"] = default_dict + else: + st.session_state["default_config"]["id"] = st.session_state["default_config"]["id"].split("_")[0] diff --git a/frontend/components/save_config.py b/frontend/components/save_config.py index 89896d7..2afedfa 100644 --- a/frontend/components/save_config.py +++ b/frontend/components/save_config.py @@ -4,19 +4,27 @@ from CONFIG import BACKEND_API_HOST, BACKEND_API_PORT from backend.services.backend_api_client import BackendAPIClient -def render_save_config(controller_name: str, config_data: dict): +def render_save_config(config_base: str, config_data: dict): st.write("### Upload Config to BackendAPI") + backend_api_client = BackendAPIClient.get_instance(host=BACKEND_API_HOST, port=BACKEND_API_PORT) + all_configs = backend_api_client.get_all_controllers_config() + config_bases = set(config_name["id"].split("_")[0] for config_name in all_configs) + config_base = config_base.split("_")[0] + if config_base in config_bases: + config_tag = max(float(config["id"].split("_")[-1]) for config in all_configs if config_base in config["id"]) + version, tag = str(config_tag).split(".") + config_tag = f"{version}.{int(tag) + 1}" + else: + config_tag = "0.1" c1, c2, c3 = st.columns([1, 1, 0.5]) - connector = config_data.get("connector_name", "") - trading_pair = config_data.get("trading_pair", "") with c1: - config_base = st.text_input("Config Base", value=f"{controller_name}-{connector}-{trading_pair.split('-')[0]}") + config_base = st.text_input("Config Base", value=config_base) with c2: - config_tag = st.text_input("Config Tag", value="1.1") + config_tag = st.text_input("Config Tag", value=config_tag) with c3: upload_config_to_backend = st.button("Upload") if upload_config_to_backend: - config_data["id"] = f"{config_base}-{config_tag}" + config_data["id"] = f"{config_base}_{config_tag}" backend_api_client = BackendAPIClient.get_instance(host=BACKEND_API_HOST, port=BACKEND_API_PORT) backend_api_client.add_controller_config(config_data) st.success("Config uploaded successfully!")