diff --git a/promgen/models.py b/promgen/models.py index d3606aa7..d99467a8 100644 --- a/promgen/models.py +++ b/promgen/models.py @@ -495,11 +495,12 @@ def save(self, *args, **kwargs): self.annotations["rule"] = resolve_domain("rule-detail", pk=self.pk) super().save(*args, **kwargs) else: - # When creating a new rule, the primary key is typically not available until the instance is saved to the database. + # When creating a new rule, the primary key is typically not available until the + # instance is saved to the database. # Therefore, we save it first then set annotations["rule"] and save again. super().save(*args, **kwargs) self.annotations["rule"] = resolve_domain("rule-detail", pk=self.pk) - super().save(update_fields=['annotations']) + super().save(update_fields=["annotations"]) class AlertLabel(models.Model): diff --git a/promgen/tests/test_models.py b/promgen/tests/test_models.py index 3aaf4819..33d42362 100644 --- a/promgen/tests/test_models.py +++ b/promgen/tests/test_models.py @@ -38,8 +38,9 @@ def test_validators(self): ) @mock.patch("django.dispatch.dispatcher.Signal.send") - def test_custom_save_rule(self, mock_post): - # Check if annotation["rule"] is automatically set to be {domain}/rule/{id} when creating a new rule + def test_rule_annotation(self, mock_post): + # Check if annotation["rule"] is automatically set to be {domain}/rule/{id} when creating a + # new rule rule = models.Rule( name="example-rule", content_type=ContentType.objects.get_for_model(models.Site), @@ -50,18 +51,21 @@ def test_custom_save_rule(self, mock_post): rule.save() self.assertEqual(resolve_domain("rule-detail", rule.pk), rule.annotations["rule"]) - # Check if annotation["rule"] is automatically set to be {domain}/rule/{id} when updating an existed rule + # Check if annotation["rule"] is automatically set to be {domain}/rule/{id} when updating an + # existed rule rule.name = "another-example-rule" rule.annotations["rule"] = "another-annotation-value" rule.save() self.assertEqual(resolve_domain("rule-detail", rule.pk), rule.annotations["rule"]) - # Check if annotation["rule"] is still set to be {domain}/rule/{id} when trying to remove annotation["rule"] + # Check if annotation["rule"] is still set to be {domain}/rule/{id} when trying to remove + # annotation["rule"] rule.annotations["rule"] = None rule.save() self.assertEqual(resolve_domain("rule-detail", rule.pk), rule.annotations["rule"]) - # Check if annotation["rule"] of new rule is automatically set to be {domain}/rule/{id} when cloning an existed rule + # Check if annotation["rule"] of new rule is automatically set to be {domain}/rule/{id} + # when cloning an existed rule new_rule = rule.copy_to(content_type="service", object_id=2) self.assertEqual(resolve_domain("rule-detail", rule.pk), rule.annotations["rule"]) self.assertEqual(resolve_domain("rule-detail", new_rule.pk), new_rule.annotations["rule"])