Coverage for clusterpackage / models.py: 88%
42 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-24 12:43 +0000
« 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
9from taggit.managers import TaggableManager
11from . import app_label
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)
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")
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 )
56 def __str__(self):
57 return "{}-{}".format(self.cluster, self.name)
59 def natural_key(self):
60 return self.cluster.natural_key() + (self.name,)
62 natural_key.dependencies = ["cluster.Model"]
64 @classmethod
65 def get_natural_key_fields(cls):
66 return ["cluster__name", "name"]
68 @classmethod
69 def get_natural_key_info(cls):
70 return [("cluster", ClusterModel), ("name", None)]
72 def get_absolute_url(self):
74 return reverse("%s:detail" % app_label, kwargs={"pk": self.pk})
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 ]