1717
1818if TYPE_CHECKING :
1919 from couchers .materialized_views import LiteUser
20- from couchers .models .moderation import ModeratedContentModel
20+ from couchers .models .moderation import ModeratedContent
2121
2222 type _UserLike = type [User | LiteUser | SignupFlow ]
2323 type _User = type [User | LiteUser ]
@@ -139,10 +139,11 @@ def where_user_columns_visible_to_each_other[T: tuple[Any, ...]](
139139
140140def where_moderated_content_visible_to_user_column [T : tuple [Any , ...]](
141141 query : Select [T ],
142- table : ModeratedContentModel ,
142+ table : type [ ModeratedContent ] ,
143143 user_id_column : InstrumentedAttribute [int ],
144144 is_list_operation : bool = False ,
145145) -> Select [T ]:
146+ entry = get_moderated_models ()[table .__moderation_object_type__ ]
146147 aliased_mod_state = aliased (ModerationState )
147148 conditions = [aliased_mod_state .visibility == ModerationVisibility .visible ]
148149
@@ -154,19 +155,22 @@ def where_moderated_content_visible_to_user_column[T: tuple[Any, ...]](
154155 conditions .append (
155156 and_ (
156157 aliased_mod_state .visibility == ModerationVisibility .shadowed ,
157- getattr ( table , table . __moderation_author_column__ ) == user_id_column ,
158+ entry . author_column == user_id_column ,
158159 )
159160 )
160161
161- return query .join (aliased_mod_state , aliased_mod_state .id == table .moderation_state_id ).where (or_ (* conditions ))
162+ return query .join (aliased_mod_state , aliased_mod_state .id == entry .moderation_state_id_column ).where (
163+ or_ (* conditions )
164+ )
162165
163166
164167def where_moderated_content_visible [T : tuple [Any , ...]](
165168 query : Select [T ],
166169 context : CouchersContext ,
167- table : ModeratedContentModel ,
170+ table : type [ ModeratedContent ] ,
168171 is_list_operation : bool = False ,
169172) -> Select [T ]:
173+ entry = get_moderated_models ()[table .__moderation_object_type__ ]
170174 aliased_mod_state = aliased (ModerationState )
171175 conditions = [aliased_mod_state .visibility == ModerationVisibility .visible ]
172176
@@ -179,11 +183,13 @@ def where_moderated_content_visible[T: tuple[Any, ...]](
179183 conditions .append (
180184 and_ (
181185 aliased_mod_state .visibility == ModerationVisibility .shadowed ,
182- getattr ( table , table . __moderation_author_column__ ) == context .user_id ,
186+ entry . author_column == context .user_id ,
183187 )
184188 )
185189
186- return query .join (aliased_mod_state , aliased_mod_state .id == table .moderation_state_id ).where (or_ (* conditions ))
190+ return query .join (aliased_mod_state , aliased_mod_state .id == entry .moderation_state_id_column ).where (
191+ or_ (* conditions )
192+ )
187193
188194
189195def moderation_state_column_visible (
@@ -207,14 +213,13 @@ def moderation_state_column_visible(
207213 shadowed_conditions : list [ColumnElement [bool ]] = []
208214 if context .is_logged_in ():
209215 for entry in get_moderated_models ().values ():
210- object_id_column = entry .model .__mapper__ .primary_key [0 ]
211216 shadowed_conditions .append (
212217 and_ (
213218 aliased_mod_state .object_type == entry .object_type ,
214219 exists (
215220 select (1 )
216221 .select_from (entry .model )
217- .where (object_id_column == aliased_mod_state .object_id )
222+ .where (entry . object_id_column == aliased_mod_state .object_id )
218223 .where (entry .author_column == context .user_id )
219224 ),
220225 )
0 commit comments