Coverage for backend/django/core/auxiliary/on_delete.py: 100%
10 statements
« prev ^ index » next coverage.py v7.10.7, created at 2026-07-22 05:22 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2026-07-22 05:22 +0000
1"""Deletion policies for the cyclic stable-flowsheet/state aggregate."""
3from django.db.models.deletion import ProtectedError
6def _protect_unless_owner_is_being_deleted(collector, field, sub_objs, message):
7 """Protect a selected child without creating a parent-delete cycle."""
9 deleting_owner_ids = {
10 owner.pk for owner in collector.data.get(field.model, ())
11 }
12 protected = [obj for obj in sub_objs if obj.pk not in deleting_owner_ids]
13 if protected:
14 raise ProtectedError(message, protected)
17def protect_current_state_unless_flowsheet_deleting(
18 collector,
19 field,
20 sub_objs,
21 using,
22):
23 """Protect a live state unless its stable flowsheet is also being deleted."""
25 _protect_unless_owner_is_being_deleted(
26 collector,
27 field,
28 sub_objs,
29 "Cannot delete the current flowsheet state.",
30 )
33def protect_root_grouping_unless_state_deleting(collector, field, sub_objs, using):
34 """Protect a state's root grouping without blocking deletion of the state."""
36 _protect_unless_owner_is_being_deleted(
37 collector,
38 field,
39 sub_objs,
40 "Cannot delete a flowsheet state's root grouping.",
41 )