From c812091ce30bcb40958c772fb218eac7e47359ad Mon Sep 17 00:00:00 2001 From: Abdelkouddous LHACHIMI Date: Wed, 6 May 2026 02:54:36 +0100 Subject: [PATCH] add -config CLI param --- config/Endobest_Dashboard_Config - Debug.xlsx | Bin 86682 -> 86669 bytes eb_dashboard.py | 18 ++++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/config/Endobest_Dashboard_Config - Debug.xlsx b/config/Endobest_Dashboard_Config - Debug.xlsx index daf02be6344533f220d41272c1e9c8dc836aee37..c3a2d5d17be759ca97d893087e10e59181093834 100644 GIT binary patch delta 15346 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 delta 15410 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 CE?eUO diff --git a/eb_dashboard.py b/eb_dashboard.py index a42f244..12eb131 100644 --- a/eb_dashboard.py +++ b/eb_dashboard.py @@ -130,6 +130,7 @@ _user_interaction_lock = threading.Lock() # Global variables (mutable, set at runtime - not constants) inclusions_mapping_config = [] organizations_mapping_config = [] +_dashboard_config_path_override = None # Set by --config CLI arg if provided excel_export_config = None excel_export_enabled = False @@ -152,6 +153,19 @@ if "--debug" in sys.argv: sys.argv.remove("--debug") enable_debug_mode() +# Handle --config override (remove from sys.argv to preserve positional args) +if "--config" in sys.argv: + _idx = sys.argv.index("--config") + if _idx + 1 >= len(sys.argv): + print("Error: --config requires a file path argument") + sys.exit(1) + _raw_config_path = sys.argv[_idx + 1] + del sys.argv[_idx:_idx + 2] + if os.path.isabs(_raw_config_path): + _dashboard_config_path_override = _raw_config_path + else: + _dashboard_config_path_override = os.path.join(get_config_path(), _raw_config_path) + # --- Progress Bar Configuration --- # NOTE: BAR_N_FMT_WIDTH, BAR_TOTAL_FMT_WIDTH, BAR_TIME_WIDTH, BAR_RATE_WIDTH # are imported from eb_dashboard_constants.py (SINGLE SOURCE OF TRUTH) @@ -457,7 +471,7 @@ def load_json_file(filename): def load_inclusions_mapping_config(): """Loads and validates the inclusions mapping configuration from the Excel file.""" global inclusions_mapping_config - config_path = os.path.join(get_config_path(), DASHBOARD_CONFIG_FILE_NAME) + config_path = _dashboard_config_path_override or os.path.join(get_config_path(), DASHBOARD_CONFIG_FILE_NAME) try: # Load with data_only=True to read calculated values instead of formulas @@ -559,7 +573,7 @@ def load_inclusions_mapping_config(): def load_organizations_mapping_config(): """Loads and validates the organizations mapping configuration from the Excel file.""" global organizations_mapping_config - config_path = os.path.join(get_config_path(), DASHBOARD_CONFIG_FILE_NAME) + config_path = _dashboard_config_path_override or os.path.join(get_config_path(), DASHBOARD_CONFIG_FILE_NAME) try: # Load with data_only=True to read calculated values instead of formulas