107 lines
4.6 KiB
Markdown
107 lines
4.6 KiB
Markdown
# Configuration System Refactoring Plan
|
|
|
|
This document outlines the plan for refactoring the configuration system of the Asset Processor Tool.
|
|
|
|
## Overall Goals
|
|
|
|
1. **Decouple Definitions:** Separate `ASSET_TYPE_DEFINITIONS` and `FILE_TYPE_DEFINITIONS` from the main `config/app_settings.json` into dedicated files.
|
|
2. **Introduce User Overrides:** Allow users to override base settings via a new `config/user_settings.json` file.
|
|
3. **Improve GUI Saving:** (Lower Priority) Make GUI configuration saving more targeted to avoid overwriting unrelated settings when saving changes from `ConfigEditorDialog` or `LLMEditorWidget`.
|
|
|
|
## Proposed Plan Phases
|
|
|
|
**Phase 1: Decouple Definitions**
|
|
|
|
1. **Create New Definition Files:**
|
|
* Create `config/asset_type_definitions.json`.
|
|
* Create `config/file_type_definitions.json`.
|
|
2. **Migrate Content:**
|
|
* Move `ASSET_TYPE_DEFINITIONS` object from `config/app_settings.json` to `config/asset_type_definitions.json`.
|
|
* Move `FILE_TYPE_DEFINITIONS` object from `config/app_settings.json` to `config/file_type_definitions.json`.
|
|
3. **Update `configuration.py`:**
|
|
* Add constants for new definition file paths.
|
|
* Modify `Configuration` class to load these new files.
|
|
* Update property methods (e.g., `get_asset_type_definitions`, `get_file_type_definitions_with_examples`) to use data from the new definition dictionaries.
|
|
* Adjust validation (`_validate_configs`) as needed.
|
|
4. **Update GUI & `load_base_config()`:**
|
|
* Modify `load_base_config()` to load and return a combined dictionary including `app_settings.json` and the two new definition files.
|
|
* Update GUI components relying on `load_base_config()` to ensure they receive the necessary definition data.
|
|
|
|
**Phase 2: Implement User Overrides**
|
|
|
|
1. **Define `user_settings.json`:**
|
|
* Establish `config/user_settings.json` for user-specific overrides, mirroring parts of `app_settings.json`.
|
|
2. **Update `configuration.py` Loading:**
|
|
* In `Configuration.__init__`, load `app_settings.json`, then definition files, then attempt to load and deep merge `user_settings.json` (user settings override base).
|
|
* Load presets *after* the base+user merge (presets override combined base+user).
|
|
* Modify `load_base_config()` to also load and merge `user_settings.json` after `app_settings.json`.
|
|
3. **Update GUI Editors:**
|
|
* Modify `ConfigEditorDialog` to load the effective settings (base+user) but save changes *only* to `config/user_settings.json`.
|
|
* `LLMEditorWidget` continues targeting `llm_settings.json`.
|
|
|
|
**Phase 3: Granular GUI Saving (Lower Priority)**
|
|
|
|
1. **Refactor Saving Logic:**
|
|
* In `ConfigEditorDialog` and `LLMEditorWidget`:
|
|
* Load the current target file (`user_settings.json` or `llm_settings.json`).
|
|
* Identify specific setting(s) changed by the user in the GUI session.
|
|
* Update only those specific key(s) in the loaded dictionary.
|
|
* Write the entire modified dictionary back to the target file, preserving untouched settings.
|
|
|
|
## Proposed File Structure & Loading Flow
|
|
|
|
```mermaid
|
|
graph LR
|
|
subgraph Config Files
|
|
A[config/asset_type_definitions.json]
|
|
B[config/file_type_definitions.json]
|
|
C[config/app_settings.json (Base Defaults)]
|
|
D[config/user_settings.json (User Overrides)]
|
|
E[config/llm_settings.json]
|
|
F[config/suppliers.json]
|
|
G[Presets/*.json]
|
|
end
|
|
|
|
subgraph Code
|
|
H[configuration.py]
|
|
I[GUI]
|
|
J[Processing Engine / Pipeline]
|
|
K[LLM Handlers]
|
|
end
|
|
|
|
subgraph Loading Flow (Configuration Class)
|
|
L(Load Asset Types) --> H
|
|
M(Load File Types) --> H
|
|
N(Load Base Settings) --> P(Merge Base + User)
|
|
O(Load User Settings) --> P
|
|
P --> R(Merge Preset Overrides)
|
|
Q(Load LLM Settings) --> H
|
|
R --> T(Final Config Object)
|
|
G -- Load Preset --> R
|
|
H -- Contains --> T
|
|
end
|
|
|
|
subgraph Loading Flow (GUI - load_base_config)
|
|
L2(Load Asset Types) --> U(Return Merged Defaults + Defs)
|
|
M2(Load File Types) --> U
|
|
N2(Load Base Settings) --> V(Merge Base + User)
|
|
O2(Load User Settings) --> V
|
|
V --> U
|
|
I -- Calls --> U
|
|
end
|
|
|
|
|
|
T -- Used by --> J
|
|
T -- Used by --> K
|
|
|
|
I -- Edits --> D
|
|
I -- Edits --> E
|
|
I -- Manages --> F
|
|
|
|
style A fill:#f9f,stroke:#333,stroke-width:2px
|
|
style B fill:#f9f,stroke:#333,stroke-width:2px
|
|
style C fill:#ccf,stroke:#333,stroke-width:2px
|
|
style D fill:#9cf,stroke:#333,stroke-width:2px
|
|
style E fill:#ccf,stroke:#333,stroke-width:2px
|
|
style F fill:#9cf,stroke:#333,stroke-width:2px
|
|
style G fill:#ffc,stroke:#333,stroke-width:2px |