Coverage for clusterpackage / models.py: 88%

42 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 status.models import Model as StatusModel 

5from cluster.models import Model as ClusterModel 

6from clusterpackagetype.models import Model as ClusterpackagetypeModel 

7from django.contrib.auth.models import Group 

8 

9from taggit.managers import TaggableManager 

10 

11from . import app_label 

12 

13 

14class ClusterPackageManager(models.Manager): 

15 def get_by_natural_key(self, cluster, name): 

16 if isinstance(cluster, (list, tuple)): 

17 cluster = cluster[0] 

18 return self.get(cluster__name=cluster, name=name) 

19 

20 

21class Model(models.Model): 

22 objects = ClusterPackageManager() 

23 name = models.CharField(max_length=45) 

24 status = models.ForeignKey( 

25 StatusModel, 

26 related_name="%s_set" % app_label, 

27 on_delete=models.PROTECT, 

28 ) 

29 cluster = models.ForeignKey( 

30 ClusterModel, 

31 related_name="%s_set" % app_label, 

32 on_delete=models.PROTECT, 

33 ) 

34 description = models.CharField(max_length=256) 

35 host = models.CharField(max_length=253, verbose_name="IP/Hostname") 

36 port = models.CharField( 

37 max_length=10, verbose_name="Port or ID", blank=True, null=True 

38 ) 

39 package_type = models.ForeignKey( 

40 ClusterpackagetypeModel, 

41 related_name="%s_set" % app_label, 

42 on_delete=models.PROTECT, 

43 ) 

44 tags = TaggableManager(blank=True) 

45 history = HistoricalRecords(related_name="clusterpackage_history") 

46 

47 group = models.ForeignKey( 

48 Group, 

49 editable=False, 

50 blank=True, 

51 null=True, 

52 on_delete=models.PROTECT, 

53 related_name="clusterpackages", 

54 ) 

55 

56 def __str__(self): 

57 return "{}-{}".format(self.cluster, self.name) 

58 

59 def natural_key(self): 

60 return self.cluster.natural_key() + (self.name,) 

61 

62 natural_key.dependencies = ["cluster.Model"] 

63 

64 @classmethod 

65 def get_natural_key_fields(cls): 

66 return ["cluster__name", "name"] 

67 

68 @classmethod 

69 def get_natural_key_info(cls): 

70 return [("cluster", ClusterModel), ("name", None)] 

71 

72 def get_absolute_url(self): 

73 

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

75 

76 class Meta: 

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

78 constraints = [ 

79 models.UniqueConstraint( 

80 fields=["cluster", "name"], name="unique_sm_clusterpackage_cluster_name" 

81 ), 

82 models.UniqueConstraint( 

83 fields=["cluster", "name", "group"], 

84 name="unique_sm_clusterpackage_cluster_name_group", 

85 ), 

86 ]