docs: def filter_single_need(need, filter_string=""):
      """
      Checks if a single need/need_part passes a filter_string
  
      :param need: need or need_part
      :param filter_string: string, which is used as input for eval()
      :return: True, if need as passed the filter_string, else False
      """
      filter_context = need.copy()
      filter_context["search"] = re.search
      result = False
      try:
          result = bool(eval(filter_string, None, filter_context))
      except Exception as e:
          raise NeedInvalidFilter("Filter {0} not valid: Error: {1}".format(filter_string, e))
      return result