class_docstr: The class encapsulates normalization information for each normalized type
docstr: Parse all param type in params
  
  Args:
      params (list): a list of str or dict contains normalization configuration.
docstr_tok: ["Parse","all","param","type","in","params","Args",":","params","(","list",")",":","a","list","of","str","or","dict","contains","normalization","configuration","."]
code: def _parse_param_type(self, params):
      """Parse all param type in params
  
      Args:
          params (list): a list of str or dict contains normalization configuration.
      """
      if not isinstance(params, list):
          raise ConfigError(
              "Unsupported params {} for normalization. Convert params to a list".format(
                  params
              )
          )
  
      if all(isinstance(param, str) for param in params):
          return self.CONST_STR
  
      if all(
          isinstance(param, dict)
          and set(param.keys()).issubset(self.VALID_KEYS)
          for param in params
      ):
          return self.CONST_DICT
  
      # FIXME: should we raise exception here? Or may just return False and log a warming message
      raise ConfigError(
          (
              "Unsupported type(s) used in {} or missing keys. Valid types are str or dict and "
              "valid keys are {}"
          ).format(params, self.VALID_KEYS)
      )
  
imports: from collections import defaultdict
  import logging
  import itertools
  import uuid
  from streamalert.shared.config import TopLevelConfigKeys
  from streamalert.shared.exceptions import ConfigError
  from streamalert.shared.logger import get_logger
label_desc: Use image node_id 8 for calling the NormalizedType obj's underlying member method code with example usage: obj._parse_param_type(params) and returns: self, self