11import logging
2- from typing import TYPE_CHECKING
32
43import grpc
54from sqlalchemy import and_ , exists , not_ , or_ , select
3635 NotificationDelivery ,
3736 Reply ,
3837 User ,
38+ get_moderated_models ,
3939)
4040from couchers .proto import moderation_pb2 , moderation_pb2_grpc
4141from couchers .proto .internal import jobs_pb2
4242from couchers .utils import Timestamp_from_datetime , now
4343
44- if TYPE_CHECKING :
45- from couchers .sql import _ModeratedContent
46-
4744logger = logging .getLogger (__name__ )
4845
4946MAX_PAGINATION_LENGTH = 1_000
123120 moderation_pb2 .MODERATION_OBJECT_TYPE_DISCUSSION : ModerationObjectType .discussion ,
124121}
125122
126- # Mapping from ModerationObjectType to the SQLAlchemy model class
127- moderationobjecttype2model : dict [ModerationObjectType , _ModeratedContent ] = {
128- ModerationObjectType .host_request : HostRequest ,
129- ModerationObjectType .group_chat : GroupChat ,
130- ModerationObjectType .friend_request : FriendRelationship ,
131- ModerationObjectType .event_occurrence : EventOccurrence ,
132- ModerationObjectType .comment : Comment ,
133- ModerationObjectType .reply : Reply ,
134- ModerationObjectType .discussion : Discussion ,
135- }
136-
137123
138124def bulk_set_user_content_visibility (
139125 session : Session ,
@@ -147,10 +133,9 @@ def bulk_set_user_content_visibility(
147133 final_reason = reason or f"Bulk visibility update for user { user .id } to { new_visibility .name } "
148134
149135 author_exists_clauses = []
150- for model in moderationobjecttype2model .values ():
151- author_col = getattr (model , model .__moderation_author_column__ )
136+ for entry in get_moderated_models ().values ():
152137 author_exists_clauses .append (
153- exists ().where (and_ (model .moderation_state_id == ModerationState .id , author_col == user .id ))
138+ exists ().where (and_ (entry . model .moderation_state_id == ModerationState .id , entry . author_column == user .id ))
154139 )
155140
156141 states = session .execute (select (ModerationState ).where (or_ (* author_exists_clauses ))).scalars ().all ()
@@ -346,13 +331,12 @@ def GetModerationQueue(
346331
347332 # Use EXISTS for efficient author filtering
348333 author_exists_clauses = []
349- for model in moderationobjecttype2model .values ():
350- author_col = getattr (model , model .__moderation_author_column__ )
334+ for entry in get_moderated_models ().values ():
351335 author_exists_clauses .append (
352336 exists ().where (
353337 and_ (
354- model .moderation_state_id == ModerationQueueItem .moderation_state_id ,
355- author_col == author_user_id ,
338+ entry . model .moderation_state_id == ModerationQueueItem .moderation_state_id ,
339+ entry . author_column == author_user_id ,
356340 )
357341 )
358342 )
@@ -687,13 +671,12 @@ def ListModerationStates(
687671
688672 if request .author_user_id :
689673 author_exists_clauses = []
690- for model in moderationobjecttype2model .values ():
691- author_col = getattr (model , model .__moderation_author_column__ )
674+ for entry in get_moderated_models ().values ():
692675 author_exists_clauses .append (
693676 exists ().where (
694677 and_ (
695- model .moderation_state_id == ModerationState .id ,
696- author_col == request .author_user_id ,
678+ entry . model .moderation_state_id == ModerationState .id ,
679+ entry . author_column == request .author_user_id ,
697680 )
698681 )
699682 )
0 commit comments