From a5be50b587d4e38edfd64c00e27a66c647e1271e Mon Sep 17 00:00:00 2001 From: Rusfort Date: Thu, 1 May 2025 15:44:40 +0200 Subject: [PATCH] Various Issue Completions #10 #9 #8 #7 #6 #5 --- .gitignore | 4 +- .../02_Developer_Guide/01_Architecture.md | 15 +- .../02_Codebase_Structure.md | 8 +- .../02_Developer_Guide/03_Key_Components.md | 19 +- .../04_Configuration_System_and_Presets.md | 18 +- .../02_Developer_Guide/06_GUI_Internals.md | 10 +- __pycache__/asset_processor.cpython-310.pyc | Bin 42739 -> 0 bytes __pycache__/asset_processor.cpython-313.pyc | Bin 153334 -> 0 bytes __pycache__/config.cpython-310.pyc | Bin 1211 -> 0 bytes __pycache__/config.cpython-313.pyc | Bin 2134 -> 0 bytes __pycache__/configuration.cpython-310.pyc | Bin 11595 -> 0 bytes __pycache__/configuration.cpython-313.pyc | Bin 23494 -> 0 bytes __pycache__/main.cpython-310.pyc | Bin 9833 -> 0 bytes __pycache__/main.cpython-313.pyc | Bin 13193 -> 0 bytes config.py | 63 ++++- config/suppliers.json | 5 + gui/__pycache__/main_window.cpython-310.pyc | Bin 17517 -> 0 bytes gui/__pycache__/main_window.cpython-313.pyc | Bin 103565 -> 0 bytes .../prediction_handler.cpython-310.pyc | Bin 4750 -> 0 bytes .../prediction_handler.cpython-313.pyc | Bin 20644 -> 0 bytes .../preset_editor_dialog.cpython-310.pyc | Bin 23136 -> 0 bytes .../preset_editor_dialog.cpython-313.pyc | Bin 50118 -> 0 bytes .../preview_table_model.cpython-313.pyc | Bin 22522 -> 0 bytes .../processing_handler.cpython-310.pyc | Bin 5445 -> 0 bytes .../processing_handler.cpython-313.pyc | Bin 20883 -> 0 bytes gui/delegates.py | 115 ++++++++- gui/main_window.py | 143 +++++++++-- gui/prediction_handler.py | 85 ++++--- gui/unified_view_model.py | 226 ++++++++++++++++-- .../__pycache__/config_llm.cpython-313.pyc | Bin 2763 -> 0 bytes rule_structure.py | 1 + 31 files changed, 589 insertions(+), 123 deletions(-) delete mode 100644 __pycache__/asset_processor.cpython-310.pyc delete mode 100644 __pycache__/asset_processor.cpython-313.pyc delete mode 100644 __pycache__/config.cpython-310.pyc delete mode 100644 __pycache__/config.cpython-313.pyc delete mode 100644 __pycache__/configuration.cpython-310.pyc delete mode 100644 __pycache__/configuration.cpython-313.pyc delete mode 100644 __pycache__/main.cpython-310.pyc delete mode 100644 __pycache__/main.cpython-313.pyc create mode 100644 config/suppliers.json delete mode 100644 gui/__pycache__/main_window.cpython-310.pyc delete mode 100644 gui/__pycache__/main_window.cpython-313.pyc delete mode 100644 gui/__pycache__/prediction_handler.cpython-310.pyc delete mode 100644 gui/__pycache__/prediction_handler.cpython-313.pyc delete mode 100644 gui/__pycache__/preset_editor_dialog.cpython-310.pyc delete mode 100644 gui/__pycache__/preset_editor_dialog.cpython-313.pyc delete mode 100644 gui/__pycache__/preview_table_model.cpython-313.pyc delete mode 100644 gui/__pycache__/processing_handler.cpython-310.pyc delete mode 100644 gui/__pycache__/processing_handler.cpython-313.pyc delete mode 100644 llm_prototype/__pycache__/config_llm.cpython-313.pyc diff --git a/.gitignore b/.gitignore index e2ca956..15dd6a2 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,6 @@ build/ .DS_Store # Ignore Windows thumbnail cache -Thumbs.db \ No newline at end of file +Thumbs.db +gui/__pycache__ +__pycache__ diff --git a/Documentation/02_Developer_Guide/01_Architecture.md b/Documentation/02_Developer_Guide/01_Architecture.md index f8e0e01..370b7d1 100644 --- a/Documentation/02_Developer_Guide/01_Architecture.md +++ b/Documentation/02_Developer_Guide/01_Architecture.md @@ -7,12 +7,12 @@ This document provides a high-level overview of the Asset Processor Tool's archi The Asset Processor Tool is designed to process 3D asset source files into a standardized library format. Its high-level architecture consists of: 1. **Core Processing Engine (`processing_engine.py`):** The primary component responsible for executing the asset processing pipeline for a single input asset based on a provided `SourceRule` object and static configuration. The older `asset_processor.py` remains in the codebase for reference but is no longer used in the main processing flow. -2. **Configuration System (`Configuration`):** Handles loading core settings and merging them with supplier-specific rules defined in JSON presets. +2. **Configuration System (`Configuration`):** Handles loading core settings (including centralized type definitions) and merging them with supplier-specific rules defined in JSON presets and the persistent `config/suppliers.json` file. 3. **Multiple Interfaces:** Provides different ways to interact with the tool: * Graphical User Interface (GUI) * Command-Line Interface (CLI) * Directory Monitor for automated processing. -The GUI now acts as the primary source of truth for processing rules, generating and managing the `SourceRule` hierarchy before sending it to the processing engine. The CLI and Monitor interfaces can also generate `SourceRule` objects to bypass the GUI for automated workflows. +The GUI now acts as the primary source of truth for processing rules, generating and managing the `SourceRule` hierarchy before sending it to the processing engine. It also accumulates prediction results from multiple input sources before updating the view. The CLI and Monitor interfaces can also generate `SourceRule` objects to bypass the GUI for automated workflows. 4. **Optional Integration:** Includes scripts and logic for integrating with external software, specifically Blender, to automate material and node group creation. ## Hierarchical Rule System @@ -27,14 +27,15 @@ This hierarchy allows for fine-grained control over processing parameters. The G ## Core Components -* `config.py`: Defines core, global settings, constants, and centralized lists of allowed asset and file types. +* `config.py`: Defines core, global settings, constants, and centralized definitions for allowed asset and file types (`ASSET_TYPE_DEFINITIONS`, `FILE_TYPE_DEFINITIONS`), including metadata like colors and descriptions. +* `config/suppliers.json`: A persistent JSON file storing known supplier names for GUI auto-completion. * `Presets/*.json`: Supplier-specific JSON files defining rules for file interpretation and initial prediction. * `configuration.py` (`Configuration` class): Loads `config.py` settings and merges them with a selected preset, pre-compiling regex patterns for efficiency. This static configuration is used by the processing engine. * `rule_structure.py`: Defines the `SourceRule`, `AssetRule`, and `FileRule` dataclasses used to represent the hierarchical processing rules. -* `gui/`: Directory containing modules for the Graphical User Interface (GUI), built with PySide6. The GUI is responsible for generating and managing the `SourceRule` hierarchy via the Unified View and interacting with background handlers (`ProcessingHandler`, `PredictionHandler`). - * `unified_view_model.py`: Implements the `QAbstractItemModel` for the Unified Hierarchical View, holding the `SourceRule` data and handling inline editing. - * `delegates.py`: Contains custom `QStyledItemDelegate` implementations for inline editing in the Unified View. - * `prediction_handler.py`: Generates the initial `SourceRule` hierarchy with predicted values based on input files and the selected preset. +* `gui/`: Directory containing modules for the Graphical User Interface (GUI), built with PySide6. The GUI is responsible for generating and managing the `SourceRule` hierarchy via the Unified View, accumulating prediction results, and interacting with background handlers (`ProcessingHandler`, `PredictionHandler`). + * `unified_view_model.py`: Implements the `QAbstractItemModel` for the Unified Hierarchical View, holding the `SourceRule` data, handling inline editing (including direct model restructuring for `target_asset_name_override`), and managing row coloring based on config definitions. + * `delegates.py`: Contains custom `QStyledItemDelegate` implementations for inline editing in the Unified View, including the new `SupplierSearchDelegate` for supplier name auto-completion and management. + * `prediction_handler.py`: Generates the initial `SourceRule` hierarchy with predicted values for a single input source based on its files and the selected preset. * `processing_engine.py` (`ProcessingEngine` class): The new core component that executes the processing pipeline for a single `SourceRule` object using the static `Configuration`. It contains no internal prediction or fallback logic. * `asset_processor.py` (`AssetProcessor` class): The older processing engine, kept for reference but not used in the main processing flow. * `main.py`: The entry point for the Command-Line Interface (CLI). It handles argument parsing, logging, parallel processing orchestration, and triggering Blender scripts. It now orchestrates processing by passing `SourceRule` objects to the `ProcessingEngine`. diff --git a/Documentation/02_Developer_Guide/02_Codebase_Structure.md b/Documentation/02_Developer_Guide/02_Codebase_Structure.md index cb13196..99a8022 100644 --- a/Documentation/02_Developer_Guide/02_Codebase_Structure.md +++ b/Documentation/02_Developer_Guide/02_Codebase_Structure.md @@ -5,7 +5,9 @@ This document outlines the key files and directories within the Asset Processor ``` Asset_processor_tool/ ├── asset_processor.py # Older core class, kept for reference (not used in main flow) -├── config.py # Core settings, constants, and allowed types +├── config.py # Core settings, constants, and definitions for allowed asset/file types +├── config/ # Directory for configuration files +│ └── suppliers.json # Persistent list of known supplier names for GUI auto-completion ├── configuration.py # Class for loading and accessing configuration (merges config.py and presets) ├── detailed_documentation_plan.md # (Existing file, potentially outdated) ├── Dockerfile # Instructions for building the Docker container image @@ -50,7 +52,9 @@ Asset_processor_tool/ **Key Files and Directories:** * `asset_processor.py`: Contains the older `AssetProcessor` class. It is kept for reference but is no longer used in the main processing flow orchestrated by `main.py` or the GUI. -* `config.py`: Stores global default settings, constants, core rules, and centralized lists of `ALLOWED_ASSET_TYPES` and `ALLOWED_FILE_TYPES` used for validation and GUI dropdowns. +* `config.py`: Stores global default settings, constants, core rules, and centralized definitions for allowed asset and file types (`ASSET_TYPE_DEFINITIONS`, `FILE_TYPE_DEFINITIONS`) used for validation, GUI dropdowns, and coloring. +* `config/`: Directory containing configuration files, such as `suppliers.json`. +* `config/suppliers.json`: A JSON file storing a persistent list of known supplier names, used by the GUI's `SupplierSearchDelegate` for auto-completion. * `configuration.py`: Defines the `Configuration` class. Responsible for loading core settings from `config.py` and merging them with a specified preset JSON file (`Presets/*.json`). Pre-compiles regex patterns from presets for efficiency. An instance of this class is passed to the `ProcessingEngine`. * `rule_structure.py`: Defines the `SourceRule`, `AssetRule`, and `FileRule` dataclasses. These structures represent the hierarchical processing rules and are the primary data contract passed from the GUI/prediction layer to the processing engine. * `processing_engine.py`: Defines the new `ProcessingEngine` class. This is the core component that executes the processing pipeline for a single asset based *solely* on a provided `SourceRule` object and the static `Configuration`. It contains no internal prediction or fallback logic. diff --git a/Documentation/02_Developer_Guide/03_Key_Components.md b/Documentation/02_Developer_Guide/03_Key_Components.md index ccf4827..c1bc7f2 100644 --- a/Documentation/02_Developer_Guide/03_Key_Components.md +++ b/Documentation/02_Developer_Guide/03_Key_Components.md @@ -26,7 +26,7 @@ This module defines the data structures used to represent the hierarchical proce * `AssetRule`: A dataclass representing rules applied at the asset level. It contains nested `FileRule` objects. * `FileRule`: A dataclass representing rules applied at the file level. -These classes hold specific rule parameters (e.g., `supplier_identifier`, `asset_type`, `map_type_override`). Attributes like `asset_type` and `item_type_override` now use string types, which are validated against centralized lists in `config.py`. These structures support serialization (Pickle, JSON) to allow them to be passed between different parts of the application, including across process boundaries. +These classes hold specific rule parameters (e.g., `supplier_identifier`, `asset_type`, `asset_type_override`, `item_type`, `item_type_override`, `target_asset_name_override`). Attributes like `asset_type` and `item_type_override` now use string types, which are validated against centralized lists in `config.py`. These structures support serialization (Pickle, JSON) to allow them to be passed between different parts of the application, including across process boundaries. ## `Configuration` (`configuration.py`) @@ -58,15 +58,18 @@ The `MainWindow` class is the main application window for the Graphical User Int The `UnifiedViewModel` implements a `QAbstractItemModel` for use with Qt's model-view architecture. It is specifically designed to: * Wrap a list of `SourceRule` objects and expose their hierarchical structure (Source -> Asset -> File) to a `QTreeView` (the Unified Hierarchical View). -* Provide methods (`data`, `index`, `parent`, `rowCount`, `columnCount`, `flags`, `setData`) required by `QAbstractItemModel` to allow the `QTreeView` to display the rule hierarchy and support inline editing of specific attributes (e.g., asset type, item type override, target asset name override). +* Provide methods (`data`, `index`, `parent`, `rowCount`, `columnCount`, `flags`, `setData`) required by `QAbstractItemModel` to allow the `QTreeView` to display the rule hierarchy and support inline editing of specific attributes (e.g., `supplier_override`, `asset_type_override`, `item_type_override`, `target_asset_name_override`). +* Handle the direct restructuring of the underlying `SourceRule` hierarchy when `target_asset_name_override` is edited, including moving `FileRule`s and managing `AssetRule` creation/deletion. +* Determine row background colors based on the `asset_type` and `item_type`/`item_type_override` using color metadata from `config.py`. * Hold the `SourceRule` data that is the single source of truth for the GUI's processing rules. ## `Delegates` (`gui/delegates.py`) This module contains custom `QStyledItemDelegate` implementations used by the Unified Hierarchical View (`QTreeView`) to provide inline editors for specific data types or rule attributes. Examples include delegates for: -* `QComboBox`: For selecting from a predefined list of options (e.g., allowed asset types, allowed file types sourced from `config.py`). -* `QLineEdit`: For free-form text editing (e.g., target asset name override, supplier identifier override). +* `ComboBoxDelegate`: For selecting from predefined lists of allowed asset and file types, sourced from `config.py`. +* `LineEditDelegate`: For free-form text editing, such as the `target_asset_name_override`. +* `SupplierSearchDelegate`: A new delegate for the "Supplier" column. It provides a `QLineEdit` with auto-completion suggestions loaded from `config/suppliers.json` and handles adding/saving new suppliers. These delegates handle the presentation and editing of data within the tree view cells, interacting with the `UnifiedViewModel` to get and set data. @@ -84,10 +87,10 @@ The `ProcessingHandler` class is designed to run in a separate `QThread` within The `PredictionHandler` class also runs in a separate `QThread` in the GUI. It is responsible for generating the initial `SourceRule` hierarchy with predicted values based on the input files and the selected preset. It: -* Takes a list of input files and the selected preset name as input. -* Uses logic (including accessing preset rules and `config.py`'s allowed types) to analyze files and predict initial values for overridable fields in the `SourceRule`, `AssetRule`, and `FileRule` objects (e.g., asset type, item type, target asset name). -* Constructs the complete `SourceRule` hierarchy based on these predictions. -* Emits a signal (`rule_hierarchy_ready`) with the generated `List[SourceRule]` to the `MainWindow` to populate the Unified Hierarchical View. +* Takes an input source identifier (path), a list of files within that source, and the selected preset name as input. +* Uses logic (including accessing preset rules and `config.py`'s allowed types) to analyze files and predict initial values for overridable fields in the `SourceRule`, `AssetRule`, and `FileRule` objects (e.g., `supplier_identifier`, `asset_type`, `item_type`, `target_asset_name_override`). +* Constructs a `SourceRule` hierarchy for the single input source. +* Emits a signal (`rule_hierarchy_ready`) with the input source identifier and the generated `SourceRule` object (within a list) to the `MainWindow` for accumulation and eventual population of the `UnifiedViewModel`. ## `ZipHandler` (`monitor.py`) diff --git a/Documentation/02_Developer_Guide/04_Configuration_System_and_Presets.md b/Documentation/02_Developer_Guide/04_Configuration_System_and_Presets.md index 63a5cfb..68150a1 100644 --- a/Documentation/02_Developer_Guide/04_Configuration_System_and_Presets.md +++ b/Documentation/02_Developer_Guide/04_Configuration_System_and_Presets.md @@ -6,9 +6,25 @@ This document provides technical details about the configuration system and the The tool utilizes a two-tiered configuration system: -1. **Core Settings (`config.py`):** This Python module defines global default settings, constants, and core rules that apply generally across different asset sources. Examples include default output paths, standard image resolutions, map merge rules, output format rules, Blender executable paths, and default map types. +1. **Core Settings (`config.py`):** This Python module defines global default settings, constants, and core rules that apply generally across different asset sources. Examples include default output paths, standard image resolutions, map merge rules, output format rules, Blender executable paths, and default map types. It also now centrally defines metadata for allowed asset and file types. 2. **Preset Files (`Presets/*.json`):** These JSON files define supplier-specific rules and overrides. They contain patterns (often regular expressions) to interpret filenames, classify map types, handle variants, define naming conventions, and specify other source-specific behaviors. +## Core Definitions in `config.py` + +The `config.py` file now uses dictionary structures to define allowed asset and file types and their associated metadata: + +* **`ASSET_TYPE_DEFINITIONS`:** A dictionary where keys are the standard asset type names (e.g., `"Surface"`, `"Model"`, `"Decal"`) and values are dictionaries containing metadata such as `description` and `color` (used for GUI coloring). +* **`FILE_TYPE_DEFINITIONS`:** A dictionary where keys are the standard file/item type names (e.g., `"MAP_COL"`, `"MAP_NRM"`, `"MODEL"`, `"EXTRA"`) and values are dictionaries containing metadata such as `description`, `color` (used for GUI coloring), and `examples` (example filename patterns). + +These dictionaries serve as the central source of truth for valid types and their associated display information throughout the application, particularly in the GUI for dropdowns and coloring. + +## Supplier Management (`config/suppliers.json`) + +A new file, `config/suppliers.json`, is used to store a persistent list of known supplier names. This file is a simple JSON array of strings. + +* **Purpose:** Provides a list of suggestions for the "Supplier" field in the GUI's Unified View, enabling auto-completion. +* **Management:** The GUI's `SupplierSearchDelegate` is responsible for loading this list on startup, adding new, unique supplier names entered by the user, and saving the updated list back to the file. + ## `Configuration` Class (`configuration.py`) The `Configuration` class is responsible for loading, merging, and preparing the configuration settings for use by the `AssetProcessor`. diff --git a/Documentation/02_Developer_Guide/06_GUI_Internals.md b/Documentation/02_Developer_Guide/06_GUI_Internals.md index 71bd548..2baf078 100644 --- a/Documentation/02_Developer_Guide/06_GUI_Internals.md +++ b/Documentation/02_Developer_Guide/06_GUI_Internals.md @@ -16,6 +16,7 @@ The `MainWindow` class is the central component of the GUI application. It is re * Connecting user interactions (button clicks, drag-and-drop events, edits in the Unified View) to corresponding methods (slots) within the `MainWindow` or other handler classes. * Managing the display of application logs in the UI console using a custom `QtLogHandler`. * Interacting with background handlers (`ProcessingHandler`, `PredictionHandler`) via Qt signals and slots to ensure thread-safe updates to the UI during long-running operations. +* Accumulating prediction results from the `PredictionHandler` for multiple input sources before updating the `UnifiedViewModel`. * Receiving the initial `SourceRule` hierarchy from the `PredictionHandler` and populating the `UnifiedViewModel`. * Sending the final, potentially user-modified, `SourceRule` list to `main.py` to initiate processing via the `ProcessingEngine`. @@ -42,9 +43,14 @@ The GUI includes an integrated preset editor panel. This allows users to interac The core of the GUI's rule editing interface is the Unified Hierarchical View, implemented using a `QTreeView` with a custom model and delegates. * **`Unified View Model` (`gui/unified_view_model.py`):** This class implements a `QAbstractItemModel` to expose the structure of a list of `SourceRule` objects (Source -> Asset -> File) to the `QTreeView`. It holds the `SourceRule` data that is the single source of truth for the GUI's processing rules. It provides data and flags for display in multiple columns and supports inline editing of specific rule attributes (e.g., asset type, item type override, target asset name override) by interacting with delegates. -* **`Delegates` (`gui/delegates.py`):** This module contains custom `QStyledItemDelegate` implementations used by the `QTreeView` to provide inline editors for specific data types or rule attributes. Examples include delegates for `QComboBox` (for selecting from allowed types sourced from `config.py`) and `QLineEdit` (for free-form text editing). These delegates handle the presentation and editing of data within the tree view cells, interacting with the `UnifiedViewModel` to get and set data. + * **Direct Model Restructuring:** The `setData` method now includes logic to directly restructure the underlying `SourceRule` hierarchy when the `target_asset_name_override` field of a `FileRule` is edited. This involves moving the `FileRule` to a different `AssetRule` (creating a new one if necessary) and removing the old `AssetRule` if it becomes empty. This replaces the previous mechanism of re-running prediction after an edit. + * **Row Coloring:** Row background colors are dynamically determined based on the `asset_type` (for `AssetRule`s) and `item_type` or `item_type_override` (for `FileRule`s), using the color metadata defined in the `ASSET_TYPE_DEFINITIONS` and `FILE_TYPE_DEFINITIONS` dictionaries in `config.py`. `SourceRule` rows have a fixed color. +* **`Delegates` (`gui/delegates.py`):** This module contains custom `QStyledItemDelegate` implementations used by the `QTreeView` to provide inline editors for specific data types or rule attributes. + * **`ComboBoxDelegate`:** Used for selecting from predefined lists (e.g., allowed asset types, allowed file types sourced from `config.py`). + * **`LineEditDelegate`:** Used for free-form text editing (e.g., target asset name override). + * **`SupplierSearchDelegate`:** A new delegate used for the "Supplier" column. It provides a `QLineEdit` with auto-completion suggestions loaded from `config/suppliers.json`. It also handles adding new, unique supplier names entered by the user to the list and saving the updated list back to the JSON file. -The `PredictionHandler` generates the initial `SourceRule` hierarchy, which is then set on the `UnifiedViewModel`. The `QTreeView` displays this model, allowing users to navigate the hierarchy and make inline edits to the rule attributes. Edits made in the view directly modify the attributes of the underlying rule objects in the `SourceRule` hierarchy held by the model. +The `PredictionHandler` generates the initial `SourceRule` hierarchy, which is then set on the `UnifiedViewModel`. The `QTreeView` displays this model, allowing users to navigate the hierarchy and make inline edits to the rule attributes. Edits made in the view directly modify the attributes of the underlying rule objects in the `SourceRule` hierarchy held by the model, with the `UnifiedViewModel` handling the necessary model restructuring and signal emission for view updates. **Data Flow Diagram (GUI Rule Management):** diff --git a/__pycache__/asset_processor.cpython-310.pyc b/__pycache__/asset_processor.cpython-310.pyc deleted file mode 100644 index 9d713f8213597663097f49fdacc5d79d0571974b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42739 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 A&Hw-a diff --git a/__pycache__/asset_processor.cpython-313.pyc b/__pycache__/asset_processor.cpython-313.pyc deleted file mode 100644 index 0d70fd5234006c26f05f08e7b3def5b756a526f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153334 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%0DpVKP)+On3?lt(!Hde$=!zCVs>_x&8@Rp!lK>K zo}+vz?je9})_L6rd8H4l&i=Rxp3yoPpStyzDcElP6$+LNyqwoBld+<|PQlVr8Ud06 z*gOvdHp%b_7HjL9Z2ko}yrmuH!H!UIWR2>6l39SPC~kCCo^e#Ri>N}-T`_L9S6+6O z)dC~foXiqScWh!}!;=ueJ)z=NMNPKuHS87d&qx4Pc6pI4trO~L;|9yRd64+RPZHBU ztkD=RXn%eZaC9-Dn6RWhuk>sicM5k>Sq&iOOUz7=I*WFJ;&e@dsx9bj^veds8jQ?4 z6w$bsbk4GBAnJY+oAhBDG-ova3@j!@#Sy@iKwx z?m^wvx59SxJHrP{H`vXW@Ulh6(SXZ9^?jYnrAIeFu^!WL2wo42H}zuO)y*zM03Ljh zk}V@(x94}R?M$%x^ZR4_=h+DGVm5Z|Hk`hwJwqPlwov&dwdzS(aNJuZ>7>@q|7{p9;$&|=Fq`M~KVZ3p>~ah80D>(oC|9DXl*chS+@CpP!l zn=jZKEv2F+O=|sarkHx_LDDJl z?1-57^4;zaVp4t515$)>)-{26O)C8xk8>xs(0J6x$VeaOk)7bVl%BIa`sUO{6qmo9@ft8%wI_=D>2KZad>)fhCZ_4U>#lpU=Q_hq!R^B0|oOPs}6I0IZpE^hx zd7P5|di`tl%&6#N0&;PdjRWBAS;aYa|E#W$vaCbbPe#AQv5|L?GB9<3G(S6Phs4?; zXIZl|zuZ~VjtUuic+uEpzP3 z2Ad-l(>JBAwnyUaIHwz=@CGG#^O%nJJ)_c5z%?Cjd?mc`WuoyZInmI;Qc8BNiYY{{ zkx}%`%Wp5dweWs=?O`9l+E>{8i{ii?czQ<1>v%to510X2cFu0-`LJGNY}5X%S(9G+ zZ(e|FW6_(7_ZA&_=f%A9o6F9m{2gFd>kpIDUN3m9K@;w!tKw-Q8X@F4I?6N1K6DX>Fn zD)3qEGfA@5YXR<}K~X}{jlGcNXwA52U+Ca#DRSL{9W?Amp)=lXYVIkSu3Jbmx7@uh`E`K~=Z?+|2#%@AQAG zf3M|1^;x!Xjipymv}<;?_RM-`Zq@xYdu{_WO+1*KdH`02nOQJQh^9FZFF1`gyD@eU z&InTvrY}9>}FH8GP~yVqFR z`a$*vvL+om;_IEo)o-7F>-=uIy|`;@(V1B+W>y~-G_f=2mT$3ZL>O~hY74zmH9e1! z2QMde(`1~!#9Jh95IJU@3V3hcy}i54dJyUgyR^zysk@c?she8PnbM`>^W1_S>en;Q z>keybzcc(t!@K6asNJFWg#AW)$FN!n#2OT5<)h>ZM{=E*OaqN0x$i@4bd;R>8TLHV zYrdyvr%ZNC&qfyQb&H3YHLOnUDqlj_XQV#fK(D zCKzNFsPJuWGKd-UIovf4g-Nk7Kg!}z3E7hYKaHxt(~xUZL$^3m*d1-%t! zIV;j3F&TJiQHqySMGZ=X6NBJNLhT>}R!mX{khw}xOhEI;M7B~Q+}+P*7m1hQmgIFW zrWkNX1_J7p*fhvMlzWMCqNE#^OF=miU+4szhf2jU&(>dpi*9uCa8CyR#Se+Qb^LUg zXq;sJ4GY}oJ8SA4H5bJi3~R$|ltv#KpW$p2Lj*h_ga2xwrN*ePMbBzTr~S!RJt&#b zwKytz#fskjIVRBL@ebxnuznGB3f9Tszc!>_8#-3e3tN>p5OgUgMmi(roY{-p569vF zHg8G;0vY^QAGy1!?bETGGjNyNuiISoVzao+R){C89dU+DGWf44>DQD_rm&c%*Jb>e z6L=RMdl~U5a+X&+%Fm1C=l2CRNF{v)^@o)_@5gaJD?blg6)2GS612PA z0ta+MLi=EDy)(NK1EI69%9+>TEN^yZ8{cfY*Yv2Y%~^8VS!;4u^*Hk?oaG(P%5GY?Pw zP5Hbu!^-RDb1HC{=^(EF>a>(^zLItuSY9uS>N^PPe-r^ivHVXy>OV#cn@|3sPLp&-_lu9a0yRll zA8GWMw91V}S?_hpsubmUAiFKKSH3&&GKv(@&g3(}F*MgrqRU8_);+ddXIA1*TEQxW z#g{qa8^rjA-P8N6_V|7_prrl6HAnm+i(mZg$#Dw#(>0O>|BIAVYgx!&GzQ@QAN0p? ze^8umtvO~tLHGAl+vBYb0Y5pJhPx}iB@V_<%L3?LDKlN(eFOIYb}<-5q{Qmw!Etid>NaV#JmZ58Hso_+F-CM8#k_?j@e89RM)H_o5>q zx{lPoc-#~;@(sVK3WCUQq~zN3J`nBsOL|sBl1;(&0niu{WW;N@j(FOpaNHDfM0lhh z(qDM7Py6B%o&+*GD!i~G!V5En`}h;a#~rkc|hc&FN(KjQ#$%Q>a3;RpgxUK$Qa$%uPEm^QiiuK9I-)FM zP048aL>Le!_|^R+#Cg)xbQxeXUWoNq4jyC}@un1NlS=rCY0&g$N%2+)1B5_?j#drr zq|fp*LGeW~;Tvi>^%s6~Ay%=cn8<}x-Xr+$J3aKE!e$!T99cA_e~ya`lR@d-;DQ53 zgrISf8|K$Qsq*ADvoxkm4;$s~FUnJvTZR|C9$g;!s`00b&Yy-vCC#QR5XXd?vMCj& z9OO0RFi6X*5K3)|*E)>c9zA!c!0Cs^(i-{vI@nC zu$+*gIC=|z&eRlZ)Evb;@QTg=O;iT_>#J+hXFx(2TC>h5u>@QP066l2 zHN+A=58NZ!A~_jJHpkZ&1&=fBA?d(DJBos*r@%ay=awKuNHQ}k7RXkj5PbdIuy83N zQf@);pJ@)`acg<9&Oz}MsdVD+d3kVqZplGOO3ZAzC21z1yp_`oq>3+)Nl_Sfi{uSu zU0aHJEW^^m;+!IR2|ja4g9T)lxPl+ZZlTJNCJNG5hAiT;t5Qf@%%{OH2-J?BI<#{6 z8su*zo2!t*Kt-WQO7`iAa8-o(kv>9Nl=6!MtMaXLP?-gB!dWhsbOo}Ym(3)08bYW1 zO8w$F=k^lfc9vPQRl-wo|EWeOmZ31`C_h6&2Ikf`td_L~?)?R{GAWXj_fpwGdKdr$ zsOzF!R~wV+Hx-R1D#;ZoSQafSH!WNMp$}=bjq^uH(Ied((nq%tquiY3FgT`-yhL`R zbmt(=24U6JrMY!vnU(*7hPRn@R4nptw$v5p8QgTQ+&$QGI;BWczIw%#*C*a~p;8Oe zHI4NYx-qWD%X*ofn&{R{x6^dHhr!I18+FozIh!7+UTuXO2hw&0Qw*&&SlNGdW|3A zjjZj-#U+(U+k+%=YjEQ|p2jjMl}YV6c~$mfTO2JLrZ3c8#@@Zf9__Mdyx|R{F!92MP>e)d=_85fN04{ZfL0{Gel*X9XW)>D) z!6Yii#mV|?5lS=R!y#lubBrF1+)Ff`53{oByRRT)0S!_0> z(((#_IyS#drgfD9`)73fkK_RBf7o4FowK+CuC1-$KD)8J%0&?i(j+NFE_>KRmbtK@ z&t}+fkyq-D7}vQ%a%&LfRx7t8Eyvpjfn2SBgowMevsNyt8FU2@Pn6J__1pBCw6Z9p zmn%sTHRL1Yf`!Y~nMnbVb&cY)LAQTF5wPRQ70)%1C>@IG_OvDvcj)jMD0V#cmgIM=@fDX5*PS3Bb`i;!GFC-HfJQx=$Ex1jg|<&UxL<(&6mX>qyJL| zPHEjO9d=FtgM?r#*cOM67M!xcM>6=Y3v_s3(On?nrEc9tg#mm(fA<7SFp5wGl2_=+ zYZdca_iFZwl(PVi!n-LQu$+?^|A%o@3qNj>W{td71ZX798k@JpplqC{oII~})bxur zfXZECOBQ?03i%J^43&>g*3o077*yrVYIbC`i&^atv(AcP=@5C#D}B>)&vKA=@*rmB zLEg#N&Th4RuW;|;j{_VHy}#4O21c3rvN&-0RY;$myxT6u%=~pk%-!`L53#|Ke?PG~ z#d1!IaUh_!$DR8yP?O!MMNFzuDlDN)3@UeKH9E3d#H^NwS#7^kaCz*a@b8N$xKm@_3y@=<%i7&7K1F$e-9rQcj<)xD1D0r2bF zs|W36f<1o-U%`Ey3(3LQgx{&T8|2KabY#|vnRO2{8^o}*yIq^}&d5ZTT4j%{xwz#NIGaDpc-n24bl#%9c18TwitNsN$=NwsMjQwd;})_vb){R z@H|I&p%`BH&8nSS-)Mdq-hi*kWsfWCz8A}yhwb$v_R3KTw^R%&L+dMU)jEng#G(#5 z_8l3s7md?LUa|A*c{V$1dmXhG#af)Rf#`q3UVDRVREa^=kh4oQ9zrN{@~e}q==6KB zKT7$2$`8`)Y5j+(8QTGGM%;^V7^+1>wLP^40(zw(tDg+29c3OM4%^4BBX?Z^) z=bOp*`}V5D>dqg>Itu#i1%2!Sq`EGP7iJt6u8J3~KD=-ZseluNm|M1eYUetRl395h z%WP*s>CX7%SC?N|hIoY-e+o)gAaWY~?5n|F3EnE*$-LjP*TIC*2a#hx*K4916!FiOA%V*B>RCMwpRPi& z16x>RaZ3kb%g&f|h?ITu(QSzM&1ygSD1?lkU(>?v`%(3ueH^5TO!`Qpr68m8SV8B0 z=-wSRh%@L#c4>(%K?dVGTd^|Znmu}**>1D2+n+trll4#62GPI&Fe=5A9rVNU0J_&5 z!~I8LDW-y;9~A}A9ZIMRf*vG=!s>&ZBvYCGK~pZC?PVdRrsMYd<9I&Mgbe2B4?^Mw zGxP@;fq3>JMyK--EX_3^RR{1>A1$Vl*fp8Ou7jYHp3U*tqk$Fa8X(&~mq|U{A#69O z>D+zn>51j2HEE`mSDMKJu+@>46Ent}dXdPdHef-NEat?Jh> zytBw+{pHnJ;kJ1R{P?4*0d%k7J5!=KM;nnFw=mQW8HDzTps+JMt3Gjhgs zeB>LHCzOBv0ibgU;W-&Lvd{B7eB{r$d174McN%$L^*_Sn?SE9?MtX!8VG5@5QufH? zaFP3_=Sp964@;UvtlRVoF)0Vg6knu0jn-H5E zICucEXVy8sq{D^~!KAQ(L2cXCCZlU-lt}qi4SI6{dn2|v>xw_+!KJP+tm&cmakiV* zg|^l&=p_~bz#7kb=sPauy9DIp0RQ&)vxuss1{Is)8tdD*&HwJhy#FJ#G^*JZK-uHc zj!5Xm{|Db(+EE)O@lUHbRZ}_JVCc6l%s0u3mBR{(37ALGXv(*RLmzE30G3n+O-Aeg z4Ic}FtyvUuHr;5en`6jadh_KqE9$s}LF3ZnUH%5_31q3N3ov+GyEFM~k& za_Q>a!u-{BSGb&b`TGgwr~DbrGc&;7ECKGrJy0~xV|Q)_3tlLabtOtx{d`GK)p5>B z-ph7ei5?%kTmw6VZ9uH_2>`Ug@nI{LIoI*I)wKm|ak|3Rkb!g4SIjd2pSsfduUWU& zPoH2ip8oC~T9~|4lkz59{v{{#&^0 zPTs+JR zwmmZ`Uy8CDd-gBdv!R2|fHg;0_O{s`YGlRj`&xT(w=+9W3^O>xb9S`$@Pfk}Bg;Qy z&uM|4IcIq8PLw^okiR=^&pCs4k8_OQ)U)C?dw%}1_Ry^DVS8xt?!}#@!_X6V?`*9> zxtcvRdwbppLK>Oq12#4ujzh^ zJ-f!4kobEsTNC!ALPt`im{fVcYFB4Z0=D85i)$j=$y;W7cm@RVTkJWq?MZu5kt3-} zOscxywi^x5084CQam`;oi=Y#ej__``<$E)GB|um>nn%QDNGMIPsY~`|Gi$oc;%4ri zr6oL{NjK~^15>r1Da#UGWeYb5rgKx066L~^x1_~xw{D2mLc@|s=8z=LI3-DD##|!d zu3)py84-6koP+QAR?ZCd+sZ|AF`8q3&ln5T5nz&gyQ8HP?71!Ey z(?ztO$%ij~Vo?w%ZTa>h8rCt~T>7<*%dS8gMOU%?dzaqRmYUbjFYRNyGJSiZHM0e~ zolu9YMCdK*eP}=GOBytZ$mFe@H}sB(91&|e)BV_QjBd{!MnwJgjsNM!=F)cCPOLqm z^lpIiW^T*0onwzM-VJa@#Qe7H%eJlTfBy2_fDa;Kw)!>)@$PP@R7nPD6cTWoQD^iB zk>;hmrf4wFoYG7sPo;oW!td#>QUWv&^l!u8x<-+gP+ZSaEu;F$FE>BdoJSdRnKslZ zK0oxfuUF=rb6Ui~Pi^$4Fu`(MIDSO<>WYc`N4ep1xz#UOf)JuV8){2gPKFJvMSL$I zh*kxI$$V`P>_OS+Z|)d4Naw=G_({7OJ31W~f}baU&27ANFx&UNlpHWuq6AJTUkBop zC%0)j&f^gDbR66&QU(&;_LV1`#H;Hw%xr@PRB1282HI{otqeHzWTx^~sUyoNrl|2O z<*g~KgjQJ59&cjCbCj>u$An}dMbK31O|itCb}hgX_Di{rlU;|8WLJ}Nm{s&(CxjCN zMkOS-sl*euMrHY?2uq|XUWg>Y1>yziMZOA=&v08SyN!YxAh(oP^te(${v|e$m!(T1xU8y;!nv(<+&e6)JM4OnEXT zd&vqx$`1;yD3ln#wo{bWh?RJ%N0^X3p|FHwN|MZ9MQo2fSN;7buo-+r+b&k(={9+r ziiPZmyGGMlna^cP<25=RaVYosgrCScD4!UhLq?y=e|uI^?J2Wi(0H_sY9DX#GfOj$ z5|b`LRc_|-&MoaEkK_hTe~L${{IydlRavC`%u|x)h}@$^lFtR1v0x#N=VAO2H9}Pj zpp@k-YT^-gbCjG>?V<$>fyyuQUjZ=*Wj&wYFC5`_w!3B?VI#+FgZ5+~k(Qu_JmuBr z9bH3mJ!Ftnc{S9JJRuHuqnnu9pb-+#51=+d8jD&;;xk%EJk+81w*xsRW%mbRBthER z-Fnei^Ooe!Lv#Qhwc_ZM6nUg1P$?JqU+gC(B*TY&9msWsBPB^fys5+^4iQouJVNz1 zZk6*ER^cftJ|6}dsAQ$e$udwO9;1ISm%Iw$E}^c_vpoqRkbw%bgtUaXWuSa~qr4CG z=s`o>^He22mGYlO>+uK|>IRV$Qn-;sj_e_O6*{Mz!#;KGk0XbR(J+%nL(nMmFgvwN@5%48hbVaw3OEWexhUE z2k3NO-e4ecD5XS?5PjnH!c)M_mM}Cv;l6Z1x`H*p()iOv4=y7?aIP@sV%!-ss^+*DpxdGSV>}hQgtEzG%N+z zR~ihqwEm5CVn}qa0VQT4o&clmBq*{VJV|t?l32&WnqknoF-H_#SZPuq+&(?1UclQT zw>XHEFG=0j-egfSkc!Y)It=M(<_U%6u0*hA-3GI zsHt%lO6Xo>UGFI}JFgiG8c??j6hANt;724D{Ya$0MH`=h1Yl~Q_qP$C zOuLo%nK!-S=VwVK$1i}#FA%=^Stugr$FT8$VbAwM3e>LM{mo+tJ?^QS34Zt+4uecV zfGMG4ACFf27>HG#+$N@l3Cb@)UEF%SQ;f9v?_j+_+6aJto2d;`5bXh>|~^ z10cEf8E7$`wFG+92-FYXOV067?qk@IIUX(qA}q=qz68Xe2cKI4=VjA9;1)#mS&72^ zQ({!_m6;z=!?`RhZ>oG>|I-lqEHz8cYWQgYZPL56WrNlTRQFFgC!)k7N$tShgJ8c1 zba-xhJIRkvbr6OmSuM_TR}kT`y^nQ?EHw2cdZPV&YZ%$Yf{M7_7SY(O{~9k`0kk8< zN!+YlD(gI1J&oI2!PaO*${ItrSlnD8vUC#;4CE$DM+dYOWc?C(6-{0#Ol*9=XpL_* zt8d=!v3R_uaCD#u!t!&-qOiFt_?X|R>R57XM?zu+^8IG(f z5q}9)ce|eGj)$9c&X_buOpX|n|zNv}y1N5hiHNX97bkH(GZoUy5| z_Px@#Q@xwB*(b)HK8#I%wdX56Z|JwreLdoxnENB&PCJM_?TpQH#1@LNg*&I-kF6sJ z>*6bm+no%w3Lv3qnP8Jw*u*@WM{L&F!UoH_@qYZxUmV7yB7CImjjA{6@724r2cix0 zY*JPT?^v{noaRTtzH;h-mm&7@1n_OJT|kr+3>4e-kZs8^=|016c=_oX?Fqaa(3%4% z?hgvmaepr;q~nC{oT*oRhoPVe&Af?lNNa=sOIh_|_ckkVz90 z>E!+Bfj?RvhEAAbJ z^g|uatm*jrIU^B;{7a5RhHb)#J ztn}tV7M-Hq#_8ju$W&&iv`1DRM#sHc@JhkfJj-ifxs9w5QlX>!x7ir_^aaPHMFjo9 zghY788B5YQV@b?;oijSonVkN5$!jG$#bWZwyJOBogCo0I#9w0d-H|7{kP`w%mvl#L zt{9u^h&76_#z%>U*CSqwa3mIpi3KXR6Dw_HC2gz?6bS3=8mRIl3Zk=$SZWQ0^p+VJTBOXR_fCv~Q!YjBY0|u(#wl?=J2a?5D87AvSDw3||q4udpEu zPejHCPvuisGT>>ej)&ALasQKnL2Fsd`OB8Hqhw_il9ezFoW?AELg$Q2dv)rSsh#%S z>dh%gwI0T$ygKofi8r#huYJ7?ypu0{yXpP7mcxYPS8u;^dwZCbw6Nk<)~XJBkj1mH zmD?=)#rG5L{NgY+4Iv`8-e`NX`(C%Z?7(@pz^1RUYfEhTrepaC!Z)!uijTVgu$G(QMxX@>E`u}-@X$H@GKHlG@!L|fqistzzO_8T@%1aabbMUGlRXXP7C#gLYH6Jj9 zK<{|OU#6#D!_9^GO%v5EpVMbi7RORA9^I^&A* z22)5&{3t1!QUv)SwJTV9MazCTAxI(Ei)r+cP!k?t30hrPGZB+DobhNbNlOVocZEy$ zDy1dY_axizs^Z(!Z%1Hq^eKdC5@iI$cKe&X_j(;Ubz)APBd0;kX*g&_AGT_5z0OWu z{~#ih<<_#sUVCoufk5&ki$E`+?-4+mUfn%s9zvyX_h0SWv1nHqjAVAjTFju%pE` zGjQp}3U`A^(iwC&ECx1djkDhczA!d8&7v+H1eu=%L1ib!-sWQY+Nj)+W%s%+1` zX?fEkQ{uApMt14~Ya~*n0f_>uTcVZglDMhT2B|a0jO2+Vv8Ya z6dwQE{a^0iZoglBw_gma`#4&Yp7}Ka@qeNV3laHsv=_!A91f3ICKe{A|W|NSAq zKS_@cMh7d~qi3>5CfOtNLw*MqCB4C(D%?HqG*&r`^`f!ogF1&JY<^HX` zbNiRs#SsjxY;=sZjz3J9_$W|Q*nnI9DTte=4QavGn9|@#ZW5D$TG-b;OzydR?k8dK zo3>Y9dgZ08h49lBO*1qPvDb;$IE@O6c#k(bOWf>Kzk^TFkvye7GdWr=lIb+k9 zp+bzUxEt&YEp&vIilL=DHyxq1Vkp|fn4@t@Y=jj5RY&83*tmev&jOCHC%VWJm>fhU zznbw%#!l>Rz-ERR)dV4>{7$XIcuq8)+ponG!EPL8W49b*cf>IoTVIxHCsEKLrQ?Vi z(w*O{V^KLD#2S6)8P|Rs!+I~-yUnZ%Org@mh0`_Nk+SasvJajbhA4~Thjl;AtKUlc z2`WoBHT3%>cJO)?u>Kh~yX=^~F3y72i3qFi0Oolc@E9L=7oS#>7ak zF*cwg#1;BRYw^d~tPiAsv#c9?1QG=nrS0n3 z`F#q-Cb3+xn0nUG$Ljm{tt@Kb{UFmXJ_Zj~VkYng)L4^CS%ta>u!i_=ND^A>3g6ol zWx}+?qdA2-gkRp`%Y2YoK;0(83WW{&v3A7E;ff*f)=(D;*CmTHVSsp4R+%u+jxN`6JurvR6}hBqX|TvKFw68x7P*YnI;hGg|lc$*6H`~_F3#)<}cBv z^?>Tw{orpy{HcA1OLWrhK93}|Ilh+(x_kWjk5#Zv*=)x4vARPt00}MM3#YYy{cyX- zCcS1!b@q%HsT6q!b zyz16jv@PgyP2BX@{0*|zDsp|wp`tW_cAq9;jw6fkEnFdv3u*maYRha}n!}+W=9?R! zDNtwLszV&H*oxgVa`nAohTLJg3}>Fe-%?wy`{+eJ+41A8v=|?hwvB^4X0%zzAZe<} zm(lq&19Y#Tzk-^$hS{FRAY;WBXrA?y#2}B`#_F^h+bZn;u5H5|rdSY*jr{GV-)`C( ze0}n@Nk>|Rm{#FPs}j?yfYS<}*UBR#OKsYn{nO>|E`xVEx%VKlj|R2yuY_;SzP|k0 z@&ad3M|OjKIlcOB(=R|jF7+`U-nH!I{HWyJlD!Oe0b}kU8xUCX z5V*HDgC9m-q3#Z0f4W8+IDgcV-WsF%eoRPPsQ&wDIc>-EKR6bMXRp>twHukE`RLDZ zU@}z#sa5=tE`KeKw;n$SP5yV~JX;iwnKb^S1pT!yFUiw*uU$|-2S+B4b~~>hS6heD zJ6LpO8jBvG`-?X%eS9v(UB3L@{QJC5^5+_P=6m^*>{EO+1#sEQ8@!i7x}@s}nLfYq zH3cdMQefx_z;39Y-8dz*7|l@N8q&T-@^xh(cNF|e0I5<@YI@N!xEgP_l$+ zKUX2is#x@vK$D*SDY1k!)!Gp`Z&cFnHkFvGF&X5NOMY`=pup`;c~aaXy?7+~Q-6nq ziY+A+F4qTn8SDf5kn-=S>1MvNg!yTU;pHUfsgHs7 zfUbKeqll6Jw-H`&DNdXhc*qsGac-4Qhhd3?yl33g@0GFzS6KOi2l<0wbz5@N?ynLVW*D`jiOxD0GrEN5UuX#rctpNVJ6qv!P3OT`MY-euX_ zj5-(VH@BnRGIfv@^lv9dse|B^i$9`t8k97-O^P|sZES7{aY+3Yq#iPRpO>2hw5jHE znN)7T<&tqaX62Vq0V0@ZlFbR={DUQl?F&Hj{FzuD8Q`g&!$>O z43N^b#Gtp)ak;%1rM!4ZDBq{Qm@(>gYI{52cL;J}2)U3r-loJti1@txfJEWv)IHxi z!{dND{2Zx$W-1L7=hvkk2TyOvGJ;C9HGaqJMB#*Y%^OFmrAtu9PD_$U{iPX!&t*yy zlDvHplGI$rZmEZBf3-guHT1cAJX4CNJmV2ApJ(L87<+_kl!x!tA9sXZKfSUgSxB~| zbn5!kOsQbXJFEERw>77!Ej866m;B{%I`LJSGTi>*mw{O7OqrhNnJ!482lF%kzLz~DDGM>?o8lI7+93cbo&lL=) zJ*rrZK{MX3#7ZzI@fOk={v~>+DwLW*NTY*WOQw+Sx8-LlZs3#Rk^kDCCuAagqmbqu ze(!a!I_s}A@_Eb){KXVL7Lt#qBF}Q^{hHh!-Dyi#;%O@8b3csTNYO<#%IbqMSfMtl z@BFsr5+McQmh#ZcJcYpeS3P3t87}3i`I)IL=RO7t>F~Y6)8Fv{B|-z3kNI8$!@h5j z!XzctmJ}hy-{=8$+De+nDE0<`?C`yO?T}xlRLaF!tm}mowf7l&X4!m!lwOTb@9B2r4n;*zS+ddVQBn9@rjvLd*g@v*Zc6O6i(oQM#zT(k0{yx&HWJP4$@j<^ex6qu6wt zO3OlzmLp?;jFx;;gQWm#(wu=gw@u|q$P)5}JfXnUSRY_16bi>NN0KhVNVAdNyyqHs z&j{HljTT-et?stz_D!jk=$X`2m_Z|C3t4VE)q0r?Rc8sjqB)xXwDVYBtIB}tURxUE zhe400CFmJ(p*7MMiA#|8$im|i)Dpzw0@EulbfU?xaoUdJ zSG5lDO7kfZe{-lTJ`>3HY~2}}PJQ3cuV~bgzpD5OKd~ye6nUi8pP#1$BkE|AP=tH4 zXRmKM?XH7Tt>@_~YAM3J^Iv1-qqpGMD{Y?nj1`on*duIzHLUFm=5sOSvnj#UF7IRN zEyXRxJeOg*V^Yvz{=c-qQ(V9?JV@^(Vh{g_2t)pwEa?tPTuw7cK!^e^i*8=04afDh z5S+Awtb@E#57TkT%OTBNBzARW9b)4P09+79D?b2svx2}H?TSKb{sviEv4G9DT@f|_ za|8$umkp%BSV4U7GkZ{tE`v|PKq_$Y0>BL~p49aXP?C-V*I{_k&<9e8V#0W+&lFSo z$lp%NuO}sjRXS_VS0NraW|!pr`8hW1%Mj^ViCtHIODO`aB+mg#0OZ?e)(b+&E4pri z7?}_!ek@Uj5Ez^U|H%U783_u@o?+Wpkxr05N+=8RRZcHYo&kH!?(hv)zyJxfIdNBl z0b}V_X^5@tf*d`!z=Mi<;f1M$&fy6V@oMx&IFRHASFw!9Qdt4vu)&EcEDBSsJN(i< z>joN`^|Jlu(aq|0|G9p9$gzoi?Aepyp+J8S(e{ocjR zR;}dkip4_)PeJ)B)WlTWs}xOQCx*{|0;gV^%{0lzcM;Y>j~*2w`Bx#`;Rs zpw5E_7Mnq|l%LlS53H3)X00)B1rpdlg}1H%fHl^weR#b_z8VaYIJWis^s&K5VnR-@ zB89D14YwrrDPom;Vb$9FJG8}*DTn44ocA@o^H0v*Z{L35VMf`XocjbCdo-Hgh>Fz? z+DgVR40N=2w+(jp_e~lu_~`-`hy@k0LUW+Eu@!h(2Pe<$0+db@x6s@&T8O9B3eUVo zDFR$Fcf)L1r`&}Q5XnnPuGE6HWt18O0{O^IjW;ths=7?xEMb4FpCaU41U=@PsP>>7$CtSmU@OjO z$me)8PE8FlC2B+kwsNoV+EzA}04zgm;~k=Pop+SHpF!N=5yYv&IqxiKk)NNlmfAAB zJdl}XD6NzU4X_`A=v_c%SVJ~@mr4i8M}d%H*5K}OFkVFdBG8K!N^USWK$ z1K#(zQ!(pVEiiH@P(mds)E84XZbhL=C0I~utM?9$V-XdPyz+?HedV@^fdwVP>7A^9 zL;3t3Zl4B#2kNx-0ot_nV|w`s^++x7 zknAOk9-)`o62{LeW7JvhpMkrZv}MQvBJOGipoz$1C+a>`LEh!yIT+96&svkMM2g(( z2ImixhdR{Zm&@$eU*B@ zAgbOpVh}s?>>AO9S*ee7gXcRPLkVla!ZRQ>)+DPm+6Tn!PYtY z>7d(xqn~-?^D!&3XJOS!qlUX0aC$E*7bc{wDpw>Go#%|i6{Hk$L8&AxNaBF5h#94y zo#s8J1j?h_S+l-HArK?6>$q)UmCFkLA-Oq@A(sF8m@NDQ-O4BhG$OiUR8+1?BD02< zO6SkBgW|U43cNzWz@UI#q1>2WTDduAb%oFu$P%I_aD`F^%JQJDFnRc#rXJK4A!C#l z=WgNrd3Mbe^;E7~e?igvD~fikPg19O`A1Vj=DjOu!XzSpSFF1wPOG1-6_mzGN@J`$ zIqK&%sTx$1CE7!DMM#p7ss%+<(rZ5HIXX`W#cUv;?LCjf#4$x2s*`=^wv$FD4}yQMq%8~`E`m;-!)>kKC?b0x}tKQ%RQ z8J}|wafVMAaQg*lgc3=+!rDez^w>er_!H=X3{HHMYLKMS zYQ)rvzOWGuDmiCgK{TucY;fXFdD)TVO@Os8qA*A+p##0-rf^4;p*#n;p=vz)n~2WpZ}v!v!H z(VFOZ5_@w*8O120BdS1*DgeqXDih)h5?5}mXsCT?sNV{3B6a6qJO6s$*ZQ1kd5*La zF|7n*gwW*tFs%;U$(ap5i-cH%lH~NWd+R@X`Q4Wto#SHXI6FJRQYQ~0r;rH{+XFv! zZi|=;y~Kl{_hNX+HM6iRCyAZbL*FWE=x3wj3=e4&cl#ctWH?f4p*@<_^|IknhKH0f zNM0u9I1=;4#QdF<`?KF!{MMr578~*O1+p;4~*T5_NH+*y#(>C4G7so#_JM{!=%*LQ(jA9MyTz+%ElL1?zMxY z#h)Z)KFX_f(?AgvM9<6GlDNz3{$3OXu(9<52t-n@OU1M*`CnsOf)(Yi^RmD zosNUVN@rq`Be6_OEW00gka+TM6VpD%qIK(GOybYBd7RWYBS8TD&mrxG*bTm}UKQ z$n+~(j$%kV%SB2%b&r}_{&f1g(~hP=v1!oJG$b|+Z4bUVeQ(;4TmK-po=seGOe~5M zi;js^ablH4W;u=Z4GUst-i6gT@%&fRyWY28gJfTSKq(XV}{x}=CdH}HE z)f)&{B~a(Mk8Vi~`lzInHf4p!W>p9A>CF&u8;UU{5L1r3p*_sa-$}RU)@_A=emORM z>)JQ79WkX3VoDE-O21LVV)K7$s74Dzn+v%YvQuw2)NBPFCZ@a|{2E#-x}3d}`^ju@ zl$pj@*7!l<#9<0b=W7i+A@-C?XG!J#2C<}htIr7*@ziQDwfg?lL25hru3ztdt()aT zL-;HcAm6zLg|=*sG;AANNHjF9Rrgr2)VSNedy=&b9So1L@k{n$GaG`SDwKuaVip_8 zP3FD$F!c_qO=b)@d(8Nf)c}?qppPtaFl0O0tfe zlJAZ}$;WXz+2=`db5bug9F|r=BGDH?!LRzDl2Tg`=T(Ru!&s3@zC#ic&Avieo;0sJ zEUS3?=36%%Wo=?v8v`|Z*(l<|qt-2!K@yY=jfv;R>}BJQvdd!GWj3?KR@TIsHGA1Q zEJExnHlNf6#56tZ7?mNl2rYxl8prkP4vR|Ou6?W4QFK}?I?c`u+KU7fo3rSkew zzy^lIvqScxVMo!FSVTg`kd_vwSL{Wrun7MlL7!eDrq{5O=Nu<5vA#?8bo1SQwE=(< z+{`W_&u3Wt>_OO^Gb_)LRWE|lvc#U%MFQH;MV+N|k0v&0c1&IsC$B={bP8S1hmwIV z6R}Qj)uGo+PIn}q1mud`@O4>toexmUD&D0`UH z{29j9#0&?x+!G2u(&(ZLav?IqnZ4K_WxSi=079WfU}uI{`tU*Q$WKx-4igMyGgFp| zW|=0QPc!1+jAQVsICzzrIIa598X?XyHV)!$9HtsRdlCpYpHVA-T(hThuvJbvMz4ya zR~@6v;^;CPu`tUjyZ!=Oy~Q$Y2XVJOoI`pb&G^k=mQo2}W9lN%+yTg7dBAbZv7syM z${NdAcO-5=^bemu`*=yKNumIe|1z+e<@D{}-d|?p^X%#hn_orAUzbGWvw5{m=+`+< z_8-Kfa2@ebXkSH9hx5-qj^t9)n6jwVuVZiaM=S5HIL?lVXUAB_I2#8FZJJG9V)16S zw0gH&47+|9lR!QMCw{tCh{@^Om9y!Zce7ezV0`~%=5)5^2MICLQTiVgCQXMOd+#{E z8+3T{URDskzE@~~%^!xA0|5QQ(;2w`S$Y-T{3yC33&xM@Dscacl4jihLs@$v4103u z|5w}92DNpi=X-T^5g!6ufcO?jfB<2@U;{Qd7%*UiW56KGUY0&-}8O$Ip>~pIPY`cceIk*u%4zWKB~(eGi!d8dIbE(dJ)BbY=|E=>pspF zQ258W8VWZvzMz>KDHgU0cm!=(~IFc`XV$veylY9{&pA-wkm&T8l3!hXU94!$( zEuh#>OGJcxT28T_R@%l)!e^Ppf0n}&Z(_VTemqdIq`Fo_ZK}#P11)yp4zZVR4tM?3b^|3Db6)2b zDixe0YGkdLavIeP5xsE^-LR$;Wzof?TbR|&k_Naif@X(AZLgL`qaV`M(wzj=Wj|FK z2#Ww*Z! zFNXT&r~RH@vszk&_U1=;l{*GzHqoKq%kHUNmjzn}bv*iw?g!W}g3rU#03pW4;y)dU zVQDbl3eu}(k8>p1J2Z!Y#hE2h_mmfApp|wYvv2I>&MZUGEAEVIfT7) z*bOxM)ESNb1iF&?(VmQP1%d;p#@~C6@3N#zZBBC-p)K#L+8kw#7;R4bJ=&c1yf$|Z zC~bEhR{K$1JAj)^Wk}W^ur}?jVKHn~nC!=fM=J(>m*GgKb}=+&Ax1B<;$)~j2i<__ zd*ZLcDKIz1y;cTCI0dk3=qnlz^!nayj9^K#?WwalcH^uG|8pHiyU0*WxcjrG&E`BO zcfxbRW9;cQSkdXH(%C#{OC>xQ^eqCzws&i?)Ta;k78>s`*|W>BzaUpuI2<^KT;OA7 z%|QENhVA}AS8bjn#bLIafaA#Re#aS3&`TY^>j!OrrSL)YuOe!%_wAt;g) zQ5fp*i2@_t5{=2g(^z*^1FyYR-A5hx>TEBxq`F?2xe%6!om~h`6hXR&@FJG4>0=;6 z(W*ScR7RsY?PjbNCcA}UEivnqHx-BxS|+O$=-TH0(fd5YL1fA@L*0lYo+- zF9a1t0hI_JR3e5i>LDkCX-W6Nkj#rD9%b>crZdhYl~=zk`aN56#3b&rPlL&zGxIdf&Yx-@R}xyFoD{VHAvcf&onC#-P?U zj0u6Y&V_3ScMdkdGUcZx6j5n-sA+iB!6SqZlSi__h0wI%Y#91eABG8Fevt5oNzzI1 zz9Z2|Dh`t>oPwYWNK_MDQZtZ8OpyuVm|<&t|2YYXbx4CK`u@h{iJMTY;=-RD91{%f zz>?qqrD)Qe2g5!q=GB)dLdisidi1d4(EC-BV&;d$4 zm=Gw_^=~M`^$T)-35U$0a%Lt~a!KF=$9D;kND`*@I1?X6OE9C5C|5?Vj*gEUCp%$o z5(&S|`Hg9>J6>~0*%cn`hOx%q0P{8%HX1H0^(euIJgr`1oisd#3#tc(2MuzjZNpd! ztA&SC6eAQ&fKD4JLoWo9BNLnCk0ii#eTteC6wtfG9mS5OSb8NrJpkR@p-}uW6jF-w zBPxv4+H?hCI)VCuUE+k0CG2x3F2Fkj{E%xM2^QnbB~`WMu!3xhlHr>pQ-LNMM4+J= zOppMY5sF5eBHq<`$c$ft&%DA>2n%z`%;deNG^9*ua{*u&52OehG-31j|{}IT;;ddV>PG4n-5t zVqAzZmnm2&)8Qh!wPVR|qVqH&It=Y(uU`#3UgFKE$4zn!OB@ z&_e-H$*5xl^(3qHV1=KUB8w}`$TAsgUI4HLFZ6S8W3Ex`8^FP+`CCHy>&-SXkho*L zgrrzm7$Bx)%Qsu`0>(&a)Iu1DQC2*rWM{FAtq@`SQuzC7^C*CV3>|a@C92q|oC66Re!L#PeXQ;G*_3FT2XwV}n5R&^%}wTO1Vur+s@9Ln}ZkPV<{7_QPAPm@X&=2BGJ2 zHBxUB5XVp_r-`G_?p<_K=Aw&3hDotm6#&O~5D?H|^Tt`h9Z16=B%~P%wy4AN#f7_W z&UKZXSIBWtrt~S-+yWM)VRhpJixtJ~x`iZxOk!byZGKu^ei5xeSZ-4hi{#uP=Po(J zXmubFd6-71VN$;3I!8}JSO%AaV)LnOQFXBiq|~6keG!}41ZGgxrPHCq&1Ol!u;a}F zTE*p>rdrrCJ44*xQhk@HzEo-rwRjj~O%Fl)q^pk-U7+|_n(ho9@#oa3=i#{NuZHls z=BpS56=C|yy(&=lhwN_L!URc-=CcNs?KjIfMMLA_NFGT z2(qk1gHLaf^%k$bz^~u$)91wfB4H-aEWr1;b*NpG>ax{KK@| zJNJIWHR+g3N^^Vl^N`7ggZ-p z^HS`Vp~O=v+ZtrUai5`0HngoxZyLG*f-s#Rd%(5>lHTgCJmstGlq)+oE4$_WWlM?v z!m4+iZ##W812X;<4oC*emLb#kCUDk zy@pnQs%5$VQEItAtqdY6Iqk5g9j2tKU))SP1KZT5T3BT^9Yc1D)n}=dEww&a)3zY% zTJNT%eW}A=R=w2mU|?(3e>&XVyZsmPtO+ zy_tFTDNJ5>ka=p;F^KRKG|q>nM%c49+ulliGjZkWhWUl1#9yI=#MQiwlJ*Z$b70PI zC2^y$R@!gz@6Yq?FOc^aEJNwXAv|MAgRi(rE^b;gZ4`F{O5o2fTpp0KE79o8eA48+ zd}|}Kaw!HrI9a(%I)6!-wBNdwlKtSuMvB#MvM!z6I#B)B4L@v<>N?kN|MK2@_oSgI z*t6T{zPWMW7Kxe77Ae10vK;YTmvZZtPWjW#uity^o@A}{r5};gkF2Jzy(rgpucrS; z`hlQkUuF~UFROac>90QFtL~7iJN%``{k8`GfqG0qh-qt1^N`clM^fN{ z5No!r6!|bWt6L>o+ggv5dx}z5hSH^P7)$)=2cXA#%W~*JjK8qfbK{-+YeuQ|)S64m zKmCTzpP9FOd?T}J%W@F$`G?-np?mXfl=i^N$(5s?Dk;APaG0nDK;{b_)6UnNQbCPp z+A|-1Hi6`E#vH=lzyyPrv8%>WGxrwAAM>ulJQV%H@rcu@uD{GG0%5 zEy-`K^_MmI%TGWc?$0ZFk`QA~{tXvnNO=N$dTtZ{bQYuiLZT7>mgPyp*>hd2x;;(Lar|a!5s-UP5Fp1nCSWuIXDVHr7)a;c64s;itEqFk5gtyHRtzSJtvc_3asLEuc!hhS(TK5M#FExRNt^yeTOfAw z%hf@SsK=yGplm|S*wn9C%#$wun3%gV5adAC4l^Rzp{nnqY`>`Z+&84#_hk3IUsICc zA3?#rn7djSghfy>cfCNN(j@d`QUE{{_kgDfdroUe1zRY_u4u)-pcx@3(x_&fbRLds zuF&2YA{PJ!Mcka`CXrj3MM`o@(+#i7scGgul+2_Kme0I@4}WBWBu#pk3^ z?$Qhbj-;f#p*f)y7x>lcHSLeb znb2G&GNaBPx8ifNbD5&}@Dd2x;M6Qo+)d3LB6l_Si8KpsG^y@t+GtYU)SM(=yYM2B zPN9cLuW+8?I)y&+IW>Lcb7=Z8{gjq<#a`5kwzbyv6zbsfQvaZ2AAE04>KKw+@h(xM zbcgVRAyv{RH6fLS-PA1Q84-7ue0QO8R>^|&FKOl?o>rk9^;2Pp=@Fa}&n01;S~ej} z6PXcaiOdNuBJ;v6#dnKZJtN#E-vkJJmxM(;11qtW=F44vb(~F@ySy|yDNW4)!6aRu zmu@Ud*B9k0cciI1GAZF?Nm0yzViR~+GfF)To zz=lOFrH?%dHz*8K(?)~|B9p=lwQxjuiF|_~@bw8-;8XLpX*;xtJFV@~BCbu_4WAk} zuAQd1%i1eMX0LqU<1uyyLR%5~efm9XtWp+QW;G8ikS zE<*_?$clTLNHFytFP`I9Q-W9m!AOGuV2(?ZP`ExTU7H68PM%zlMi%5jAYoYwwCS9> zBr;v=7nLp?Q*?JuD_uCIERYwKnN15MT7QmVX4O)91PArcdEo*Pr_zNq9gxzg^yGOE z_I9)MCtHt6tf9!MCQyK)7}8tFoxUFigp=))4aTu{uxDW?I_%IW$` zsyCs76sFI!Yf*M>5D>57%cXhO-&0lM?7~%Cel!!Wh1$pYfUf)6#B5uCZ$Rvz#|Y?$ z+nepf-Dlgn5XkP70*O1mrDewvcGVMz!wth3JSJ{x*)b-cicP@PYdZ;vU_v^O0O`Ty zu@?3jVL;o_b+TKzI5Hrm>o%Pi*wLhlygws{9cKE7W0zPLiMvJVMu@YJ!%h=)lNUK* z1Y%#nHymsi>F>v+KZxCkvAis7>Ege6|BvtcbQ!WP!!PQ6V#fPo#)F&Rzx&2rse0&r@#1!@ zhL3wtx6OeB4lMT3b8o-2O>A(Q7x}`K z0{ltG7kUb|i3Im+_|gY>Pe7LO5`Y9__wktza6STAKD^|5 zdX{F&tDR=d0k5{~18wZ9hF4DEPXS*4ESMTf=;HA~#>;26v8`I=9Aoszit zXZR{bDJ<~=FMrvg3s)=Mu%i*!~}n-s_{=Hu+lw==V|%eY+L*Kk-rnU~*}H0?LF_;8eQ z@fAw?BZAaIZK_HAXFb%V5gO7AO-Vu`b74;A!@Mkn1zD5@xhMDK!7T}kvJ~#gvaFz} zS&`L^Z1uz2Qn)W`;Q>ksr7Y|69?nnX(XA=(<9x8u9?D0zWU7Z1`8ce~C*h%d8rI}9 zUu%4N)wn(%r;%8W7txKlUW`{Fd%IF<5~cBcoz3FqP4hZ>lif5*SGkU3e}26EJO^{+ z4I$?_L9Y+FA>-5rgE~O0f$swGSl0&A_kAGUAPgZlu!a=vL+YPFj=jl}@ztYdvqjT1 z%7mN5lPFE&L^$hgwa%`}izpk*aW-y#m&VJxJa+Hy9ATy%D)>x6Q327k1_9&r42&;O zo}(O}-5E%Q{fju6MB?;(mO%l}vx+7e>}`!`Ym~sm10_0g6SW~R6<|Ou$th4tlY#=w zq$PU_)NMn-VqF^89L&{n3VG~<*XzHJ(=b8zK<|Oxo+2H`uP=AX?=PXUt3=F}c+eD! zug04*i+{Th`K=3zGP)SA=UEDeI|`O9WVFgIlNyGFg1=5K#*+xD!u6aE^L;^mpK&p2 z)ZqcAUJv!|z-A*lWWuGKGj9ZSpVN^=Jxkz?2>#k-KGfMO?$Hg`7k<#T1|C$MfV%+~ zZR#_j3^jGj7Uf%>iU~*Vs3$tk(Dg9+z!?dfeamb(_}cA>Zvtu$_-lBIKF1EYa`Qee z`i^ahuHy-0L2WRkJtp3Bd^n=M%Q{?m6!!>=b&z8Fa8H%n9&og{yf3`K#=@WMio|e3 z%Ej@CBDfyz@G$eooLy?$ZQ415`v1MBxD%=>$B<#;cJUu~sND%{%9+5nasPut;r{L& z?3&&|QqRG(RnCU4>KGQnx`S80Xvqm)*9QJPXMaz%T*Puck6x(vn!Z3Fq^Oe|(Qy)D5Tl|Kqi7cOyl&|EzeoY? ahLJZ61J~s5e4e~B2>FA&BM*sQB>w=Jd{{UD diff --git a/__pycache__/config.cpython-313.pyc b/__pycache__/config.cpython-313.pyc deleted file mode 100644 index 34ebff9ec7285e1518d4fddd2fa8f2e171e5f505..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2134 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 Ry!1sqJxc$YA}>PK{|_WZ#K!;t diff --git a/__pycache__/main.cpython-310.pyc b/__pycache__/main.cpython-310.pyc deleted file mode 100644 index 4582835fe7080430863f545eef07e1169a20f64b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9833 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 a_!>L=6-4DrBV~MH*xApWT_?m&ef7Ub+9g~7 diff --git a/__pycache__/main.cpython-313.pyc b/__pycache__/main.cpython-313.pyc deleted file mode 100644 index 152fe872561bf01d51ee868ccda0cd13759796da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13193 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 diff --git a/config.py b/config.py index 9abe1db..2bb2c12 100644 --- a/config.py +++ b/config.py @@ -2,13 +2,62 @@ # Core settings defining the pipeline standards and output format. # --- Core Definitions --- -ALLOWED_ASSET_TYPES = ["Surface", "Model", "Decal", "Atlas", "UtilityMap"] -ALLOWED_FILE_TYPES = [ - "MAP_COL", "MAP_NRM", "MAP_METAL", "MAP_ROUGH", "MAP_AO", "MAP_DISP", - "MAP_REFL", "MAP_SSS", "MAP_FUZZ", "MAP_IDMAP", "MAP_MASK", - "MAP_IMPERFECTION", # Added for imperfection maps - "MODEL", "EXTRA", "FILE_IGNORE" -] +# Old definitions (commented out) +# ALLOWED_ASSET_TYPES = ["Surface", "Model", "Decal", "Atlas", "UtilityMap"] +# ALLOWED_FILE_TYPES = [ +# "MAP_COL", "MAP_NRM", "MAP_METAL", "MAP_ROUGH", "MAP_AO", "MAP_DISP", +# "MAP_REFL", "MAP_SSS", "MAP_FUZZ", "MAP_IDMAP", "MAP_MASK", +# "MAP_IMPERFECTION", # Added for imperfection maps +# "MODEL", "EXTRA", "FILE_IGNORE" +# ] + +# New definitions using dictionaries +ASSET_TYPE_DEFINITIONS = { + "Surface": { + "description": "Standard PBR material set for a surface.", + "color": "#87CEEB", # Light Blue + "examples": ["WoodFloor01", "MetalPlate05"] + }, + "Model": { + "description": "A 3D model file.", + "color": "#FFA500", # Orange + "examples": ["Chair.fbx", "Character.obj"] + }, + "Decal": { + "description": "A texture designed to be projected onto surfaces.", + "color": "#90EE90", # Light Green + "examples": ["Graffiti01", "LeakStain03"] + }, + "Atlas": { + "description": "A texture sheet containing multiple smaller textures.", + "color": "#FFC0CB", # Pink + "examples": ["FoliageAtlas", "UITextureSheet"] + }, + "UtilityMap": { + "description": "A map used for specific technical purposes (e.g., flow map).", + "color": "#D3D3D3", # Light Grey + "examples": ["FlowMap", "CurvatureMap"] + } +} + +FILE_TYPE_DEFINITIONS = { + "MAP_COL": {"description": "Color/Albedo Map", "color": "#FFFFE0", "examples": ["_col.", "_basecolor."]}, + "MAP_NRM": {"description": "Normal Map", "color": "#E6E6FA", "examples": ["_nrm.", "_normal."]}, + "MAP_METAL": {"description": "Metalness Map", "color": "#C0C0C0", "examples": ["_metal.", "_met."]}, + "MAP_ROUGH": {"description": "Roughness Map", "color": "#A0522D", "examples": ["_rough.", "_rgh."]}, + "MAP_AO": {"description": "Ambient Occlusion Map", "color": "#A9A9A9", "examples": ["_ao.", "_ambientocclusion."]}, + "MAP_DISP": {"description": "Displacement/Height Map", "color": "#FFB6C1", "examples": ["_disp.", "_height."]}, + "MAP_REFL": {"description": "Reflection/Specular Map", "color": "#E0FFFF", "examples": ["_refl.", "_specular."]}, + "MAP_SSS": {"description": "Subsurface Scattering Map", "color": "#FFDAB9", "examples": ["_sss.", "_subsurface."]}, + "MAP_FUZZ": {"description": "Fuzz/Sheen Map", "color": "#FFA07A", "examples": ["_fuzz.", "_sheen."]}, + "MAP_IDMAP": {"description": "ID Map (for masking)", "color": "#F08080", "examples": ["_id.", "_matid."]}, + "MAP_MASK": {"description": "Generic Mask Map", "color": "#FFFFFF", "examples": ["_mask."]}, + "MAP_IMPERFECTION": {"description": "Imperfection Map (scratches, dust)", "color": "#F0E68C", "examples": ["_imp.", "_imperfection."]}, + "MODEL": {"description": "3D Model File", "color": "#FFA500", "examples": [".fbx", ".obj"]}, + "EXTRA": {"description": "Non-standard/Unclassified File", "color": "#778899", "examples": [".txt", ".zip"]}, + "FILE_IGNORE": {"description": "File to be ignored", "color": "#2F4F4F", "examples": ["Thumbs.db", ".DS_Store"]} +} + # --- Target Output Standards --- TARGET_FILENAME_PATTERN = "{base_name}_{map_type}_{resolution}.{ext}" STANDARD_MAP_TYPES = [ diff --git a/config/suppliers.json b/config/suppliers.json new file mode 100644 index 0000000..e1a0bfd --- /dev/null +++ b/config/suppliers.json @@ -0,0 +1,5 @@ +[ + "Dinesen", + "Poliigon", + "poliigon" +] \ No newline at end of file diff --git a/gui/__pycache__/main_window.cpython-310.pyc b/gui/__pycache__/main_window.cpython-310.pyc deleted file mode 100644 index d9bc28fd51283313bd5f6f39a22f38e683c632ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17517 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 diff --git a/gui/__pycache__/main_window.cpython-313.pyc b/gui/__pycache__/main_window.cpython-313.pyc deleted file mode 100644 index 3fc5144e35773694ff125247c42bc5f728168ace..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103565 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 diff --git a/gui/__pycache__/prediction_handler.cpython-310.pyc b/gui/__pycache__/prediction_handler.cpython-310.pyc deleted file mode 100644 index e6df7745e488d1674e827f0ad66e752eb8076749..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4750 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 Y$yn&a+;nNqrW}8&|IaR3SerKf50ms*BLDyZ diff --git a/gui/__pycache__/prediction_handler.cpython-313.pyc b/gui/__pycache__/prediction_handler.cpython-313.pyc deleted file mode 100644 index ca93d558fa2c4e09a11fc9167c0cc43ffbe4cfa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20644 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 diff --git a/gui/__pycache__/preset_editor_dialog.cpython-310.pyc b/gui/__pycache__/preset_editor_dialog.cpython-310.pyc deleted file mode 100644 index fa2d3ab5f59df69fa4108cbd2e45fe1f15ebb26b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23136 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 H!2kaP^jI%& diff --git a/gui/__pycache__/preview_table_model.cpython-313.pyc b/gui/__pycache__/preview_table_model.cpython-313.pyc deleted file mode 100644 index 1a6820da1e97a96cd16987502aedb2b964a833eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22522 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 MFD%o9@6DF}1Mf`%U;qFB diff --git a/gui/__pycache__/processing_handler.cpython-313.pyc b/gui/__pycache__/processing_handler.cpython-313.pyc deleted file mode 100644 index 8ffa1658eff737ecdbde435ffef1f38c6d6ec46a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20883 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 OwGEc5J}B2f{Qm-QYU6?c diff --git a/gui/delegates.py b/gui/delegates.py index 32182cd..e121982 100644 --- a/gui/delegates.py +++ b/gui/delegates.py @@ -1,7 +1,8 @@ # gui/delegates.py from PySide6.QtWidgets import QStyledItemDelegate, QLineEdit, QComboBox from PySide6.QtCore import Qt, QModelIndex -from config import ALLOWED_ASSET_TYPES, ALLOWED_FILE_TYPES # Import config lists +# Import the new config dictionaries +from config import ASSET_TYPE_DEFINITIONS, FILE_TYPE_DEFINITIONS class LineEditDelegate(QStyledItemDelegate): """Delegate for editing string values using a QLineEdit.""" @@ -41,17 +42,17 @@ class ComboBoxDelegate(QStyledItemDelegate): # Add a "clear" option first, associating None with it. editor.addItem("---", None) # UserData = None - # Populate based on column using lists from config - items_list = None + # Populate based on column using keys from config dictionaries + items_keys = None if column == 2: # Asset-Type Override (AssetRule) - items_list = ALLOWED_ASSET_TYPES + items_keys = list(ASSET_TYPE_DEFINITIONS.keys()) elif column == 4: # Item-Type Override (FileRule) - items_list = ALLOWED_FILE_TYPES + items_keys = list(FILE_TYPE_DEFINITIONS.keys()) - if items_list: - for item_str in items_list: - # Add item with the string itself as text and UserData - editor.addItem(item_str, item_str) + if items_keys: + for item_key in sorted(items_keys): # Sort keys alphabetically for consistency + # Add item with the key string itself as text and UserData + editor.addItem(item_key, item_key) else: # If the delegate is incorrectly applied to another column, # it will just have the "---" option. @@ -86,4 +87,100 @@ class ComboBoxDelegate(QStyledItemDelegate): def updateEditorGeometry(self, editor, option, index): # Ensures the editor widget is placed correctly within the cell. + editor.setGeometry(option.rect) +# gui/delegates.py - New content to insert + +import json +import logging +import os # Added for path manipulation if needed, though json.dump handles creation +from PySide6.QtWidgets import QCompleter # Added QCompleter + +# Configure logging +log = logging.getLogger(__name__) +SUPPLIERS_CONFIG_PATH = "config/suppliers.json" + +class SupplierSearchDelegate(QStyledItemDelegate): + """ + Delegate for editing supplier names using a QLineEdit with auto-completion. + Loads known suppliers from config/suppliers.json and allows adding new ones. + """ + def __init__(self, parent=None): + super().__init__(parent) + self.known_suppliers = self._load_suppliers() + + def _load_suppliers(self): + """Loads the list of known suppliers from the JSON config file.""" + try: + with open(SUPPLIERS_CONFIG_PATH, 'r') as f: + suppliers = json.load(f) + if isinstance(suppliers, list): + # Ensure all items are strings + return sorted([str(s) for s in suppliers if isinstance(s, str)]) + else: + log.warning(f"'{SUPPLIERS_CONFIG_PATH}' does not contain a valid list. Starting fresh.") + return [] + except FileNotFoundError: + log.info(f"'{SUPPLIERS_CONFIG_PATH}' not found. Starting with an empty supplier list.") + return [] + except json.JSONDecodeError: + log.error(f"Error decoding JSON from '{SUPPLIERS_CONFIG_PATH}'. Starting fresh.", exc_info=True) + return [] + except Exception as e: + log.error(f"An unexpected error occurred loading '{SUPPLIERS_CONFIG_PATH}': {e}", exc_info=True) + return [] + + def _save_suppliers(self): + """Saves the current list of known suppliers back to the JSON config file.""" + try: + # Ensure the directory exists (though write_to_file handled initial creation) + os.makedirs(os.path.dirname(SUPPLIERS_CONFIG_PATH), exist_ok=True) + with open(SUPPLIERS_CONFIG_PATH, 'w') as f: + json.dump(self.known_suppliers, f, indent=4) # Save sorted list with indentation + log.debug(f"Successfully saved updated supplier list to '{SUPPLIERS_CONFIG_PATH}'.") + except IOError as e: + log.error(f"Could not write to '{SUPPLIERS_CONFIG_PATH}': {e}", exc_info=True) + except Exception as e: + log.error(f"An unexpected error occurred saving '{SUPPLIERS_CONFIG_PATH}': {e}", exc_info=True) + + + def createEditor(self, parent, option, index): + """Creates the QLineEdit editor with a QCompleter.""" + editor = QLineEdit(parent) + completer = QCompleter(self.known_suppliers, editor) + completer.setCaseSensitivity(Qt.CaseInsensitive) + completer.setFilterMode(Qt.MatchContains) # More flexible matching + completer.setCompletionMode(QCompleter.PopupCompletion) # Standard popup + editor.setCompleter(completer) + return editor + + def setEditorData(self, editor: QLineEdit, index: QModelIndex): + """Sets the editor's initial data from the model.""" + # Use EditRole as defined in the model's data() method for supplier + value = index.model().data(index, Qt.EditRole) + editor.setText(str(value) if value is not None else "") + + def setModelData(self, editor: QLineEdit, model, index: QModelIndex): + """Commits the editor's data back to the model and handles new suppliers.""" + final_text = editor.text().strip() + value_to_set = final_text if final_text else None # Set None if empty after stripping + + # Set data in the model first + model.setData(index, value_to_set, Qt.EditRole) + + # Add new supplier if necessary + if final_text and final_text not in self.known_suppliers: + log.info(f"Adding new supplier '{final_text}' to known list.") + self.known_suppliers.append(final_text) + self.known_suppliers.sort() # Keep the list sorted + + # Update the completer's model immediately + completer = editor.completer() + if completer: + completer.model().setStringList(self.known_suppliers) + + # Save the updated list back to the file + self._save_suppliers() + + def updateEditorGeometry(self, editor, option, index): + """Ensures the editor widget is placed correctly.""" editor.setGeometry(option.rect) \ No newline at end of file diff --git a/gui/main_window.py b/gui/main_window.py index b053ce5..ea05648 100644 --- a/gui/main_window.py +++ b/gui/main_window.py @@ -29,6 +29,7 @@ from rule_structure import SourceRule, AssetRule, FileRule # Import Rule Structu # Removed: from gui.preview_table_model import PreviewTableModel, PreviewSortFilterProxyModel # Removed: from gui.rule_hierarchy_model import RuleHierarchyModel from gui.unified_view_model import UnifiedViewModel # Import the new unified model +from gui.delegates import LineEditDelegate, ComboBoxDelegate, SupplierSearchDelegate # Import delegates from gui.delegates import LineEditDelegate, ComboBoxDelegate # Import delegates # --- Backend Imports --- @@ -171,6 +172,9 @@ class MainWindow(QMainWindow): # --- Internal State --- self.current_asset_paths = set() # Store unique paths of assets added + self._pending_predictions = set() # Track input paths awaiting prediction results + self._accumulated_rules = {} # Store {input_path: SourceRule} as results arrive + self._source_file_lists = {} # Store {input_path: [file_list]} for context # Removed: self.rule_hierarchy_model = RuleHierarchyModel() # Removed: self._current_source_rule = None # The new model will hold the data @@ -218,7 +222,7 @@ class MainWindow(QMainWindow): # --- Connect Editor Signals --- self._connect_editor_change_signals() - # --- Adjust Splitter --- +# --- Adjust Splitter --- self.splitter.setSizes([400, 800]) # Initial size ratio # --- UI Setup Methods --- @@ -402,10 +406,11 @@ class MainWindow(QMainWindow): # Instantiate Delegates lineEditDelegate = LineEditDelegate(self.unified_view) comboBoxDelegate = ComboBoxDelegate(self.unified_view) + supplierSearchDelegate = SupplierSearchDelegate(self.unified_view) # Instantiate the new delegate # Set Delegates for Columns (adjust column indices as per UnifiedViewModel) # Assuming columns are: Name (0), Supplier (1), AssetType (2), TargetAsset (3), ItemType (4) - self.unified_view.setItemDelegateForColumn(UnifiedViewModel.COL_SUPPLIER, lineEditDelegate) + self.unified_view.setItemDelegateForColumn(UnifiedViewModel.COL_SUPPLIER, supplierSearchDelegate) # Use the new delegate for Supplier self.unified_view.setItemDelegateForColumn(UnifiedViewModel.COL_ASSET_TYPE, comboBoxDelegate) self.unified_view.setItemDelegateForColumn(UnifiedViewModel.COL_TARGET_ASSET, lineEditDelegate) self.unified_view.setItemDelegateForColumn(UnifiedViewModel.COL_ITEM_TYPE, comboBoxDelegate) @@ -667,6 +672,10 @@ class MainWindow(QMainWindow): if file_list is not None: # Check if extraction was successful (not None) log.debug(f"Extracted {len(file_list)} files for {input_path_str}. Emitting signal.") log.info(f"VERIFY: Extracted file list for '{input_path_str}'. Count: {len(file_list)}. Emitting prediction signal.") # DEBUG Verify + # Store file list and mark as pending before emitting + self._source_file_lists[input_path_str] = file_list + self._pending_predictions.add(input_path_str) + log.debug(f"Added '{input_path_str}' to pending predictions. Current pending: {self._pending_predictions}") self.start_prediction_signal.emit(input_path_str, file_list, selected_preset) else: log.warning(f"Skipping prediction for {input_path_str} due to extraction error.") @@ -844,7 +853,12 @@ class MainWindow(QMainWindow): self.current_asset_paths.clear() # self.preview_model.clear_data() # Old model removed self.unified_model.clear_data() # Clear the new model data - self.statusBar().showMessage("Asset queue cleared.", 3000) + # Clear accumulation state + self._pending_predictions.clear() + self._accumulated_rules.clear() + self._source_file_lists.clear() + log.info("Cleared accumulation state (_pending_predictions, _accumulated_rules, _source_file_lists).") + self.statusBar().showMessage("Asset queue and prediction state cleared.", 3000) else: self.statusBar().showMessage("Asset queue is already empty.", 3000) @@ -924,6 +938,15 @@ class MainWindow(QMainWindow): log.info(f"[{time.time():.4f}] Requesting background preview update for {len(input_paths)} items using Preset='{selected_preset}'") self.statusBar().showMessage(f"Updating preview for '{selected_preset}'...", 0) + + # --- Reset Accumulation State for this batch --- + log.debug("Clearing accumulated rules for new preview batch.") + self._accumulated_rules.clear() + # Reset pending predictions to only include paths in this update request + self._pending_predictions = set(input_paths) + log.debug(f"Reset pending predictions for batch: {self._pending_predictions}") + # Keep _source_file_lists, it might contain lists for paths already processed + # Clearing is handled by model's set_data now, no need to clear table view directly if self.prediction_thread and self.prediction_handler: # REMOVED Placeholder SourceRule creation @@ -981,8 +1004,10 @@ class MainWindow(QMainWindow): # Connect the new signal to the handler's run_prediction slot using QueuedConnection self.start_prediction_signal.connect(self.prediction_handler.run_prediction, Qt.ConnectionType.QueuedConnection) # Removed: self.prediction_handler.prediction_results_ready.connect(self.on_prediction_results_ready) # Old signal - self.prediction_handler.rule_hierarchy_ready.connect(self._on_rule_hierarchy_ready) # Connect the LIST signal - self.prediction_handler.prediction_finished.connect(self.on_prediction_finished) + # Assume PredictionHandler.rule_hierarchy_ready signal is changed to Signal(str, list) -> input_path, rules_list + self.prediction_handler.rule_hierarchy_ready.connect(self._on_rule_hierarchy_ready) # Connect the LIST signal (now with input_path) + # Assume PredictionHandler.prediction_finished signal is changed to Signal(str) -> input_path + self.prediction_handler.prediction_finished.connect(self.on_prediction_finished) # Connect finish signal (now with input_path) self.prediction_handler.status_message.connect(self.show_status_message) # --- REMOVED connections causing thread/handler cleanup --- # self.prediction_handler.prediction_finished.connect(self.prediction_thread.quit) @@ -1027,12 +1052,30 @@ class MainWindow(QMainWindow): # # This is no longer needed as _on_rule_hierarchy_ready handles data loading for the new model. # pass - @Slot() - def on_prediction_finished(self): - log.info(f"[{time.time():.4f}] --> Prediction finished signal received.") - # Optionally update status bar or re-enable controls if needed after prediction finishes - # (Controls are primarily managed by processing_finished, but prediction is a separate background task) - self.statusBar().showMessage("Preview updated.", 3000) +# Slot signature assumes prediction_finished signal is updated to emit input_path: Signal(str) + # Slot signature assumes prediction_finished signal is updated to emit input_path: Signal(str) + @Slot(str) + def on_prediction_finished(self, input_path: str): + """Handles the completion (potentially failure) of a single prediction task.""" + log.info(f"[{time.time():.4f}] --> Prediction finished signal received for: {input_path}") + + # Ensure path is removed from pending even if rule_hierarchy_ready wasn't emitted (e.g., critical error) + if input_path in self._pending_predictions: + log.warning(f"Prediction finished for '{input_path}', but it was still marked as pending. Removing.") + self._pending_predictions.discard(input_path) + # Check if this was the last pending item after an error + if not self._pending_predictions: + log.info("Prediction finished, and no more predictions are pending (potentially due to error). Finalizing model update.") + self._finalize_model_update() + else: + # Update status about remaining items + remaining_count = len(self._pending_predictions) + self.statusBar().showMessage(f"Prediction failed/finished for {Path(input_path).name}. Waiting for {remaining_count} more...", 5000) + else: + log.debug(f"Prediction finished for '{input_path}', which was already processed.") + + # Original status message might be misleading now, handled by accumulation logic. + # self.statusBar().showMessage("Preview updated.", 3000) # Removed @Slot(str, str, str) def update_file_status(self, input_path_str, status, message): @@ -1580,18 +1623,74 @@ class MainWindow(QMainWindow): # @Slot(object) # def _on_rule_updated(self, rule_object): ... - @Slot(list) # Changed signature to accept list +# Slot signature assumes rule_hierarchy_ready signal is updated to emit input_path: Signal(str, list) + # Slot signature matches rule_hierarchy_ready = Signal(list) + @Slot(list) def _on_rule_hierarchy_ready(self, source_rules_list: list): - log.debug(f"--> Entered _on_rule_hierarchy_ready with {len(source_rules_list)} SourceRule(s)") - """Receives the generated list of SourceRule hierarchies and updates the unified view model.""" - # Removed: log.info(f"Received rule hierarchy ready signal for input: {source_rule.input_path}") - # Removed: self._current_source_rule = source_rule # This concept might need rethinking if processing needs a specific rule - # Removed: self.rule_hierarchy_model.set_root_rule(source_rule) - # Removed: self.hierarchy_tree_view.expandToDepth(0) + """Receives prediction results (a list containing one SourceRule) for a single input path, + accumulates them, and updates the model when all are ready.""" - # Load the LIST of data into the new UnifiedViewModel - self.unified_model.load_data(source_rules_list) # Pass the list - log.debug("Unified view model updated with new list of SourceRules.") + # --- Extract input_path from the received rule --- + input_path = None + source_rule = None + if source_rules_list and isinstance(source_rules_list[0], SourceRule): + source_rule = source_rules_list[0] + input_path = source_rule.input_path + log.debug(f"--> Entered _on_rule_hierarchy_ready for '{input_path}' with {len(source_rules_list)} SourceRule(s)") + elif source_rules_list: + log.error(f"Received non-SourceRule object in list: {type(source_rules_list[0])}. Cannot process.") + # Attempt to find which pending prediction this might correspond to? Difficult. + # For now, we can't reliably remove from pending without the path. + return + else: + # This case might happen if prediction failed critically before creating a rule. + # The prediction_finished signal (which now includes input_path) should handle removing from pending. + log.warning("Received empty source_rules_list in _on_rule_hierarchy_ready. Prediction likely failed.") + return # Nothing to accumulate + + if input_path is None: + log.error("Could not determine input_path from received source_rules_list. Aborting accumulation.") + return + + if input_path not in self._pending_predictions: + log.warning(f"Received rule hierarchy for '{input_path}', but it was not in the pending set. Ignoring stale result? Pending: {self._pending_predictions}") + return # Ignore if not expected + + # --- Accumulate Result --- + if source_rule: # Check if we successfully got the rule object + self._accumulated_rules[input_path] = source_rule + log.debug(f"Accumulated rule for '{input_path}'. Total accumulated: {len(self._accumulated_rules)}") + else: + # This path is already handled by the initial checks, but log just in case. + log.warning(f"No valid SourceRule found for '{input_path}' to accumulate.") + + # --- Mark as Completed --- + self._pending_predictions.discard(input_path) + log.debug(f"Removed '{input_path}' from pending predictions. Remaining: {self._pending_predictions}") + + # --- Check for Completion --- + if not self._pending_predictions: + log.info("All pending predictions received. Finalizing model update.") + self._finalize_model_update() + else: + # Update status bar with progress + completed_count = len(self._accumulated_rules) + pending_count = len(self._pending_predictions) + total_count = completed_count + pending_count # This might be slightly off if some failed without rules + status_msg = f"Preview updated for {Path(input_path).name}. Waiting for {pending_count} more ({completed_count}/{total_count} requested)..." + self.statusBar().showMessage(status_msg, 5000) + log.debug(status_msg) + + + def _finalize_model_update(self): + """Combines accumulated rules and updates the UI model and view.""" + log.debug("Entering _finalize_model_update") + final_rules = list(self._accumulated_rules.values()) + log.info(f"Finalizing model with {len(final_rules)} accumulated SourceRule(s).") + + # Load the FINAL LIST of data into the UnifiedViewModel + self.unified_model.load_data(final_rules) + log.debug("Unified view model updated with final list of SourceRules.") # Resize columns to fit content after loading data for col in range(self.unified_model.columnCount()): @@ -1599,6 +1698,8 @@ class MainWindow(QMainWindow): log.debug("Unified view columns resized to contents.") self.unified_view.expandToDepth(1) # Expand Source -> Asset level + self.statusBar().showMessage(f"Preview complete for {len(final_rules)} asset(s).", 5000) + # --- Main Execution --- def run_gui(): diff --git a/gui/prediction_handler.py b/gui/prediction_handler.py index f703446..0848844 100644 --- a/gui/prediction_handler.py +++ b/gui/prediction_handler.py @@ -26,8 +26,8 @@ try: # from asset_processor import AssetProcessor, AssetProcessingError from rule_structure import SourceRule, AssetRule, FileRule # Removed AssetType, ItemType import config as app_config # Import project's config module - # Import the lists directly for easier access - from config import ALLOWED_ASSET_TYPES, ALLOWED_FILE_TYPES + # Import the new dictionaries directly for easier access + from config import ASSET_TYPE_DEFINITIONS, FILE_TYPE_DEFINITIONS BACKEND_AVAILABLE = True except ImportError as e: print(f"ERROR (PredictionHandler): Failed to import backend/config modules: {e}") @@ -209,8 +209,8 @@ class PredictionHandler(QObject): # --- Signals --- # Emitted when the hierarchical rule structure is ready for a single source rule_hierarchy_ready = Signal(list) # Emits a LIST containing ONE SourceRule object - # Emitted when prediction/hierarchy generation for a source is done - prediction_finished = Signal() + # Emitted when prediction/hierarchy generation for a source is done (emits the input_source_identifier) + prediction_finished = Signal(str) # Emitted for status updates status_message = Signal(str, int) @@ -261,7 +261,7 @@ class PredictionHandler(QObject): log.warning(f"Input source path does not exist: '{input_source_identifier}'. Skipping prediction.") self.status_message.emit("Input path not found.", 3000) self.rule_hierarchy_ready.emit([]) - self.prediction_finished.emit() + self.prediction_finished.emit(input_source_identifier) return @@ -269,30 +269,30 @@ class PredictionHandler(QObject): self.status_message.emit(f"Analyzing '{source_path.name}'...", 0) config: Configuration | None = None - allowed_asset_types: List[str] = [] - allowed_file_types: List[str] = [] # These are ItemType names + asset_type_definitions: Dict[str, Dict] = {} + file_type_definitions: Dict[str, Dict] = {} # These are ItemType names try: config = Configuration(preset_name) - # Load allowed types from the project's config module + # Load allowed types from the project's config module (now dictionaries) if app_config: - allowed_asset_types = getattr(app_config, 'ALLOWED_ASSET_TYPES', []) - allowed_file_types = getattr(app_config, 'ALLOWED_FILE_TYPES', []) - log.debug(f"Loaded allowed AssetTypes: {allowed_asset_types}") - log.debug(f"Loaded allowed FileTypes (ItemTypes): {allowed_file_types}") + asset_type_definitions = getattr(app_config, 'ASSET_TYPE_DEFINITIONS', {}) + file_type_definitions = getattr(app_config, 'FILE_TYPE_DEFINITIONS', {}) + log.debug(f"Loaded AssetType Definitions: {list(asset_type_definitions.keys())}") + log.debug(f"Loaded FileType Definitions (ItemTypes): {list(file_type_definitions.keys())}") else: - log.warning("Project config module not loaded. Cannot get allowed types.") + log.warning("Project config module not loaded. Cannot get type definitions.") except ConfigurationError as e: log.error(f"Failed to load configuration for preset '{preset_name}': {e}") self.status_message.emit(f"Error loading preset '{preset_name}': {e}", 5000) - self.prediction_finished.emit() + self.prediction_finished.emit(input_source_identifier) self._is_running = False return except Exception as e: log.exception(f"Unexpected error loading configuration or allowed types for preset '{preset_name}': {e}") self.status_message.emit(f"Unexpected error loading preset '{preset_name}'.", 5000) - self.prediction_finished.emit() + self.prediction_finished.emit(input_source_identifier) self._is_running = False return @@ -303,7 +303,7 @@ class PredictionHandler(QObject): except Exception as e: log.exception(f"Error during file classification for source '{input_source_identifier}': {e}") self.status_message.emit(f"Error classifying files: {e}", 5000) - self.prediction_finished.emit() + self.prediction_finished.emit(input_source_identifier) self._is_running = False return @@ -311,7 +311,7 @@ class PredictionHandler(QObject): log.warning(f"Classification yielded no assets for source '{input_source_identifier}'.") self.status_message.emit("No assets identified from files.", 3000) self.rule_hierarchy_ready.emit([]) # Emit empty list - self.prediction_finished.emit() + self.prediction_finished.emit(input_source_identifier) self._is_running = False return @@ -348,16 +348,16 @@ class PredictionHandler(QObject): # Ensure the predicted type is allowed, fallback if necessary # Now predicted_asset_type is already a string - if allowed_asset_types and predicted_asset_type not in allowed_asset_types: - log.warning(f"Predicted AssetType '{predicted_asset_type}' for asset '{asset_name}' is not in ALLOWED_ASSET_TYPES. Falling back.") + if asset_type_definitions and predicted_asset_type not in asset_type_definitions: + log.warning(f"Predicted AssetType '{predicted_asset_type}' for asset '{asset_name}' is not in ASSET_TYPE_DEFINITIONS. Falling back.") # Fallback logic: use the default from config if allowed, else first allowed type default_type = getattr(app_config, 'DEFAULT_ASSET_CATEGORY', 'Surface') - if default_type in allowed_asset_types: + if default_type in asset_type_definitions: predicted_asset_type = default_type - elif allowed_asset_types: - predicted_asset_type = allowed_asset_types[0] + elif asset_type_definitions: + predicted_asset_type = list(asset_type_definitions.keys())[0] # Use first key else: - pass # Keep the original prediction if allowed list is empty + pass # Keep the original prediction if definitions are empty asset_rule = AssetRule( @@ -370,35 +370,42 @@ class PredictionHandler(QObject): file_rules = [] for file_info in files_info: # Determine FileRule level overrides/defaults - item_type_override = file_info['item_type'] # From classification + base_item_type = file_info['item_type'] # Type from classification (e.g., COL, NRM, EXTRA) target_asset_name_override = file_info['asset_name'] # From classification - # Ensure the predicted item type is allowed (check against prefixed version), skipping EXTRA and FILE_IGNORE - # Only prefix if it's a map type that doesn't already have the prefix - prefixed_item_type = f"MAP_{item_type_override}" if not item_type_override.startswith("MAP_") and item_type_override not in ["FILE_IGNORE", "EXTRA", "MODEL"] else item_type_override - # Check if the (potentially prefixed) type is allowed, but only if it's not supposed to be ignored or extra - if allowed_file_types and prefixed_item_type not in allowed_file_types and item_type_override not in ["FILE_IGNORE", "EXTRA"]: - log.warning(f"Predicted ItemType '{item_type_override}' (checked as '{prefixed_item_type}') for file '{file_info['file_path']}' is not in ALLOWED_FILE_TYPES. Setting to FILE_IGNORE.") - item_type_override = "FILE_IGNORE" # Fallback to FILE_IGNORE string + # Determine the final item_type string (prefix maps, check if allowed) + final_item_type = base_item_type # Start with the base type + if not base_item_type.startswith("MAP_") and base_item_type not in ["FILE_IGNORE", "EXTRA", "MODEL"]: + # Prefix map types that don't already have it + final_item_type = f"MAP_{base_item_type}" + + # Check if the final type is allowed (exists as a key in config) + if file_type_definitions and final_item_type not in file_type_definitions and base_item_type not in ["FILE_IGNORE", "EXTRA"]: + log.warning(f"Predicted ItemType '{base_item_type}' (checked as '{final_item_type}') for file '{file_info['file_path']}' is not in FILE_TYPE_DEFINITIONS. Setting base type to FILE_IGNORE.") + final_item_type = "FILE_IGNORE" # Fallback base type to FILE_IGNORE string + # Output format is determined by the engine, not predicted here. Leave as None. output_format_override = None - + # User override for item type starts as None + item_type_override = None + # --- DEBUG LOG: Inspect data before FileRule creation --- log.debug(f" Creating FileRule for: {file_info['file_path']}") - log.debug(f" Using item_type_override: {item_type_override}") - log.debug(f" Using target_asset_name_override: {target_asset_name_override}") + log.debug(f" Base Item Type (from classification): {base_item_type}") + log.debug(f" Final Item Type (for model): {final_item_type}") + log.debug(f" Target Asset Name Override: {target_asset_name_override}") # Explicitly check and log the flag value from file_info is_gloss_source_value = file_info.get('is_gloss_source', 'MISSING') # Get value or 'MISSING' log.debug(f" Value for 'is_gloss_source' from file_info: {is_gloss_source_value}") # --- End DEBUG LOG --- - # TODO: Need to verify FileRule constructor accepts is_gloss_source - # and pass is_gloss_source_value if it does. # Pass the retrieved flag value to the constructor file_rule = FileRule( file_path=file_info['file_path'], # This is static info based on input + item_type=final_item_type, # Set the new base item_type field # --- Populate ONLY Overridable Fields --- - item_type_override=item_type_override, + # Initialize override with the classified type for display + item_type_override=final_item_type, target_asset_name_override=target_asset_name_override, output_format_override=output_format_override, is_gloss_source=is_gloss_source_value if isinstance(is_gloss_source_value, bool) else False, # Pass the flag, ensure boolean @@ -421,7 +428,7 @@ class PredictionHandler(QObject): log.exception(f"Error building rule hierarchy for source '{input_source_identifier}': {e}") self.status_message.emit(f"Error building rules: {e}", 5000) # Don't emit hierarchy, just finish - self.prediction_finished.emit() + self.prediction_finished.emit(input_source_identifier) self._is_running = False # Removed erroneous temp_dir_obj cleanup return @@ -439,7 +446,7 @@ class PredictionHandler(QObject): # Removed prediction_results_ready signal emission self.status_message.emit(f"Analysis complete for '{input_source_identifier}'.", 3000) - self.prediction_finished.emit() + self.prediction_finished.emit(input_source_identifier) self._is_running = False # Removed temp_dir_obj cleanup - not relevant here log.info(f"[{time.time():.4f}][T:{thread_id}] <-- Exiting PredictionHandler.run_prediction.") diff --git a/gui/unified_view_model.py b/gui/unified_view_model.py index c7112c8..e2b259d 100644 --- a/gui/unified_view_model.py +++ b/gui/unified_view_model.py @@ -1,15 +1,22 @@ # gui/unified_view_model.py -from PySide6.QtCore import QAbstractItemModel, QModelIndex, Qt +from PySide6.QtCore import QAbstractItemModel, QModelIndex, Qt, Signal # Added Signal +from PySide6.QtGui import QColor # Added for background role from pathlib import Path # Added for file_name extraction from rule_structure import SourceRule, AssetRule, FileRule # Removed AssetType, ItemType import +from config import ASSET_TYPE_DEFINITIONS, FILE_TYPE_DEFINITIONS # Added for coloring class UnifiedViewModel(QAbstractItemModel): + # --- Color Constants for Row Backgrounds --- + # Old colors removed, using config now + fixed source color + SOURCE_RULE_COLOR = QColor("#306091") # Fixed color for SourceRule rows + # ----------------------------------------- + """ A QAbstractItemModel for displaying and editing the hierarchical structure of SourceRule -> AssetRule -> FileRule. """ Columns = [ - "Name", "Supplier Override", "Asset-Type Override", + "Name", "Supplier", "Asset-Type Override", # Renamed "Supplier Override" "Target Asset Name Override", "Item-Type Override", "Status", "Output Path" ] @@ -165,55 +172,101 @@ class UnifiedViewModel(QAbstractItemModel): item = index.internalPointer() column = index.column() - # --- Handle different item types --- - if isinstance(item, SourceRule): # This might only be relevant if SourceRule is displayed - if role == Qt.DisplayRole: - if column == 0: return item.input_path - # Use supplier_override if set, otherwise empty string - if column == self.COL_SUPPLIER: return item.supplier_override if item.supplier_override is not None else "" - # Other columns return None or "" for SourceRule - elif role == Qt.EditRole: - # Return supplier_override for editing - if column == self.COL_SUPPLIER: return item.supplier_override if item.supplier_override is not None else "" + # --- Handle Background Role --- + if role == Qt.BackgroundRole: + # item is already fetched at line 172 + if isinstance(item, SourceRule): + return self.SOURCE_RULE_COLOR # Use the class constant + elif isinstance(item, AssetRule): + # Determine effective asset type + asset_type = item.asset_type_override if item.asset_type_override else item.asset_type + if asset_type: + type_info = ASSET_TYPE_DEFINITIONS.get(asset_type) + if type_info: + hex_color = type_info.get("color") + if hex_color: + try: + return QColor(hex_color) + except ValueError: + # Optional: Add logging for invalid hex color + # print(f"Warning: Invalid hex color '{hex_color}' for asset type '{asset_type}' in config.") + return None # Fallback for invalid hex + else: + # Optional: Add logging for missing color key + # print(f"Warning: No color defined for asset type '{asset_type}' in config.") + return None # Fallback if color key missing + else: + # Optional: Add logging for missing asset type definition + # print(f"Warning: Asset type '{asset_type}' not found in ASSET_TYPE_DEFINITIONS.") + return None # Fallback if type not in config + else: + return None # Fallback if no asset_type determined + elif isinstance(item, FileRule): + # Determine effective item type: Prioritize override, then use base type + effective_item_type = item.item_type_override if item.item_type_override is not None else item.item_type + if effective_item_type: + type_info = FILE_TYPE_DEFINITIONS.get(effective_item_type) + if type_info: + hex_color = type_info.get("color") + if hex_color: + try: + return QColor(hex_color) + except ValueError: + # Optional: Add logging for invalid hex color + # print(f"Warning: Invalid hex color '{hex_color}' for file type '{item_type}' in config.") + return None # Fallback for invalid hex + else: + # Optional: Add logging for missing color key + # print(f"Warning: No color defined for file type '{item_type}' in config.") + return None # Fallback if color key missing + else: + # File types often don't have specific colors, so no warning needed unless debugging + return None # Fallback if type not in config + else: + return None # Fallback if no item_type determined + else: # Other item types or if item is None + return None + + # --- Handle other roles (Display, Edit, etc.) --- + if isinstance(item, SourceRule): + if role == Qt.DisplayRole or role == Qt.EditRole: # Combine Display and Edit logic + if column == self.COL_NAME: + return Path(item.input_path).name # Display only basename for SourceRule + elif column == self.COL_SUPPLIER: + # Return override if set, otherwise the original identifier, else empty string + display_value = item.supplier_override if item.supplier_override is not None else item.supplier_identifier + return display_value if display_value is not None else "" + # Other columns return None or "" for SourceRule in Display/Edit roles return None # Default for SourceRule for other roles/columns elif isinstance(item, AssetRule): if role == Qt.DisplayRole: if column == self.COL_NAME: return item.asset_name - # Use asset_type_override if set, otherwise fall back to predicted asset_type if column == self.COL_ASSET_TYPE: display_value = item.asset_type_override if item.asset_type_override is not None else item.asset_type return display_value if display_value else "" - # Placeholder columns if column == self.COL_STATUS: return "" # Status (Not handled yet) if column == self.COL_OUTPUT_PATH: return "" # Output Path (Not handled yet) elif role == Qt.EditRole: - # Return asset_type_override for editing (delegate expects string or None) if column == self.COL_ASSET_TYPE: return item.asset_type_override # Return string or None return None # Default for AssetRule - elif isinstance(item, FileRule): if role == Qt.DisplayRole: if column == self.COL_NAME: return Path(item.file_path).name # Display only filename - # Use target_asset_name_override if set, otherwise empty string if column == self.COL_TARGET_ASSET: return item.target_asset_name_override if item.target_asset_name_override is not None else "" - # Use item_type_override if set, otherwise empty string (assuming predicted isn't stored directly) if column == self.COL_ITEM_TYPE: - # Assuming item_type_override stores the string name of the ItemType enum return item.item_type_override if item.item_type_override else "" if column == self.COL_STATUS: return "" # Status (Not handled yet) if column == self.COL_OUTPUT_PATH: return "" # Output Path (Not handled yet) elif role == Qt.EditRole: - # Return target_asset_name_override for editing if column == self.COL_TARGET_ASSET: return item.target_asset_name_override if item.target_asset_name_override is not None else "" - # Return item_type_override for editing (delegate expects string or None) if column == self.COL_ITEM_TYPE: return item.item_type_override # Return string or None return None # Default for FileRule - return None # Should not be reached if item is one of the known types + return None # Default return if role/item combination not handled def setData(self, index: QModelIndex, value, role: int = Qt.EditRole) -> bool: """Sets the role data for the item at index to value.""" @@ -229,10 +282,17 @@ class UnifiedViewModel(QAbstractItemModel): # --- Handle different item types --- if isinstance(item, SourceRule): # If SourceRule is editable if column == self.COL_SUPPLIER: - # Ensure value is string or None - new_value = str(value).strip() if value is not None else None - if new_value == "": new_value = None # Treat empty string as None - # Update supplier_override + # Get the new value, strip whitespace, treat empty as None + new_value = str(value).strip() if value is not None and str(value).strip() else None + + # Get the original identifier (assuming it exists on SourceRule) + original_identifier = getattr(item, 'supplier_identifier', None) + + # If the new value is the same as the original, clear the override + if new_value == original_identifier: + new_value = None # Effectively removes the override + + # Update supplier_override only if it's different if item.supplier_override != new_value: item.supplier_override = new_value changed = True @@ -254,8 +314,122 @@ class UnifiedViewModel(QAbstractItemModel): if new_value == "": new_value = None # Treat empty string as None # Update target_asset_name_override if item.target_asset_name_override != new_value: + old_value = item.target_asset_name_override # Store old value for potential revert/comparison item.target_asset_name_override = new_value changed = True + + # --- Start: New Direct Model Restructuring Logic --- + old_parent_asset = getattr(item, 'parent_asset', None) + if old_parent_asset: # Ensure we have the old parent + source_rule = getattr(old_parent_asset, 'parent_source', None) + if source_rule: # Ensure we have the grandparent + new_target_name = new_value # Can be None or a string + + # Get old parent index and source row + try: + grandparent_row = self._source_rules.index(source_rule) + old_parent_row = source_rule.assets.index(old_parent_asset) + source_row = old_parent_asset.files.index(item) + old_parent_index = self.createIndex(old_parent_row, 0, old_parent_asset) + grandparent_index = self.createIndex(grandparent_row, 0, source_rule) # Needed for insert/remove parent + except ValueError: + print("Error: Could not find item, parent, or grandparent in model structure during setData.") + item.target_asset_name_override = old_value # Revert data change + return False # Indicate failure + + target_parent_asset = None + target_parent_index = QModelIndex() + target_parent_row = -1 # Row within source_rule.assets + target_row = -1 # Row within target_parent_asset.files + move_occurred = False # Flag to track if a move happened + + # 1. Find existing target parent + if new_target_name: # Only search if a specific target is given + for i, asset in enumerate(source_rule.assets): + if asset.asset_name == new_target_name: + target_parent_asset = asset + target_parent_row = i + target_parent_index = self.createIndex(target_parent_row, 0, target_parent_asset) + break + + # 2. Handle Move/Creation + if target_parent_asset: + # --- Move to Existing Parent --- + if target_parent_asset != old_parent_asset: # Don't move if target is the same as old parent + target_row = len(target_parent_asset.files) # Append to the end + # print(f"DEBUG: Moving {Path(item.file_path).name} from {old_parent_asset.asset_name} ({source_row}) to {target_parent_asset.asset_name} ({target_row})") + self.beginMoveRows(old_parent_index, source_row, source_row, target_parent_index, target_row) + # Restructure internal data + old_parent_asset.files.pop(source_row) + target_parent_asset.files.append(item) + item.parent_asset = target_parent_asset # Update parent reference + self.endMoveRows() + move_occurred = True + else: + # Target is the same as the old parent. No move needed. + pass + + elif new_target_name: # Only create if a *new* specific target name was given + # --- Create New Parent and Move --- + # print(f"DEBUG: Creating new parent '{new_target_name}' and moving {Path(item.file_path).name}") + # Create new AssetRule + new_asset_rule = AssetRule(asset_name=new_target_name) + new_asset_rule.asset_type = old_parent_asset.asset_type # Copy type from old parent + new_asset_rule.asset_type_override = old_parent_asset.asset_type_override # Copy override too + new_asset_rule.parent_source = source_rule # Set parent reference + + # Determine insertion row for the new parent (e.g., append) + new_parent_row = len(source_rule.assets) + # print(f"DEBUG: Inserting new parent at row {new_parent_row} under {Path(source_rule.input_path).name}") + + # Emit signals for inserting the new parent row + self.beginInsertRows(grandparent_index, new_parent_row, new_parent_row) + source_rule.assets.insert(new_parent_row, new_asset_rule) # Insert into data structure + self.endInsertRows() + + # Get index for the newly inserted parent + target_parent_index = self.createIndex(new_parent_row, 0, new_asset_rule) + target_row = 0 # Insert file at the beginning of the new parent (for signal) + + # Emit signals for moving the file row + # print(f"DEBUG: Moving {Path(item.file_path).name} from {old_parent_asset.asset_name} ({source_row}) to new {new_asset_rule.asset_name} ({target_row})") + self.beginMoveRows(old_parent_index, source_row, source_row, target_parent_index, target_row) + # Restructure internal data + old_parent_asset.files.pop(source_row) + new_asset_rule.files.append(item) # Append is fine, target_row=0 was for signal + item.parent_asset = new_asset_rule # Update parent reference + self.endMoveRows() + move_occurred = True + + # Update target_parent_asset for potential cleanup check later + target_parent_asset = new_asset_rule + + else: # new_target_name is None or empty + # No move happens when the override is simply cleared. + pass + + # 3. Cleanup Empty Old Parent (only if a move occurred and old parent is empty) + if move_occurred and not old_parent_asset.files: + # print(f"DEBUG: Removing empty old parent {old_parent_asset.asset_name}") + try: + # Find the row of the old parent again, as it might have shifted + old_parent_row_for_removal = source_rule.assets.index(old_parent_asset) + # print(f"DEBUG: Removing parent at row {old_parent_row_for_removal} under {Path(source_rule.input_path).name}") + self.beginRemoveRows(grandparent_index, old_parent_row_for_removal, old_parent_row_for_removal) + source_rule.assets.pop(old_parent_row_for_removal) + self.endRemoveRows() + except ValueError: + print(f"Error: Could not find old parent '{old_parent_asset.asset_name}' for removal.") + # Log error, but continue + else: + print("Error: Could not find grandparent SourceRule during setData restructuring.") + item.target_asset_name_override = old_value # Revert + return False + else: + print("Error: Could not find parent AssetRule during setData restructuring.") + item.target_asset_name_override = old_value # Revert + return False + # --- End: New Direct Model Restructuring Logic --- elif column == self.COL_ITEM_TYPE: # Item-Type Override # Delegate provides string value (e.g., "MAP_COL") or None new_value = str(value) if value is not None else None diff --git a/llm_prototype/__pycache__/config_llm.cpython-313.pyc b/llm_prototype/__pycache__/config_llm.cpython-313.pyc deleted file mode 100644 index 6a94fe689fdb50b828a13e9dd22931a41febd695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2763 zcma)8+iu%N8m44Rc4W!%Nsiq(%``2FdLdJG+!kH$0n3$`SglUg$Z3LgK+x1sVoP$k z!%-4R@M8Ba*o(beU|*q6v$_=Kc3;3rUSR*BEZc;;zzP`7aOR)yKYqXXA(zW2@GJj) zsdslpQT`)eX1}G&#fN{u;-3mun1T~5fs-tW=h$3P!SmlI*gVXs?-Mv(OyC6=i!koM z$l#@75@(AEIM2cPao--P`|e2?A1TP%aO z*%JPUW$}HM!#ivlKVWyeAMZXK?)5kij*7*D{eAW8uhfGt)q}^6j}9Imep!5VP_%j` zFIvr`BB?dRe7S;~V!ow6sfziUhQAYY7-O-}=Z@>} z!S0+$m8eUZSSUNT-4BUKYwj88P?4@v=9#Xz)1v)u&nICh7Hfo?uIpICRn0qdh|f{O zvfO?MPKa#T3Bf9hc(5QOn#X=)6EwEvj$NjUg z&uqAhuw`;inB#XreBoqjC3sWgj_%dFMS712x_?lej&5dL9^;| zZWKlcbu?Eq1GWPVM5OdLoIy=ix;|y3BeEwxBNpxY4!{i8Mx!T{s%}&(xNUrk8};+^ z;pS+hKX2-#wq7=BTGMF1XzCdD@7>rhX>I*!qg9Cx@}tq^`wK&VuGN~=XnW_Td{x7^ z@}vTCl}25nt&T>GlXml@ZQ#OV5J(s*9E|P{tL6_wnW)K?5 zb4|XX#@UZR1=vIAQB?khZ+hg>5qhMm>Z5`bEE6b0=sgfIc@`BX6vC7(vWjlr28NO@ zWrG+(tsin(Qq+fGAE7H>!FQus)k^wtqgvKm=jS(}OlI|n>})ZtDGPs~v{OJ)$0?vE z<{5LW0x-e17#LeX*z0$?a<-VstzH2UZmCmj$z{WWf(ael0c&N81qD&ast(u*l`dsM zFxaJjSJJpqufCAg!h4RS^2}ujWP}+7&+&skHv*IQV&=9XP?R|U13Z?e$c8ozNCemp zH;@ZDuTkQL#gKj>i1C8>g-Ax0LA@I{!zgol8|RR;M!%8LC=LMg$8L~ z?!rk2GHr3v$-K%n{e5V7)>d%a4 zT1#v+Ta8+?ZM1cu91zlIYVBjOcALCnbrzv3ev0)gv1=}i)muCkTi0^&l!^Rx=eWTG zk)P>`(L-!rtGSsa@!*!q*zx^RTx;xbJJvyBN4eP1&&mh+RVB#NqtpGzl58?nrw99c z2fx04J4Ef-zgd&MhJOp7Q~NbNjk=BeSh3(+fiiYm2FUrsIR+fLVjO*I&Z#ov0g z(|5`5**Bmy0VDi3JTB%EiNwWKT&ygiyMZ@+yxS>AekI$8R7oOw9O-T&9~arW~`Zu@OrWWShXKOHZ9ChivA z<(Kksb@lyD@*d3V7g=TbFNuq!vQkRIb9s=QEwk|Tt_TE^@ tg9+OQ)A^&rv9by8pL{b`9>DzYcVp!~%n$a*%J#+L>gxR8a_npH>A%qLZzKQ! diff --git a/rule_structure.py b/rule_structure.py index b25af7b..5439201 100644 --- a/rule_structure.py +++ b/rule_structure.py @@ -4,6 +4,7 @@ from typing import List, Dict, Any, Tuple @dataclasses.dataclass class FileRule: file_path: str = None + item_type: str = None # Base type determined by classification (e.g., MAP_COL, EXTRA) item_type_override: str = None # Renamed from map_type_override target_asset_name_override: str = None # Added override field resolution_override: Tuple[int, int] = None