From 3e466fb011a94d4348fa7cfd4921b5768c67afed Mon Sep 17 00:00:00 2001 From: Tobias Kunze Date: Sun, 25 May 2025 22:55:37 +0200 Subject: [PATCH] Instance form and template improvements --- src/servala/core/models/service.py | 12 ++++-- src/servala/frontend/forms/service.py | 29 +++++++++------ .../service_instance_delete_form.html | 11 +++++- .../service_instance_detail.html | 37 ++++++++++++------- src/servala/frontend/views/service.py | 37 +++++++++++++------ 5 files changed, 82 insertions(+), 44 deletions(-) diff --git a/src/servala/core/models/service.py b/src/servala/core/models/service.py index 4824c47..5540d22 100644 --- a/src/servala/core/models/service.py +++ b/src/servala/core/models/service.py @@ -374,9 +374,11 @@ class ControlPlaneCRD(ServalaModelMixin, models.Model): @cached_property def kind_plural(self): - if hasattr(self.resource_definition, 'status') and \ - hasattr(self.resource_definition.status, 'accepted_names') and \ - self.resource_definition.status.accepted_names: + if ( + hasattr(self.resource_definition, "status") + and hasattr(self.resource_definition.status, "accepted_names") + and self.resource_definition.status.accepted_names + ): return self.resource_definition.status.accepted_names.plural if self.kind.endswith("s"): return self.kind.lower() @@ -648,7 +650,9 @@ class ServiceInstance(ServalaModelMixin, models.Model): self.is_deleted = True self.deleted_at = timezone.now() self.deleted_by = user - self.save(update_fields=["is_deleted", "deleted_at", "deleted_by", "updated_at"]) + self.save( + update_fields=["is_deleted", "deleted_at", "deleted_by", "updated_at"] + ) self._clear_kubernetes_caches() diff --git a/src/servala/frontend/forms/service.py b/src/servala/frontend/forms/service.py index 09833d9..04fe2df 100644 --- a/src/servala/frontend/forms/service.py +++ b/src/servala/frontend/forms/service.py @@ -6,6 +6,7 @@ from servala.core.models import ( ControlPlane, Service, ServiceCategory, + ServiceInstance, ServiceOffering, ) @@ -37,6 +38,8 @@ class ControlPlaneSelectForm(forms.Form): def __init__(self, *args, planes=None, **kwargs): super().__init__(*args, **kwargs) self.fields["control_plane"].queryset = planes + if planes and planes.count() == 1: + self.fields["control_plane"].initial = planes.first() class ServiceInstanceFilterForm(forms.Form): @@ -68,23 +71,23 @@ class ServiceInstanceFilterForm(forms.Form): def filter_queryset(self, queryset): if self.is_valid(): data = self.cleaned_data - if data["name"]: + if data.get("name"): queryset = queryset.filter(name__icontains=data["name"]) - if data["service"]: + if data.get("service"): queryset = queryset.filter( context__service_definition__service=data["service"] ) - if data["provider"]: + if data.get("provider"): queryset = queryset.filter( context__service_offering__provider=data["provider"] ) - if data["control_plane"]: + if data.get("control_plane"): queryset = queryset.filter(context__control_plane=data["control_plane"]) - if data["status"]: - if data["status"] == "active": - queryset = queryset.filter(is_deleted=False) - else: - queryset = queryset.filter(is_deleted=True) + status = data.get("status") + if status == "active": + queryset = queryset.filter(is_deleted=False) + elif status == "deleted": + queryset = queryset.filter(is_deleted=True) return queryset @@ -105,11 +108,13 @@ class ServiceInstanceDeleteForm(forms.ModelForm): def clean_name(self): entered_name = self.cleaned_data.get("name") if entered_name != self.instance.name: - raise ValidationError( - _("The entered name does not match the instance name. Deletion not confirmed.") + raise forms.ValidationError( + _( + "The entered name does not match the instance name. Deletion not confirmed." + ) ) return entered_name class Meta: model = ServiceInstance - fields = ("name", ) + fields = ("name",) diff --git a/src/servala/frontend/templates/frontend/organizations/service_instance_delete_form.html b/src/servala/frontend/templates/frontend/organizations/service_instance_delete_form.html index 08d4167..5296c56 100644 --- a/src/servala/frontend/templates/frontend/organizations/service_instance_delete_form.html +++ b/src/servala/frontend/templates/frontend/organizations/service_instance_delete_form.html @@ -1,11 +1,18 @@ {% load i18n %} -
+ {% csrf_token %} {% endblock page_title_extra %} @@ -45,7 +44,7 @@
{% translate "Created By" %}
- {{ instance.created_by }} + {{ instance.created_by|default:"-" }}
{% translate "Created At" %}
@@ -106,9 +105,9 @@ {{ condition.status }} {% endif %} - {{ condition.lastTransitionTime }} - {{ condition.reason }} - {{ condition.message }} + {{ condition.lastTransitionTime|date:"SHORT_DATETIME_FORMAT" }} + {{ condition.reason|default:"-" }} + {{ condition.message|truncatewords:20|default:"-" }} {% endfor %} @@ -137,6 +136,8 @@ data-bs-toggle="tab" role="tab">{{ fieldset.title }} + {% empty %} + {% endfor %} @@ -153,7 +154,7 @@ {% if field.value|default:""|stringformat:"s"|slice:":1" == "{" or field.value|default:""|stringformat:"s"|slice:":1" == "[" %}
{{ field.value|pprint }}
{% else %} - {{ field.value }} + {{ field.value|default:"-" }} {% endif %}
{% endfor %} @@ -168,13 +169,15 @@ {% if field.value|default:""|stringformat:"s"|slice:":1" == "{" or field.value|default:""|stringformat:"s"|slice:":1" == "[" %}
{{ field.value|pprint }}
{% else %} - {{ field.value }} + {{ field.value|default:"-" }} {% endif %} {% endfor %} {% endfor %} + {% empty %} +

{% translate "No specification details to display." %}

{% endfor %} @@ -218,15 +221,21 @@ {% endif %} - -