Skip to content

Commit 64793c9

Browse files
fix(differ): improve array item handling in schema comparison
- Ensure proper handling of array items in the schema comparison module. - Update logic to check for None values and provide clearer output for empty items. - Adjust item field summaries to include a count of additional fields when more than five are present.
1 parent cba6fa6 commit 64793c9

1 file changed

Lines changed: 19 additions & 13 deletions

File tree

schema-monitor/core/differ.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,18 @@ def _field_summary(field_data: dict[str, Any]) -> str:
7070

7171
if field_type == "array" and "items" in field_data:
7272
items = field_data["items"]
73-
items_type = items.get("type", "unknown")
74-
if items_type == "object" and "fields" in items:
75-
item_fields = list(items["fields"].keys())
76-
if len(item_fields) <= 5:
77-
parts.append(f"items: {items_type} [{', '.join(item_fields)}]")
73+
if items is not None:
74+
items_type = items.get("type", "unknown")
75+
if items_type == "object" and "fields" in items:
76+
item_fields = list(items["fields"].keys())
77+
if len(item_fields) <= 5:
78+
parts.append(f"items: {items_type} [{', '.join(item_fields)}]")
79+
else:
80+
parts.append(f"items: {items_type} [{', '.join(item_fields[:5])}, ... +{len(item_fields) - 5}]")
7881
else:
79-
parts.append(f"items: {items_type} [{', '.join(item_fields[:5])}, ... +{len(item_fields) - 5}]")
82+
parts.append(f"items: {items_type}")
8083
else:
81-
parts.append(f"items: {items_type}")
84+
parts.append("items: empty")
8285

8386
if "sample" in field_data:
8487
sample = str(field_data["sample"])
@@ -116,13 +119,16 @@ def _field_to_json_preview(field_data: dict[str, Any], max_depth: int = 2) -> di
116119

117120
if field_data.get("type") == "array" and "items" in field_data:
118121
items = field_data["items"]
119-
if items.get("type") == "object" and "fields" in items:
120-
sub_fields = {}
121-
for name, sub_data in items["fields"].items():
122-
sub_fields[name] = sub_data.get("type", "unknown")
123-
result["items"] = {"type": "object", "fields": sub_fields}
122+
if items is not None:
123+
if items.get("type") == "object" and "fields" in items:
124+
sub_fields = {}
125+
for name, sub_data in items["fields"].items():
126+
sub_fields[name] = sub_data.get("type", "unknown")
127+
result["items"] = {"type": "object", "fields": sub_fields}
128+
else:
129+
result["items"] = {"type": items.get("type", "unknown")}
124130
else:
125-
result["items"] = {"type": items.get("type", "unknown")}
131+
result["items"] = {"type": "empty"}
126132

127133
return result
128134

0 commit comments

Comments
 (0)