Coverage for clusterpackage/forms.py: 97%
32 statements
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-24 19:06 +0000
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-24 19:06 +0000
1from django.utils.translation import gettext as _
3from .models import Model
4from sm.forms import SMForm, SMFormDisabled
7class Form(SMForm):
8 class Meta(SMForm.Meta):
9 model = Model
11 def __init__(self, *args, user=None, **kwargs):
12 self.user = user
13 kwargs["user"] = user # let SMForm scope FK choices to the user
14 super().__init__(*args, **kwargs)
16 def clean(self):
17 cleaned_data = super().clean()
18 cluster = cleaned_data.get("cluster")
19 name = cleaned_data.get("name")
20 status = cleaned_data.get("status")
21 package_type = cleaned_data.get("package_type")
22 if None in (cluster, name, status, package_type):
23 return cleaned_data
24 # Packages inherit their cluster's tenant group. On update the group is
25 # immutable (editable=False) so the existing instance group governs.
26 if self.instance and self.instance.pk:
27 group = self.instance.group
28 else:
29 group = cluster.group
30 queryset = Model.objects.filter(
31 cluster=cluster,
32 name=name,
33 status=status,
34 package_type=package_type,
35 )
36 if group is not None:
37 queryset = queryset.filter(group=group)
38 else:
39 queryset = queryset.filter(group__isnull=True)
40 if self.instance and self.instance.pk:
41 queryset = queryset.exclude(pk=self.instance.pk)
42 if queryset.exists():
43 self.add_error(
44 None,
45 _(
46 "A cluster package with this cluster, name, status and "
47 "package type already exists."
48 ),
49 )
50 return cleaned_data
53class FormDisabled(Form, SMFormDisabled):
54 pass