- Created modular Python files (main, utils, discovery, configuration, console_settings, unknown_devices, reporting, unifi_client) - Moved documentation files to docs/ - Moved data files to data/ - Removed old monolithic TasmotaManager.py and TasmotaManager_fixed.py - Updated .gitignore and pyproject.toml - All functionality preserved, command-line interface unchanged Version: 2.0.0
73 lines
3.3 KiB
Markdown
73 lines
3.3 KiB
Markdown
# Blank Template Value Handling
|
|
|
|
## Issue Description
|
|
|
|
When a key in the `config_other` field of the `network_configuration.json` file has a blank or empty value, the system should not check or set the template or device name. Instead, it should print a message to the user that the device must be set manually in Configuration/Module to the string in the Key.
|
|
|
|
## Changes Made
|
|
|
|
### 1. Modified the `check_and_update_template` Method
|
|
|
|
The `check_and_update_template` method in `TasmotaManager.py` was modified to check if a value is blank or empty before proceeding with template checks:
|
|
|
|
```python
|
|
if device_name in config_other:
|
|
# Key matches device name, check if value is blank or empty
|
|
template_value = config_other[device_name]
|
|
if not template_value or template_value.strip() == "":
|
|
# Value is blank or empty, print message and skip template check
|
|
self.logger.info(f"{name}: Device name '{device_name}' matches key in config_other, but value is blank or empty")
|
|
print(f"\nDevice {name} at {ip} must be set manually in Configuration/Module to: {device_name}")
|
|
print(f"The config_other entry has a blank value for key: {device_name}")
|
|
return False
|
|
elif current_template != template_value:
|
|
# Template doesn't match, write value to template
|
|
# ... (existing code)
|
|
```
|
|
|
|
The changes include:
|
|
1. Adding a check to see if the template value is blank or empty (`not template_value or template_value.strip() == ""`)
|
|
2. If the value is blank or empty, logging a message and printing a user-friendly message
|
|
3. Returning `False` to skip the rest of the template check
|
|
|
|
### 2. Created a Test Script
|
|
|
|
A test script `test_blank_template_value.py` was created to validate the changes. The script:
|
|
|
|
1. Loads the configuration from `network_configuration.json`
|
|
2. Finds a key in `config_other` that has a non-empty value
|
|
3. Sets the value for this key to an empty string
|
|
4. Creates a mock Status 0 response that returns this key as the device name
|
|
5. Patches the `requests.get` method to return this mock response
|
|
6. Calls the `check_and_update_template` method
|
|
7. Verifies that the method returns `False`, indicating that the template check was skipped
|
|
|
|
## Testing
|
|
|
|
The changes were tested using the `test_blank_template_value.py` script, which confirmed that:
|
|
|
|
1. When a key in `config_other` has a blank or empty value, the `check_and_update_template` method returns `False`
|
|
2. The template check is skipped, and no attempt is made to set the template or device name
|
|
3. A message is printed to the user indicating that the device must be set manually in Configuration/Module
|
|
|
|
## Example
|
|
|
|
Consider the following entry in `network_configuration.json`:
|
|
|
|
```json
|
|
"Sonoff S31": ""
|
|
```
|
|
|
|
When a device with the name "Sonoff S31" is encountered, the system will:
|
|
|
|
1. Skip the template check
|
|
2. Print a message to the user:
|
|
```
|
|
Device Sonoff S31 at 192.168.8.123 must be set manually in Configuration/Module to: Sonoff S31
|
|
The config_other entry has a blank value for key: Sonoff S31
|
|
```
|
|
3. Return `False` from the `check_and_update_template` method
|
|
|
|
## Conclusion
|
|
|
|
These changes ensure that when a key in `config_other` has a blank or empty value, the system skips the template check and prints a message to the user, as required by the issue description. This provides a better user experience by clearly indicating what action the user needs to take. |