class_docstr: SlackOutput handles all alert dispatching for Slack
class_docstr_tok: ["SlackOutput","handles","all","alert","dispatching","for","Slack"]
docstr: Translate a map from json (dict) into a more human-readable list of lines
  This will handle recursion of all nested maps and lists within the map
  
  Args:
      json_values (dict): dictionary to be iterated over and formatted
      tab (str): string value to use for indentation
      indent_count (int): Number of tabs to prefix each line with
  
  Returns:
      list: strings that have been properly tabbed and formatted for printing
docstr_tok: ["Translate","a","map","from","json","(","dict",")","into","a","more","human-readable","list","of","lines","This","will","handle","recursion","of","all","nested","maps","and","lists","within","the","map","Args",":","json_values","(","dict",")",":","dictionary","to","be","iterated","over","and","formatted","tab","(","str",")",":","string","value","to","use","for","indentation","indent_count","(","int",")",":","Number","of","tabs","to","prefix","each","line","with","Returns",":","list",":","strings","that","have","been","properly","tabbed","and","formatted","for","printing"]
code: def _json_map_to_text(cls, json_values, tab, indent_count):
      """Translate a map from json (dict) into a more human-readable list of lines
      This will handle recursion of all nested maps and lists within the map
  
      Args:
          json_values (dict): dictionary to be iterated over and formatted
          tab (str): string value to use for indentation
          indent_count (int): Number of tabs to prefix each line with
  
      Returns:
          list: strings that have been properly tabbed and formatted for printing
      """
      all_lines = []
      for key, value in sorted(json_values.items()):
          if isinstance(value, (dict, list)) and value:
              all_lines.append(
                  "{}*{}:*".format(tab * indent_count, key)
              )
              all_lines.extend(
                  cls._json_to_slack_mrkdwn(value, indent_count + 1)
              )
          else:
              new_lines = cls._json_to_slack_mrkdwn(
                  value, indent_count + 1
              )
              if len(new_lines) == 1:
                  all_lines.append(
                      "{}*{}:* {}".format(
                          tab * indent_count, key, new_lines[0]
                      )
                  )
              elif new_lines:
                  all_lines.append(
                      "{}*{}:*".format(tab * indent_count, key)
                  )
                  all_lines.extend(new_lines)
              else:
                  all_lines.append(
                      "{}*{}:* {}".format(
                          tab * indent_count, key, value
                      )
                  )
  
      return all_lines
  
file_path: streamalert/streamalert/alert_processor/outputs/slack.py
imports: import html
  from collections import OrderedDict
  from streamalert.alert_processor.helpers import compose_alert, elide_string_middle
  from streamalert.alert_processor.outputs.output_base import OutputDispatcher, OutputProperty, OutputRequestFailure, StreamAlertOutput
  from streamalert.shared.logger import get_logger
label_desc: Use image node_id 8 for calling the SlackOutput obj's underlying member method code with example usage: obj._json_map_to_text(cls, json_values, tab, indent_count) and returns: all_lines