class_docstr: Provides convenience methods for accessing and modifying the alerts table.
docstr: Returns a generator that yields unique rule_names of items on the table
  
  Each unique name is yielded only once. Additionally, because the names materialized over
  several paginated calls, it is not 100% guaranteed to return every possible rule_name on
  the Alert Table; if there are other operations that are writing items to the DynamoDB table,
  it is possible for certain names to get skipped.
  
  Returns:
      Generator[str]
docstr_tok: ["Returns","a","generator","that","yields","unique","rule_names","of","items","on","the","table","Each","unique","name","is","yielded","only","once",".","Additionally",",","because","the","names","materialized","over","several","paginated","calls",",","it","is","not","100","%","guaranteed","to","return","every","possible","rule_name","on","the","Alert","Table",";","if","there","are","other","operations","that","are","writing","items","to","the","DynamoDB","table",",","it","is","possible","for","certain","names","to","get","skipped",".","Returns",":","Generator","[","str","]"]
code: def rule_names_generator(self):
      """Returns a generator that yields unique rule_names of items on the table
  
      Each unique name is yielded only once. Additionally, because the names materialized over
      several paginated calls, it is not 100% guaranteed to return every possible rule_name on
      the Alert Table; if there are other operations that are writing items to the DynamoDB table,
      it is possible for certain names to get skipped.
  
      Returns:
          Generator[str]
      """
      kwargs = {
          "ProjectionExpression": "RuleName",
          "Select": "SPECIFIC_ATTRIBUTES",
          # It is acceptable to use inconsistent reads here to reduce read capacity units
          # consumed, as there is already no guarantee of consistent in the rule names due to
          # pagination.
          "ConsistentRead": False,
      }
  
      rule_names = set()
      for item in self._paginate(self._table.scan, kwargs):
          name = item["RuleName"]
          if name in rule_names:
              continue
  
          rule_names.add(name)
          yield name
  
file_path: streamalert/streamalert/shared/alert_table.py
imports: from datetime import datetime, timedelta
  import boto3
  from boto3.dynamodb.conditions import Attr, Key
  from streamalert.shared.alert import Alert
  from streamalert.shared.helpers.dynamodb import ignore_conditional_failure
label_desc: Use image node_id 4 for calling the AlertTable obj's underlying member method code with example usage: obj.rule_names_generator() without return types