docs: def wrap_value(value, include_empty=False):
      """
      :return: the value wrapped in a list unless it is already iterable (and not a dict);
      if so, empty values will be filtered out by default, and an empty list is returned.
      """
  
      if value is None:
          return [None] if include_empty else []
      elif hasattr(value, '__len__') and len(value) == 0:
          return [value] if include_empty else []
      elif isinstance(value, _wrap_types):
          return [value]
      elif not hasattr(value, '__iter__'):
          return [value]
  
      return value if include_empty else filter_empty(value, [])