Skip to content

models

django_spire.metric.domain.models

__all__ = ['Domain', 'Statistic', 'StatisticGroup', 'StatisticValue', 'SubDomain'] module-attribute

Statistic

Bases: HistoryModelMixin, ActivityMixin

key = models.SlugField(max_length=64, unique=True, blank=True) class-attribute instance-attribute

group = models.ForeignKey(StatisticGroup, on_delete=models.CASCADE, related_name='statistics', related_query_name='statistic') class-attribute instance-attribute

name = models.CharField(max_length=255) class-attribute instance-attribute

interval = models.CharField(max_length=20, choices=StatisticIntervalChoices.choices, default=StatisticIntervalChoices.DAILY) class-attribute instance-attribute

value_type = models.CharField(max_length=20, choices=StatisticValueTypeChoices.choices, blank=True, default=StatisticValueTypeChoices.NUMBER) class-attribute instance-attribute

objects = querysets.StatisticQuerySet().as_manager() class-attribute instance-attribute

services = StatisticService() class-attribute instance-attribute

Meta

verbose_name = 'Statistic' class-attribute instance-attribute
verbose_name_plural = 'Statistics' class-attribute instance-attribute
db_table = 'django_spire_metric_domain_statistic' class-attribute instance-attribute

save

Source code in django_spire/metric/domain/statistic/models.py
def save(self, *args, **kwargs) -> None:
    if self.pk is None and not self.key:
        self.key = unique_key_from_name(self)
    super().save(*args, **kwargs)

record classmethod

Source code in django_spire/metric/domain/statistic/models.py
@classmethod
def record(
    cls,
    statistic_key: str,
    sub_domain_key: str,
    reference: str,
    value: float | str | Decimal = 1,
) -> StatisticValue:
    return cls.services.record(statistic_key, sub_domain_key, reference, value)

remote_record classmethod

Source code in django_spire/metric/domain/statistic/models.py
@classmethod
def remote_record(
    cls,
    statistic_key: str,
    sub_domain_key: str,
    reference: str,
    value: float | str | Decimal = 1,
) -> dict | None:
    return cls.services.remote_record(statistic_key, sub_domain_key, reference, value)

__str__

Source code in django_spire/metric/domain/statistic/models.py
def __str__(self) -> str:
    return self.name

StatisticGroup

Bases: HistoryModelMixin, ActivityMixin

domain = models.ForeignKey('django_spire_metric_domain.Domain', on_delete=models.CASCADE, related_name='statistic_groups', related_query_name='statistic_group') class-attribute instance-attribute

name = models.CharField(max_length=255) class-attribute instance-attribute

description = models.TextField(default='') class-attribute instance-attribute

objects = querysets.StatisticGroupQuerySet().as_manager() class-attribute instance-attribute

services = StatisticGroupService() class-attribute instance-attribute

Meta

verbose_name = 'Statistic Group' class-attribute instance-attribute
verbose_name_plural = 'Statistics Groups' class-attribute instance-attribute
db_table = 'django_spire_metric_domain_statistic_group' class-attribute instance-attribute

subdomains_qs

Source code in django_spire/metric/domain/statistic/models.py
def subdomains_qs(self) -> QuerySet[SubDomain]:
    return self.domain.subdomains.active()

set_deleted

Source code in django_spire/metric/domain/statistic/models.py
def set_deleted(self) -> None:
    with transaction.atomic():
        super().set_deleted()
        soft_delete_queryset(self.statistics.all())

__str__

Source code in django_spire/metric/domain/statistic/models.py
def __str__(self) -> str:
    return self.name

StatisticValue

Bases: Model

statistic = models.ForeignKey(Statistic, on_delete=models.CASCADE, related_name='values', related_query_name='value') class-attribute instance-attribute

sub_domain = models.ForeignKey('django_spire_metric_domain.subdomain', on_delete=models.CASCADE, related_name='values', related_query_name='value') class-attribute instance-attribute

reference = models.CharField(max_length=255) class-attribute instance-attribute

timestamp = models.DateTimeField(default=timezone.now) class-attribute instance-attribute

value = models.DecimalField(default=0, max_digits=16, decimal_places=4) class-attribute instance-attribute

objects = querysets.StatisticValueQuerySet().as_manager() class-attribute instance-attribute

services = StatisticValueService() class-attribute instance-attribute

Meta

verbose_name = 'Statistic Value' class-attribute instance-attribute
verbose_name_plural = 'Statistic Values' class-attribute instance-attribute
db_table = 'django_spire_metric_domain_statistic_value' class-attribute instance-attribute
indexes = [models.Index(fields=['statistic', 'timestamp'], name='ix_statistic_timestamp'), models.Index(fields=['statistic', 'sub_domain', 'timestamp'], name='ix_statistic_subdomain_ts'), models.Index(fields=['statistic', 'reference', 'timestamp'], name='ix_statistic_reference_ts')] class-attribute instance-attribute

__str__

Source code in django_spire/metric/domain/statistic/models.py
def __str__(self) -> str:
    return f'{self.reference} ({self.value})'

Domain

Bases: HistoryModelMixin, ActivityMixin

name = models.CharField(max_length=255) class-attribute instance-attribute

description = models.TextField(default='') class-attribute instance-attribute

sub_domain_name = models.CharField(max_length=128) class-attribute instance-attribute

objects = querysets.DomainQuerySet().as_manager() class-attribute instance-attribute

services = DomainService() class-attribute instance-attribute

Meta

verbose_name = 'Domain' class-attribute instance-attribute
verbose_name_plural = 'Domains' class-attribute instance-attribute
db_table = 'django_spire_metric_domain' class-attribute instance-attribute

__str__

Source code in django_spire/metric/domain/models.py
def __str__(self) -> str:
    return self.name

set_deleted

Source code in django_spire/metric/domain/models.py
def set_deleted(self) -> None:
    with transaction.atomic():
        super().set_deleted()

        for subdomain in self.subdomains.all():
            subdomain.set_deleted()

        soft_delete_queryset(self.statistic_groups.all())
        soft_delete_queryset(Statistic.objects.filter(group__domain_id=self.pk))

SubDomain

Bases: HistoryModelMixin, ActivityMixin

domain = models.ForeignKey(Domain, on_delete=models.CASCADE, related_name='subdomains', related_query_name='subdomain') class-attribute instance-attribute

key = models.SlugField(max_length=64, unique=True, blank=True) class-attribute instance-attribute

name = models.CharField(max_length=255) class-attribute instance-attribute

description = models.TextField(default='') class-attribute instance-attribute

objects = querysets.SubDomainQuerySet().as_manager() class-attribute instance-attribute

services = SubDomainService() class-attribute instance-attribute

Meta

verbose_name = 'Sub Domain' class-attribute instance-attribute
verbose_name_plural = 'Sub Domains' class-attribute instance-attribute
db_table = 'django_spire_metric_sub_domain' class-attribute instance-attribute

save

Source code in django_spire/metric/domain/models.py
def save(self, *args, **kwargs) -> None:
    if self.pk is None and not self.key:
        self.key = unique_key_from_name(self)
    super().save(*args, **kwargs)

__str__

Source code in django_spire/metric/domain/models.py
def __str__(self) -> str:
    return self.name