Coverage for src/couchers/moderation/utils.py: 100%

13 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-12-20 11:53 +0000

1""" 

2Utility functions for the Unified Moderation System (UMS) 

3""" 

4 

5from sqlalchemy.orm import Session 

6 

7from couchers.metrics import observe_moderation_action, observe_moderation_queue_item_created 

8from couchers.models import ( 

9 ModerationAction, 

10 ModerationLog, 

11 ModerationObjectType, 

12 ModerationQueueItem, 

13 ModerationState, 

14 ModerationTrigger, 

15 ModerationVisibility, 

16) 

17 

18 

19def create_moderation( 

20 session: Session, 

21 object_type: ModerationObjectType, 

22 object_id: int, 

23 creator_user_id: int, 

24) -> ModerationState: 

25 moderation_state = ModerationState( 

26 object_type=object_type, 

27 object_id=object_id, 

28 visibility=ModerationVisibility.SHADOWED, 

29 ) 

30 session.add(moderation_state) 

31 session.flush() 

32 

33 session.add( 

34 ModerationLog( 

35 moderation_state_id=moderation_state.id, 

36 action=ModerationAction.CREATE, 

37 moderator_user_id=creator_user_id, 

38 new_visibility=ModerationVisibility.SHADOWED, 

39 reason="Object created.", 

40 ) 

41 ) 

42 

43 session.add( 

44 ModerationQueueItem( 

45 moderation_state_id=moderation_state.id, 

46 trigger=ModerationTrigger.INITIAL_REVIEW, 

47 reason="Object created.", 

48 ) 

49 ) 

50 session.flush() 

51 

52 observe_moderation_action(ModerationAction.CREATE, object_type) 

53 observe_moderation_queue_item_created(ModerationTrigger.INITIAL_REVIEW, object_type) 

54 

55 return moderation_state