docs: def is_filter_type(target):
      # type: (Any) -> Union[bool, Text]
      """
      Returns whether the specified object can be registered as a filter.
  
      :return:
          Returns ``True`` if the object is a filter.
          Otherwise, returns a string indicating why it is not valid.
      """
      if not is_class(target):
          return 'not a class'
  
      if not issubclass(target, BaseFilter):
          return 'does not extend BaseFilter'
  
      if is_abstract(target):
          return 'abstract class'
  
      return True