Coverage for clustersoftware / models.py: 92%

37 statements  

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

1from django.db import models 

2from django.urls import reverse 

3from simple_history.models import HistoricalRecords 

4from vendor.models import Model as VendorModel 

5from django.contrib.auth.models import Group 

6 

7from . import app_label 

8 

9 

10class ClusterSoftwareManager(models.Manager): 

11 def get_by_natural_key(self, vendor, name, version): 

12 if isinstance(vendor, (list, tuple)): 

13 vendor = vendor[0] 

14 return self.get(vendor__name=vendor, name=name, version=version) 

15 

16 

17class Model(models.Model): 

18 objects = ClusterSoftwareManager() 

19 history = HistoricalRecords() 

20 name = models.CharField(max_length=45) 

21 version = models.CharField(max_length=45, default="", blank=True) 

22 vendor = models.ForeignKey( 

23 VendorModel, 

24 related_name="%s_set" % app_label, 

25 related_query_name="%s" % app_label, 

26 on_delete=models.PROTECT, 

27 ) 

28 

29 group = models.ForeignKey( 

30 Group, 

31 editable=False, 

32 blank=True, 

33 null=True, 

34 on_delete=models.PROTECT, 

35 related_name="clustersoftwares", 

36 ) 

37 

38 def __str__(self): 

39 if self.name and self.version: 

40 return "{} {}".format(self.name, self.version) 

41 if self.name and not self.version: 

42 return "%s" % (self.name) 

43 return self # pragma: no cover 

44 

45 def natural_key(self): 

46 return self.vendor.natural_key() + (self.name, self.version) 

47 

48 natural_key.dependencies = ["vendor.Model"] 

49 

50 @classmethod 

51 def get_natural_key_fields(cls): 

52 return ["vendor__name", "name", "version"] 

53 

54 @classmethod 

55 def get_natural_key_info(cls): 

56 return [("vendor", VendorModel), ("name", None), ("version", None)] 

57 

58 def get_absolute_url(self): 

59 

60 return reverse("%s:detail" % app_label, kwargs={"pk": self.pk}) 

61 

62 class Meta: 

63 db_table = "{}_{}".format("sm", app_label) 

64 constraints = [ 

65 models.UniqueConstraint( 

66 fields=["vendor", "name", "version"], 

67 name="unique_sm_clustersoftware_vendor_name_version", 

68 ), 

69 models.UniqueConstraint( 

70 fields=["vendor", "name", "version", "group"], 

71 name="unique_sm_clustersoftware_vendor_name_version_group", 

72 ), 

73 ]