@@ -330,7 +330,7 @@ def _filter_by_missing_from_fs(self, query: Query, value: bool) -> Query:
330330 predicate = not_ (predicate )
331331 return query .filter (predicate )
332332
333- def _filter_by_verified (self , query : Query ) :
333+ def _filter_by_verified (self , query : Query , value : bool ) -> Query :
334334 keys_to_check = [
335335 "tosec_match" ,
336336 "mame_arcade_match" ,
@@ -347,11 +347,17 @@ def _filter_by_verified(self, query: Query):
347347 conditions = " OR " .join (
348348 f"(hasheous_metadata->>'{ key } ')::boolean" for key in keys_to_check
349349 )
350- return query .filter (text (conditions ))
350+ predicate = text (f"({ conditions } )" )
351+ if not value :
352+ predicate = text (f"NOT ({ conditions } )" )
353+ return query .filter (predicate )
351354 else :
352- return query . filter (
353- or_ ( * (Rom .hasheous_metadata [key ].as_boolean () for key in keys_to_check ) )
355+ predicate = or_ (
356+ * (Rom .hasheous_metadata [key ].as_boolean () for key in keys_to_check )
354357 )
358+ if not value :
359+ predicate = not_ (predicate )
360+ return query .filter (predicate )
355361
356362 def _filter_by_genres (
357363 self ,
@@ -587,9 +593,8 @@ def filter_roms(
587593 if missing is not None :
588594 query = self ._filter_by_missing_from_fs (query , value = missing )
589595
590- # TODO: Correctly support true/false values.
591- if verified :
592- query = self ._filter_by_verified (query )
596+ if verified is not None :
597+ query = self ._filter_by_verified (query , value = verified )
593598
594599 if updated_after :
595600 query = query .filter (Rom .updated_at > updated_after )
0 commit comments