Coverage for operatingsystem / views.py: 98%

56 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-24 12:43 +0000

1from django.contrib.auth.mixins import LoginRequiredMixin 

2 

3from sm.views import SafeDeleteMixin 

4from sm.mixins import MultiTenantMixin 

5from typing import Any 

6 

7from .models import Model 

8from .forms import Form, FormDisabled 

9from . import app_label 

10 

11from django.views.generic import ListView as GenericListView 

12from django.views.generic.edit import UpdateView as GenericUpdateView 

13from django.views.generic.edit import CreateView as GenericCreateView 

14from django.views.generic.edit import DeleteView as GenericDeleteView 

15from django.contrib.messages.views import SuccessMessageMixin 

16 

17from django.utils.translation import gettext as _ 

18 

19from django.urls import reverse_lazy 

20 

21 

22class ListView(LoginRequiredMixin, MultiTenantMixin, GenericListView): 

23 template_name = "%s/list.html" % app_label 

24 model = Model 

25 paginate_by = 20 

26 paginate_orphans = paginate_by / 4 

27 ordering = "vendor" 

28 

29 def get_queryset(self) -> Any: 

30 from vendor.models import Model as VendorModel 

31 

32 # Filtering by group is handled by MultiTenantMixin 

33 # (via super().get_queryset()) 

34 # But we need the vendor grouping logic 

35 qs = VendorModel.objects.filter( 

36 is_software=True, group__in=self.request.user.groups.all() 

37 ) 

38 if self.request.user.is_superuser: 

39 qs = VendorModel.objects.filter(is_software=True) 

40 

41 if "srvmanager-show_empty" in self.request.COOKIES: 

42 if self.request.COOKIES["srvmanager-show_empty"] == "false": 

43 return qs.exclude(operatingsystem=None).order_by("name") 

44 return qs.order_by("name") 

45 

46 

47class DetailView(LoginRequiredMixin, MultiTenantMixin, GenericUpdateView): 

48 template_name = "%s/detail.html" % app_label 

49 model = Model 

50 form_class = FormDisabled 

51 

52 

53class UpdateView( 

54 SuccessMessageMixin, 

55 LoginRequiredMixin, 

56 MultiTenantMixin, 

57 GenericUpdateView, 

58): 

59 success_message = "%(version)s " + _("was updated successfully") 

60 template_name = "%s/edit.html" % app_label 

61 model = Model 

62 form_class = Form 

63 success_url = reverse_lazy("%s:index" % app_label) 

64 

65 

66class CreateView( 

67 SuccessMessageMixin, 

68 LoginRequiredMixin, 

69 MultiTenantMixin, 

70 GenericCreateView, 

71): 

72 success_message = "%(version)s " + _("was created successfully") 

73 

74 template_name = "%s/edit.html" % app_label 

75 form_class = Form 

76 model = Model 

77 success_url = reverse_lazy("%s:index" % app_label) 

78 

79 def get_initial(self) -> Any: 

80 from vendor.models import Model as VendorModel 

81 

82 initial = super().get_initial() 

83 if "vendor" in self.kwargs: 

84 initial["vendor"] = VendorModel.objects.filter( 

85 pk=self.kwargs["vendor"] 

86 ).first() 

87 return initial 

88 

89 

90class DeleteView( 

91 SafeDeleteMixin, 

92 LoginRequiredMixin, 

93 MultiTenantMixin, 

94 GenericDeleteView, 

95): 

96 success_message = "%(version)s " + _("was deleted successfully") 

97 template_name = "delete.html" 

98 model = Model 

99 success_url = reverse_lazy("%s:index" % app_label)