Coverage for clustersoftware / models.py: 92%
37 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 vendor.models import Model as VendorModel
5from django.contrib.auth.models import Group
7from . import app_label
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)
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 )
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 )
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
45 def natural_key(self):
46 return self.vendor.natural_key() + (self.name, self.version)
48 natural_key.dependencies = ["vendor.Model"]
50 @classmethod
51 def get_natural_key_fields(cls):
52 return ["vendor__name", "name", "version"]
54 @classmethod
55 def get_natural_key_info(cls):
56 return [("vendor", VendorModel), ("name", None), ("version", None)]
58 def get_absolute_url(self):
60 return reverse("%s:detail" % app_label, kwargs={"pk": self.pk})
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 ]