Improve diff output with human-readable formatting
- Show each record with clear before/after versions - Display TTL changes when values are updated (old_ttl -> new_ttl) - Organize output into DELETED, ADDED, and UPDATED sections - Use visual indicators (-, +, ~) for record operations - Format with proper indentation and alignment for readability - Show full record details including all values and TTLs
This commit is contained in:
@@ -865,29 +865,69 @@ class DNSZoneManager:
|
||||
return result
|
||||
|
||||
def _format_diff(self, changes: dict) -> dict:
|
||||
"""Format changes as a diff structure for diff mode."""
|
||||
diff_before = {}
|
||||
diff_after = {}
|
||||
"""Format changes as a diff structure for diff mode with human-readable output."""
|
||||
diff_content = []
|
||||
|
||||
# Process adds
|
||||
for record in changes['adds']:
|
||||
record_key = f"{record['name'].to_text()} {record['type']}"
|
||||
diff_after[record_key] = sorted(str(v) for v in record['values'])
|
||||
# Process deletes - records being removed
|
||||
if changes['deletes']:
|
||||
diff_content.append("DELETED RECORDS:")
|
||||
for record in sorted(changes['deletes'], key=lambda r: (r['name'].to_text(), r['type'])):
|
||||
record_name = record['name'].to_text()
|
||||
record_type = record['type']
|
||||
ttl = record.get('ttl', 'default')
|
||||
values = sorted(str(v) for v in record['values'])
|
||||
diff_content.append(f" - {record_name:<50} {record_type:<10} TTL={ttl}")
|
||||
for value in values:
|
||||
diff_content.append(f" {value}")
|
||||
diff_content.append("")
|
||||
|
||||
# Process deletes
|
||||
for record in changes['deletes']:
|
||||
record_key = f"{record['name'].to_text()} {record['type']}"
|
||||
diff_before[record_key] = sorted(str(v) for v in record['values'])
|
||||
# Process adds - records being added
|
||||
if changes['adds']:
|
||||
diff_content.append("ADDED RECORDS:")
|
||||
for record in sorted(changes['adds'], key=lambda r: (r['name'].to_text(), r['type'])):
|
||||
record_name = record['name'].to_text()
|
||||
record_type = record['type']
|
||||
ttl = record.get('ttl', 'default')
|
||||
values = sorted(str(v) for v in record['values'])
|
||||
diff_content.append(f" + {record_name:<50} {record_type:<10} TTL={ttl}")
|
||||
for value in values:
|
||||
diff_content.append(f" {value}")
|
||||
diff_content.append("")
|
||||
|
||||
# Process updates - show both before and after
|
||||
for record in changes['updates']:
|
||||
record_key = f"{record['name'].to_text()} {record['type']}"
|
||||
diff_before[record_key] = sorted(str(v) for v in record['old_values'])
|
||||
diff_after[record_key] = sorted(str(v) for v in record['new_values'])
|
||||
# Process updates - records being changed
|
||||
if changes['updates']:
|
||||
diff_content.append("UPDATED RECORDS:")
|
||||
for record in sorted(changes['updates'], key=lambda r: (r['name'].to_text(), r['type'])):
|
||||
record_name = record['name'].to_text()
|
||||
record_type = record['type']
|
||||
old_ttl = record.get('old_ttl', 'default')
|
||||
new_ttl = record.get('new_ttl', 'default')
|
||||
old_values = sorted(str(v) for v in record['old_values'])
|
||||
new_values = sorted(str(v) for v in record['new_values'])
|
||||
|
||||
diff_content.append(f" ~ {record_name:<50} {record_type:<10}")
|
||||
|
||||
# Show TTL change if it changed
|
||||
if old_ttl != new_ttl:
|
||||
diff_content.append(f" TTL: {old_ttl} -> {new_ttl}")
|
||||
else:
|
||||
diff_content.append(f" TTL: {old_ttl}")
|
||||
|
||||
# Show old values
|
||||
diff_content.append(f" Before:")
|
||||
for value in old_values:
|
||||
diff_content.append(f" - {value}")
|
||||
|
||||
# Show new values
|
||||
diff_content.append(f" After:")
|
||||
for value in new_values:
|
||||
diff_content.append(f" + {value}")
|
||||
diff_content.append("")
|
||||
|
||||
# Format as before/after with the content as text
|
||||
return {
|
||||
'before': diff_before,
|
||||
'after': diff_after
|
||||
'before': 'DNS Zone Records (Before)',
|
||||
'after': '\n'.join(diff_content) if diff_content else 'No changes'
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user