125 lines
4.1 KiB
Python
125 lines
4.1 KiB
Python
from django import forms
|
|
from django.db.models import Q
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from servala.core.models import (
|
|
CloudProvider,
|
|
ControlPlane,
|
|
Service,
|
|
ServiceCategory,
|
|
ServiceInstance,
|
|
ServiceOffering,
|
|
)
|
|
|
|
|
|
class ServiceFilterForm(forms.Form):
|
|
category = forms.ModelChoiceField(
|
|
queryset=ServiceCategory.objects.all(), required=False
|
|
)
|
|
cloud_provider = forms.ModelChoiceField(
|
|
queryset=CloudProvider.objects.all(), required=False
|
|
)
|
|
q = forms.CharField(label=_("Search"), required=False)
|
|
|
|
def filter_queryset(self, queryset):
|
|
if category := self.cleaned_data.get("category"):
|
|
queryset = queryset.filter(category=category)
|
|
if cloud_provider := self.cleaned_data.get("cloud_provider"):
|
|
queryset = queryset.filter(offerings__provider=cloud_provider)
|
|
if search := self.cleaned_data.get("q"):
|
|
queryset = queryset.filter(
|
|
Q(name__icontains=search) | Q(category__name__icontains=search)
|
|
)
|
|
return queryset
|
|
|
|
|
|
class ControlPlaneSelectForm(forms.Form):
|
|
control_plane = forms.ModelChoiceField(
|
|
queryset=ControlPlane.objects.none(),
|
|
label=_("Service Provider Zone"),
|
|
empty_label=None,
|
|
)
|
|
|
|
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):
|
|
name = forms.CharField(required=False, label=_("Name"))
|
|
service = forms.ModelChoiceField(
|
|
queryset=Service.objects.all(), required=False, label=_("Service")
|
|
)
|
|
provider = forms.ModelChoiceField(
|
|
queryset=ServiceOffering.objects.all()
|
|
.values_list("provider", flat=True)
|
|
.distinct(),
|
|
required=False,
|
|
label=_("Provider"),
|
|
)
|
|
control_plane = forms.ModelChoiceField(
|
|
queryset=ControlPlane.objects.all(),
|
|
required=False,
|
|
label=_("Service Provider Zone"),
|
|
)
|
|
status = forms.ChoiceField(
|
|
choices=(
|
|
("active", _("Active")),
|
|
("deleted", _("Deleted")),
|
|
),
|
|
required=False,
|
|
label=_("Status"),
|
|
)
|
|
|
|
def filter_queryset(self, queryset):
|
|
if self.is_valid():
|
|
data = self.cleaned_data
|
|
if data.get("name"):
|
|
queryset = queryset.filter(name__icontains=data["name"])
|
|
if data.get("service"):
|
|
queryset = queryset.filter(
|
|
context__service_definition__service=data["service"]
|
|
)
|
|
if data.get("provider"):
|
|
queryset = queryset.filter(
|
|
context__service_offering__provider=data["provider"]
|
|
)
|
|
if data.get("control_plane"):
|
|
queryset = queryset.filter(context__control_plane=data["control_plane"])
|
|
status = data.get("status")
|
|
if status == "active":
|
|
queryset = queryset.filter(is_deleted=False)
|
|
elif status == "deleted":
|
|
queryset = queryset.filter(is_deleted=True)
|
|
return queryset
|
|
|
|
|
|
class ServiceInstanceDeleteForm(forms.ModelForm):
|
|
name = forms.CharField(
|
|
label=_("Instance Name"),
|
|
max_length=63,
|
|
widget=forms.TextInput(attrs={"class": "form-control"}),
|
|
)
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
kwargs["initial"] = {"name": ""}
|
|
super().__init__(*args, **kwargs)
|
|
self.fields["name"].help_text = _(
|
|
"To confirm deletion, please type the instance name: <strong>{instance_name}</strong>"
|
|
).format(instance_name=self.instance.name)
|
|
|
|
def clean_name(self):
|
|
entered_name = self.cleaned_data.get("name")
|
|
if entered_name != self.instance.name:
|
|
raise forms.ValidationError(
|
|
_(
|
|
"The entered name does not match the instance name. Deletion not confirmed."
|
|
)
|
|
)
|
|
return entered_name
|
|
|
|
class Meta:
|
|
model = ServiceInstance
|
|
fields = ("name",)
|