docs: def check_has(priority=BaseCheck.HIGH, gname=None):
      """Decorator to wrap a function to check if a dataset has given attributes.
      :param function func: function to wrap"""
  
      def _inner(func):
          def _dec(s, ds):
              attr_process = kvp_convert(func(s, ds))
  
              ret_val = []
              # could potentially run tests in parallel if we eliminated side
              # effects on `ret_val`
              for kvp in attr_process.items():
                  # function mutates ret_val
                  attr_check(kvp, ds, priority, ret_val, gname)
              return ret_val
  
          return wraps(func)(_dec)
  
      return _inner