From 90d43d1ed23ecca887dd951cb783f784912a99d8 Mon Sep 17 00:00:00 2001 From: Tobias Kunze Date: Thu, 26 Jun 2025 11:49:18 +0200 Subject: [PATCH] Move fieldset nesting one level down --- src/servala/core/crd.py | 65 ++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 37 deletions(-) diff --git a/src/servala/core/crd.py b/src/servala/core/crd.py index e0d05e8..6499a59 100644 --- a/src/servala/core/crd.py +++ b/src/servala/core/crd.py @@ -205,8 +205,8 @@ class CrdModelFormMixin: def strip_title(self, field_name, label): field = self.fields[field_name] - if field and field.label.startswith(label): - field.label = field.label[len(label) :] + if field and (position := field.label.find(label)) != -1: + field.label = field.label[position + len(label) :] def get_fieldsets(self): fieldsets = [] @@ -230,7 +230,7 @@ class CrdModelFormMixin: # Process spec fields others = [] - nested_fieldsets = {} + top_level_fieldsets = {} hidden_spec_fields = [] for field_name in self.fields: @@ -242,45 +242,36 @@ class CrdModelFormMixin: parts = field_name.split(".") if len(parts) == 2: # Top-level spec field others.append(field_name) - else: - parent_key = parts[1] - if not nested_fieldsets.get(parent_key): - nested_fieldsets[parent_key] = { + elif ( + len(parts) == 3 + ): # Second-level field - promote to top-level fieldset + fieldset_key = f"{parts[1]}.{parts[2]}" + if not top_level_fieldsets.get(fieldset_key): + top_level_fieldsets[fieldset_key] = { "fields": [], - "fieldsets": {}, - "title": deslugify(parent_key), + "fieldsets": [], + "title": f"{deslugify(parts[2])}", } - parent = nested_fieldsets[parent_key] - if len(parts) == 3: # Top-level within fieldset - parent["fields"].append(field_name) - else: - sub_key = parts[2] - if not parent["fieldsets"].get(sub_key): - parent["fieldsets"][sub_key] = { - "title": deslugify(sub_key), - "fields": [], - } - parent["fieldsets"][sub_key]["fields"].append(field_name) + top_level_fieldsets[fieldset_key]["fields"].append(field_name) + else: # Third-level and deeper - group by first two levels + fieldset_key = f"{parts[1]}.{parts[2]}" + if not top_level_fieldsets.get(fieldset_key): + top_level_fieldsets[fieldset_key] = { + "fields": [], + "fieldsets": [], + "title": f"{deslugify(parts[2])}", + } + top_level_fieldsets[fieldset_key]["fields"].append(field_name) - # Add nested fieldsets to fieldsets - for group in nested_fieldsets.values(): - total_fields = 0 - for fieldset in group["fieldsets"].values(): - if (field_count := len(fieldset["fields"])) == 1: - group["fields"].append(fieldset["fields"][0]) - fieldset["fields"] = [] - else: - title = f"{group['title']}: {fieldset['title']}: " - for field in fieldset["fields"]: - self.strip_title(field, title) - total_fields += field_count - if (total_fields + len(group["fields"])) == 1: - others.append(group["fields"][0]) + # Add promoted fieldsets to fieldsets + for fieldset in top_level_fieldsets.values(): + if len(fieldset["fields"]) == 1: + others.append(fieldset["fields"][0]) else: - title = f"{group['title']}: " - for field in group["fields"]: + title = f"{fieldset['title']}: " + for field in fieldset["fields"]: self.strip_title(field, title) - fieldsets.append(group) + fieldsets.append(fieldset) # Add 'others' tab if there are any fields if others: