class_docstr: A predicate that compares an ifd against a metadata key and value
class_docstr_tok: ["A","predicate","that","compares","an","ifd","against","a","metadata","key","and","value"]
docstr: Define the possible metadata keys to be matched against literal values
  
  keys - a list of keys
docstr_tok: ["Define","the","possible","metadata","keys","to","be","matched","against","literal","values","keys","-","a","list","of","keys"]
code: def set_metadata_keys(self, keys):
      """Define the possible metadata keys to be matched against literal values
  
      keys - a list of keys
      """
      sub_subpredicates = [
          FilterPredicate(
              key,
              self.display_fmt % key,
              lambda plane, match, key=key: str(plane.get_metadata(key))
              == match,
              [LITERAL_PREDICATE],
          )
          for key in keys
      ]
      #
      # The subpredicates are "Does" and "Does not", so we add one level
      # below that.
      #
      for subpredicate in self.subpredicates:
          subpredicate.subpredicates = sub_subpredicates
  
file_path: CellProfiler/src/subpackages/core/cellprofiler_core/setting/filter/_metadata_predicate.py
imports: from ._does_not_predicate import DoesNotPredicate
  from ._does_predicate import DoesPredicate
  from ._filter import LITERAL_PREDICATE
  from ._filter_predicate import FilterPredicate
  from .._file_collection_display import FileCollectionDisplay
  from ...pipeline import ImageFile
  from ...pipeline import ImagePlane
label_desc: Use image node_id 2 for calling the MetadataPredicate obj's underlying member method code with example usage: obj.set_metadata_keys(keys) without return types