Skip to content

Commit 66956ba

Browse files
authored
Merge branch 'main' into aap-24814
2 parents 1927e02 + cbb6a6f commit 66956ba

File tree

4 files changed

+63
-5
lines changed

4 files changed

+63
-5
lines changed

src/aap_eda/core/models/activation.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,26 @@
1616

1717
from aap_eda.core.enums import (
1818
ActivationStatus,
19+
ProcessParentType,
1920
RestartPolicy,
2021
RulebookProcessLogLevel,
2122
)
2223
from aap_eda.core.utils import get_default_log_level
2324
from aap_eda.services.activation.engine.common import ContainerableMixin
2425

2526
from .base import BaseOrgModel, UniqueNamedModel
26-
from .mixins import StatusHandlerModelMixin
27+
from .mixins import OnDeleteProcessParentMixin, StatusHandlerModelMixin
2728
from .user import AwxToken, User
2829

2930
__all__ = ("Activation",)
3031

3132

3233
class Activation(
33-
StatusHandlerModelMixin, ContainerableMixin, BaseOrgModel, UniqueNamedModel
34+
StatusHandlerModelMixin,
35+
ContainerableMixin,
36+
OnDeleteProcessParentMixin,
37+
BaseOrgModel,
38+
UniqueNamedModel,
3439
):
3540
class Meta:
3641
db_table = "core_activation"
@@ -127,3 +132,6 @@ class Meta:
127132
blank=True,
128133
help_text="Name of the kubernetes service",
129134
)
135+
136+
def get_parent_type(self) -> str:
137+
return ProcessParentType.ACTIVATION

src/aap_eda/core/models/event_stream.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,22 @@
1616

1717
from aap_eda.core.enums import (
1818
ActivationStatus,
19+
ProcessParentType,
1920
RestartPolicy,
2021
RulebookProcessLogLevel,
2122
)
2223
from aap_eda.core.utils import get_default_log_level
2324
from aap_eda.services.activation.engine.common import ContainerableMixin
2425

2526
from .base import UniqueNamedModel
26-
from .mixins import StatusHandlerModelMixin
27+
from .mixins import OnDeleteProcessParentMixin, StatusHandlerModelMixin
2728

2829

2930
class EventStream(
30-
StatusHandlerModelMixin, ContainerableMixin, UniqueNamedModel
31+
StatusHandlerModelMixin,
32+
ContainerableMixin,
33+
OnDeleteProcessParentMixin,
34+
UniqueNamedModel,
3135
):
3236
"""Model representing an event stream."""
3337

@@ -107,3 +111,6 @@ def __str__(self) -> str:
107111
def _get_skip_audit_events(self) -> bool:
108112
"""Event stream skips audit events."""
109113
return True
114+
115+
def get_parent_type(self) -> str:
116+
return ProcessParentType.EVENT_STREAM

src/aap_eda/core/models/mixins.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import typing as tp
1616

17+
from django.apps import apps
1718
from django.db import models
1819

1920
from aap_eda.core.enums import ACTIVATION_STATUS_MESSAGE_MAP, ActivationStatus
@@ -98,3 +99,18 @@ def _is_valid_status(self):
9899
ActivationStatus(self.status)
99100
except ValueError as error:
100101
raise UnknownStatusError(error) from None
102+
103+
104+
class OnDeleteProcessParentMixin:
105+
"""Mixin to delete related objects when the parent is deleted."""
106+
107+
def _delete_request_queue(self):
108+
model = apps.get_model("core", "ActivationRequestQueue")
109+
model.objects.filter(
110+
process_parent_id=self.id,
111+
process_parent_type=self.get_parent_type(),
112+
).delete()
113+
114+
def delete(self, *args, **kwargs):
115+
self._delete_request_queue()
116+
super().delete(*args, **kwargs)

tests/integration/core/test_process_parent.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from pytest_lazyfixture import lazy_fixture
1818

1919
from aap_eda.core import models
20-
from aap_eda.core.enums import ActivationStatus
20+
from aap_eda.core.enums import ActivationRequest, ActivationStatus
2121

2222

2323
@pytest.mark.parametrize(
@@ -58,3 +58,30 @@ def test_latest_instance_field(instance):
5858
first_instance.status = ActivationStatus.COMPLETED
5959
first_instance.save(update_fields=["status"])
6060
assert instance.latest_instance == second_instance
61+
62+
63+
@pytest.mark.parametrize(
64+
"instance",
65+
[
66+
pytest.param(
67+
lazy_fixture("new_activation"),
68+
id="activation",
69+
),
70+
pytest.param(
71+
lazy_fixture("new_event_stream"),
72+
id="event_stream",
73+
),
74+
],
75+
)
76+
@pytest.mark.django_db
77+
def test_on_delete_process_parent_mixin(instance):
78+
"""Test on_delete_process_parent_mixin."""
79+
queue_item = models.ActivationRequestQueue.objects.create(
80+
process_parent_type=instance.get_parent_type(),
81+
process_parent_id=instance.id,
82+
request=ActivationRequest.AUTO_START,
83+
)
84+
instance.delete()
85+
assert not models.ActivationRequestQueue.objects.filter(
86+
id=queue_item.id
87+
).exists()

0 commit comments

Comments
 (0)