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

1"""Deletion policies for the cyclic stable-flowsheet/state aggregate.""" 

2 

3from django.db.models.deletion import ProtectedError 

4 

5 

6def _protect_unless_owner_is_being_deleted(collector, field, sub_objs, message): 

7 """Protect a selected child without creating a parent-delete cycle.""" 

8 

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) 

15 

16 

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.""" 

24 

25 _protect_unless_owner_is_being_deleted( 

26 collector, 

27 field, 

28 sub_objs, 

29 "Cannot delete the current flowsheet state.", 

30 ) 

31 

32 

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.""" 

35 

36 _protect_unless_owner_is_being_deleted( 

37 collector, 

38 field, 

39 sub_objs, 

40 "Cannot delete a flowsheet state's root grouping.", 

41 )