Coverage for clusterpackage/forms.py: 97%

32 statements  

« prev     ^ index     » next       coverage.py v7.17.0, created at 2026-10-24 19:06 +0000

1from django.utils.translation import gettext as _ 

2 

3from .models import Model 

4from sm.forms import SMForm, SMFormDisabled 

5 

6 

7class Form(SMForm): 

8 class Meta(SMForm.Meta): 

9 model = Model 

10 

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) 

15 

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 

51 

52 

53class FormDisabled(Form, SMFormDisabled): 

54 pass