Improve --diff report output with columnar format

Enhanced readability with table-style columnar output

Changes:
- Converted vertical list format to columnar table format
- First column: Parameter name
- Second column: Device 1 value
- Third column: Device 2 value
- Added header row with device names
- Auto-adjusts column widths based on content
- Truncates very long values (>60 chars) with "..."
- Maintains section separation (Firmware, Network, MQTT, etc.)

Before:
  SetOption32:
    KitchenMain = 40
    KitchenBar  = 8

After:
  Parameter        KitchenMain-3040      KitchenBar-7845
  ---------------  --------------------  --------------------
  SetOption32      40                    8

Much easier to scan and compare values side-by-side!

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Mike Geppert 2026-01-04 11:22:43 -06:00
parent 91c471d4b0
commit cacdfe7a77

View File

@ -240,18 +240,44 @@ class DeviceComparison:
def _print_differences(self, differences: List[Dict], device1_name: str, device2_name: str) -> None: def _print_differences(self, differences: List[Dict], device1_name: str, device2_name: str) -> None:
""" """
Print list of differences in readable format. Print list of differences in columnar format.
Args: Args:
differences: List of difference dictionaries differences: List of difference dictionaries
device1_name: First device name device1_name: First device name
device2_name: Second device name device2_name: Second device name
""" """
for diff in differences: if not differences:
key = diff['key'] return
val1 = diff['device1_value']
val2 = diff['device2_value']
print(f"\n{key}:") # Calculate column widths
print(f" {device1_name:20} = {val1}") max_key_len = max(len(str(diff['key'])) for diff in differences)
print(f" {device2_name:20} = {val2}") max_val1_len = max(len(str(diff['device1_value'])) for diff in differences)
max_val2_len = max(len(str(diff['device2_value'])) for diff in differences)
# Ensure minimum column widths
key_width = max(max_key_len, 15)
val1_width = max(max_val1_len, len(device1_name), 20)
val2_width = max(max_val2_len, len(device2_name), 20)
# Truncate device names if too long for column headers
dev1_header = device1_name[:val1_width]
dev2_header = device2_name[:val2_width]
# Print header row
print(f"\n{'Parameter':<{key_width}} {dev1_header:<{val1_width}} {dev2_header:<{val2_width}}")
print("-" * key_width + " " + "-" * val1_width + " " + "-" * val2_width)
# Print each difference
for diff in differences:
key = str(diff['key'])
val1 = str(diff['device1_value'])
val2 = str(diff['device2_value'])
# Truncate values if too long
if len(val1) > 60:
val1 = val1[:57] + "..."
if len(val2) > 60:
val2 = val2[:57] + "..."
print(f"{key:<{key_width}} {val1:<{val1_width}} {val2:<{val2_width}}")